mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
refactor: switch to ESM
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
"name": "aiostreams",
|
||||
"version": "2.12.2",
|
||||
"description": "AIOStreams consolidates multiple Stremio addons and debrid services into a single, easily configurable addon. It allows highly customisable filtering, sorting, and formatting of results and supports proxying all your streams through MediaFlow Proxy or StremThru for improved compatibility and IP restriction bypassing.",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"test": "pnpm run test --workspaces",
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"name": "@aiostreams/core",
|
||||
"version": "0.0.0",
|
||||
"main": "dist/index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "vitest run --passWithNoTests",
|
||||
"test:watch": "vitest watch",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Manifest, Meta, Stream } from '../../db/schemas';
|
||||
import { Manifest, Meta, Stream } from '../../db/schemas.js';
|
||||
import { z, ZodError } from 'zod';
|
||||
import { IdParser, IdType, ParsedId } from '../../utils/id-parser';
|
||||
import { IdParser, IdType, ParsedId } from '../../utils/id-parser.js';
|
||||
import {
|
||||
AnimeDatabase,
|
||||
constants,
|
||||
@@ -8,8 +8,8 @@ import {
|
||||
formatZodError,
|
||||
getTimeTakenSincePoint,
|
||||
SERVICE_DETAILS,
|
||||
} from '../../utils';
|
||||
import { TorrentClient } from '../../utils/torrent';
|
||||
} from '../../utils/index.js';
|
||||
import { TorrentClient } from '../../utils/torrent.js';
|
||||
import {
|
||||
BuiltinDebridServices,
|
||||
PlaybackInfo,
|
||||
@@ -20,11 +20,11 @@ import {
|
||||
UnprocessedTorrent,
|
||||
ServiceAuth,
|
||||
DebridError,
|
||||
} from '../../debrid';
|
||||
import { processTorrents, processNZBs } from '../utils/debrid';
|
||||
import { calculateAbsoluteEpisode } from '../utils/general';
|
||||
import { TitleMetadata } from '../torbox-search/source-handlers';
|
||||
import { MetadataService } from '../../metadata/service';
|
||||
} from '../../debrid/index.js';
|
||||
import { processTorrents, processNZBs } from '../utils/debrid.js';
|
||||
import { calculateAbsoluteEpisode } from '../utils/general.js';
|
||||
import { TitleMetadata } from '../torbox-search/source-handlers.js';
|
||||
import { MetadataService } from '../../metadata/service.js';
|
||||
import { Logger } from 'winston';
|
||||
|
||||
export interface SearchMetadata extends TitleMetadata {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { z } from 'zod';
|
||||
import { ParsedId } from '../../../utils/id-parser';
|
||||
import { getTimeTakenSincePoint } from '../../../utils';
|
||||
import { ParsedId } from '../../../utils/id-parser.js';
|
||||
import { getTimeTakenSincePoint } from '../../../utils/index.js';
|
||||
import { Logger } from 'winston';
|
||||
import {
|
||||
BaseDebridAddon,
|
||||
BaseDebridConfigSchema,
|
||||
SearchMetadata,
|
||||
} from '../debrid';
|
||||
import { BaseNabApi, Capabilities, SearchResultItem } from './api';
|
||||
} from '../debrid.js';
|
||||
import { BaseNabApi, Capabilities, SearchResultItem } from './api.js';
|
||||
|
||||
export const NabAddonConfigSchema = BaseDebridConfigSchema.extend({
|
||||
url: z.string(),
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
formatZodError,
|
||||
getTimeTakenSincePoint,
|
||||
createLogger,
|
||||
} from '../../../utils';
|
||||
} from '../../../utils/index.js';
|
||||
import { Parser } from 'xml2js';
|
||||
import { Logger } from 'winston';
|
||||
|
||||
|
||||
@@ -1,18 +1,29 @@
|
||||
import { Manifest, Meta, MetaPreview, Stream, Subtitle } from '../../db';
|
||||
import { AnimeDatabase, Env, ExtrasParser, createLogger } from '../../utils';
|
||||
import {
|
||||
Manifest,
|
||||
Meta,
|
||||
MetaPreview,
|
||||
Stream,
|
||||
Subtitle,
|
||||
} from '../../db/index.js';
|
||||
import {
|
||||
AnimeDatabase,
|
||||
Env,
|
||||
ExtrasParser,
|
||||
createLogger,
|
||||
} from '../../utils/index.js';
|
||||
import {
|
||||
GDriveAPI,
|
||||
GoogleOAuth,
|
||||
GoogleOAuthError,
|
||||
GoogleOAuthErrorCode,
|
||||
} from './api';
|
||||
import { GDriveFile, UserData } from './schemas';
|
||||
import { IMDBMetadata } from '../../metadata/imdb';
|
||||
import { TMDBMetadata } from '../../metadata/tmdb';
|
||||
import { formatBytes, formatDuration } from '../../formatters';
|
||||
import { IdParser, ParsedId } from '../../utils/id-parser';
|
||||
import { IdType } from '../../utils/id-parser';
|
||||
import { getTraktAliases } from '../../metadata/trakt';
|
||||
} from './api.js';
|
||||
import { GDriveFile, UserData } from './schemas.js';
|
||||
import { IMDBMetadata } from '../../metadata/imdb.js';
|
||||
import { TMDBMetadata } from '../../metadata/tmdb.js';
|
||||
import { formatBytes, formatDuration } from '../../formatters/index.js';
|
||||
import { IdParser, ParsedId } from '../../utils/id-parser.js';
|
||||
import { IdType } from '../../utils/id-parser.js';
|
||||
import { getTraktAliases } from '../../metadata/trakt.js';
|
||||
|
||||
const logger = createLogger('gdrive');
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Cache, createLogger, Env, makeRequest } from '../../utils';
|
||||
import { Cache, createLogger, Env, makeRequest } from '../../utils/index.js';
|
||||
import {
|
||||
GDriveFile,
|
||||
GDriveFileGetResponseSchema,
|
||||
GDriveFileQueryResponseSchema,
|
||||
RefreshTokenResponse,
|
||||
RefreshTokenResponseSchema,
|
||||
} from './schemas';
|
||||
} from './schemas.js';
|
||||
|
||||
const accessTokenCache = Cache.getInstance<string, string>(
|
||||
'gdrive-access-token'
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
export * from './addon';
|
||||
export * from './api';
|
||||
export * from './addon.js';
|
||||
export * from './api.js';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export * from './gdrive';
|
||||
export * from './torbox-search';
|
||||
export * from './torznab';
|
||||
export * from './newznab';
|
||||
export * from './prowlarr';
|
||||
export * from './gdrive/index.js';
|
||||
export * from './torbox-search/index.js';
|
||||
export * from './torznab/index.js';
|
||||
export * from './newznab/index.js';
|
||||
export * from './prowlarr/index.js';
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { z } from 'zod';
|
||||
import { ParsedId } from '../../utils/id-parser';
|
||||
import { constants, createLogger } from '../../utils';
|
||||
import { Torrent, NZB } from '../../debrid';
|
||||
import { SearchMetadata } from '../base/debrid';
|
||||
import { ParsedId } from '../../utils/id-parser.js';
|
||||
import { constants, createLogger } from '../../utils/index.js';
|
||||
import { Torrent, NZB } from '../../debrid/index.js';
|
||||
import { SearchMetadata } from '../base/debrid.js';
|
||||
import { createHash } from 'crypto';
|
||||
import { BaseNabApi, SearchResultItem } from '../base/nab/api';
|
||||
import { BaseNabApi, SearchResultItem } from '../base/nab/api.js';
|
||||
import {
|
||||
BaseNabAddon,
|
||||
NabAddonConfigSchema,
|
||||
NabAddonConfig,
|
||||
} from '../base/nab/addon';
|
||||
} from '../base/nab/addon.js';
|
||||
|
||||
const logger = createLogger('newznab');
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
export * from './addon';
|
||||
export * from './addon.js';
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
import { BaseDebridAddon, BaseDebridConfigSchema } from '../base/debrid';
|
||||
import { BaseDebridAddon, BaseDebridConfigSchema } from '../base/debrid.js';
|
||||
import { z } from 'zod';
|
||||
import { createLogger, Env, getTimeTakenSincePoint } from '../../utils';
|
||||
import {
|
||||
createLogger,
|
||||
Env,
|
||||
getTimeTakenSincePoint,
|
||||
} from '../../utils/index.js';
|
||||
import ProwlarrApi, {
|
||||
ProwlarrApiIndexer,
|
||||
ProwlarrApiSearchItem,
|
||||
ProwlarrApiError,
|
||||
} from './api';
|
||||
import { ParsedId } from '../../utils/id-parser';
|
||||
import { SearchMetadata } from '../base/debrid';
|
||||
import { Torrent, NZB, UnprocessedTorrent } from '../../debrid';
|
||||
} from './api.js';
|
||||
import { ParsedId } from '../../utils/id-parser.js';
|
||||
import { SearchMetadata } from '../base/debrid.js';
|
||||
import { Torrent, NZB, UnprocessedTorrent } from '../../debrid/index.js';
|
||||
import {
|
||||
extractInfoHashFromMagnet,
|
||||
extractTrackersFromMagnet,
|
||||
} from '../utils/debrid';
|
||||
} from '../utils/debrid.js';
|
||||
|
||||
export const ProwlarrAddonConfigSchema = BaseDebridConfigSchema.extend({
|
||||
url: z.string(),
|
||||
|
||||
@@ -5,7 +5,7 @@ import {
|
||||
Env,
|
||||
formatZodError,
|
||||
makeRequest,
|
||||
} from '../../utils';
|
||||
} from '../../utils/index.js';
|
||||
import z from 'zod';
|
||||
|
||||
interface ResponseMeta {
|
||||
|
||||
@@ -1 +1 @@
|
||||
export * from './addon';
|
||||
export * from './addon.js';
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import { z } from 'zod';
|
||||
import { Manifest, Stream } from '../../db';
|
||||
import { Manifest, Stream } from '../../db/index.js';
|
||||
import {
|
||||
AnimeDatabase,
|
||||
createLogger,
|
||||
formatZodError,
|
||||
getTimeTakenSincePoint,
|
||||
} from '../../utils';
|
||||
import { TorBoxSearchAddonUserDataSchema } from './schemas';
|
||||
} from '../../utils/index.js';
|
||||
import { TorBoxSearchAddonUserDataSchema } from './schemas.js';
|
||||
import { TorboxApi } from '@torbox/torbox-api';
|
||||
import TorboxSearchApi from './search-api';
|
||||
import { IdParser } from '../../utils/id-parser';
|
||||
import { TorrentSourceHandler, UsenetSourceHandler } from './source-handlers';
|
||||
import { TorBoxSearchAddonError } from './errors';
|
||||
import { supportedIdTypes } from './search-api';
|
||||
import TorboxSearchApi from './search-api.js';
|
||||
import { IdParser } from '../../utils/id-parser.js';
|
||||
import {
|
||||
TorrentSourceHandler,
|
||||
UsenetSourceHandler,
|
||||
} from './source-handlers.js';
|
||||
import { TorBoxSearchAddonError } from './errors.js';
|
||||
import { supportedIdTypes } from './search-api.js';
|
||||
|
||||
const logger = createLogger('torbox-search');
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
export * from './addon';
|
||||
export * from './errors';
|
||||
export * from './addon.js';
|
||||
export * from './errors.js';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { z } from 'zod';
|
||||
import { BuiltinDebridServices } from '../../debrid/utils';
|
||||
import { BuiltinDebridServices } from '../../debrid/utils.js';
|
||||
|
||||
const TorBoxApiErrorResponseSchema = z.object({
|
||||
success: z.literal(false),
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import { fetch, RequestInit, Response } from 'undici';
|
||||
import { z } from 'zod';
|
||||
import { TorBoxApiResponseSchema, TorBoxSearchApiDataSchema } from './schemas';
|
||||
import {
|
||||
TorBoxApiResponseSchema,
|
||||
TorBoxSearchApiDataSchema,
|
||||
} from './schemas.js';
|
||||
import {
|
||||
createLogger,
|
||||
DistributedLock,
|
||||
Env,
|
||||
formatZodError,
|
||||
maskSensitiveInfo,
|
||||
} from '../../utils';
|
||||
import { IdType } from '../../utils/id-parser';
|
||||
} from '../../utils/index.js';
|
||||
import { IdType } from '../../utils/id-parser.js';
|
||||
|
||||
type TorboxSuccessResponse<T> = {
|
||||
success: true;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { number, z } from 'zod';
|
||||
import { Stream } from '../../db';
|
||||
import { Stream } from '../../db/index.js';
|
||||
import {
|
||||
AnimeDatabase,
|
||||
Cache,
|
||||
@@ -7,25 +7,25 @@ import {
|
||||
SERVICE_DETAILS,
|
||||
createLogger,
|
||||
getTimeTakenSincePoint,
|
||||
} from '../../utils';
|
||||
} from '../../utils/index.js';
|
||||
// import { DebridService, DebridFile } from './debrid-service';
|
||||
import { ParsedId } from '../../utils/id-parser';
|
||||
import { TorBoxSearchAddonUserDataSchema } from './schemas';
|
||||
import { ParsedId } from '../../utils/id-parser.js';
|
||||
import { TorBoxSearchAddonUserDataSchema } from './schemas.js';
|
||||
import TorboxSearchApi, {
|
||||
TorboxSearchApiError,
|
||||
TorboxSearchApiIdType,
|
||||
} from './search-api';
|
||||
import { Torrent, convertDataToTorrents } from './torrent';
|
||||
import { TMDBMetadata } from '../../metadata/tmdb';
|
||||
import { calculateAbsoluteEpisode } from '../utils/general';
|
||||
} from './search-api.js';
|
||||
import { Torrent, convertDataToTorrents } from './torrent.js';
|
||||
import { TMDBMetadata } from '../../metadata/tmdb.js';
|
||||
import { calculateAbsoluteEpisode } from '../utils/general.js';
|
||||
import { TorboxApi } from '@torbox/torbox-api';
|
||||
import { processNZBs, processTorrents } from '../utils/debrid';
|
||||
import { processNZBs, processTorrents } from '../utils/debrid.js';
|
||||
import {
|
||||
NZBWithSelectedFile,
|
||||
TorrentWithSelectedFile,
|
||||
} from '../../debrid/utils';
|
||||
import { DebridFile, PlaybackInfo } from '../../debrid';
|
||||
import { getTraktAliases } from '../../metadata/trakt';
|
||||
} from '../../debrid/utils.js';
|
||||
import { DebridFile, PlaybackInfo } from '../../debrid/index.js';
|
||||
import { getTraktAliases } from '../../metadata/trakt.js';
|
||||
|
||||
const logger = createLogger('torbox-search');
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { z } from 'zod';
|
||||
import { TorBoxSearchApiDataSchema } from './schemas';
|
||||
import { TorBoxSearchApiDataSchema } from './schemas.js';
|
||||
import {
|
||||
extractInfoHashFromMagnet,
|
||||
extractTrackersFromMagnet,
|
||||
} from '../utils/debrid';
|
||||
} from '../utils/debrid.js';
|
||||
|
||||
export interface Torrent {
|
||||
hash: string;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { z } from 'zod';
|
||||
import { ParsedId } from '../../utils/id-parser';
|
||||
import { createLogger } from '../../utils';
|
||||
import { Torrent, NZB, UnprocessedTorrent } from '../../debrid';
|
||||
import { ParsedId } from '../../utils/id-parser.js';
|
||||
import { createLogger } from '../../utils/index.js';
|
||||
import { Torrent, NZB, UnprocessedTorrent } from '../../debrid/index.js';
|
||||
import { SearchMetadata } from '../base/debrid';
|
||||
import { extractTrackersFromMagnet } from '../utils/debrid';
|
||||
import { BaseNabApi, Capabilities } from '../base/nab/api';
|
||||
import { extractTrackersFromMagnet } from '../utils/debrid.js';
|
||||
import { BaseNabApi, Capabilities } from '../base/nab/api.js';
|
||||
import {
|
||||
BaseNabAddon,
|
||||
NabAddonConfigSchema,
|
||||
NabAddonConfig,
|
||||
} from '../base/nab/addon';
|
||||
} from '../base/nab/addon.js';
|
||||
|
||||
const logger = createLogger('torznab');
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
export * from './addon';
|
||||
export * from './addon.js';
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
// utility function for debrid-based builtins
|
||||
|
||||
import z from 'zod';
|
||||
import {
|
||||
BuiltinServiceId,
|
||||
constants,
|
||||
createLogger,
|
||||
getTimeTakenSincePoint,
|
||||
} from '../../utils';
|
||||
} from '../../utils/index.js';
|
||||
import {
|
||||
BuiltinDebridServices,
|
||||
DebridDownload,
|
||||
DebridError,
|
||||
DebridFile,
|
||||
getDebridService,
|
||||
selectFileInTorrentOrNZB,
|
||||
@@ -20,8 +14,8 @@ import {
|
||||
NZB,
|
||||
isSeasonWrong,
|
||||
isEpisodeWrong,
|
||||
} from '../../debrid';
|
||||
import { PTT } from '../../parser';
|
||||
} from '../../debrid/index.js';
|
||||
import { PTT } from '../../parser/index.js';
|
||||
import { ParseResult } from 'go-ptt';
|
||||
|
||||
// we have a list of torrents which need to be
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import { TABLES } from './schemas';
|
||||
import { createLogger } from '../utils';
|
||||
import { parseConnectionURI, adaptQuery, ConnectionURI } from './utils';
|
||||
|
||||
const logger = createLogger('database');
|
||||
|
||||
import { Pool, Client, QueryResult } from 'pg';
|
||||
import sqlite3 from 'sqlite3';
|
||||
import { open, Database } from 'sqlite';
|
||||
import { URL } from 'url';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import { TABLES } from './schemas.js';
|
||||
import { createLogger } from '../utils/index.js';
|
||||
import { parseConnectionURI, adaptQuery, ConnectionURI } from './utils.js';
|
||||
|
||||
const logger = createLogger('database');
|
||||
|
||||
type QueryResultRow = Record<string, any>;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export * from './db';
|
||||
export * from './users';
|
||||
export * from './schemas';
|
||||
export * from './queue';
|
||||
export * from './db.js';
|
||||
export * from './users.js';
|
||||
export * from './schemas.js';
|
||||
export * from './queue.js';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { createLogger } from '../utils';
|
||||
import { DB } from './db';
|
||||
import { createLogger } from '../utils/index.js';
|
||||
import { DB } from './db.js';
|
||||
|
||||
const logger = createLogger('db');
|
||||
const db = DB.getInstance();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { z } from 'zod';
|
||||
import * as constants from '../utils/constants';
|
||||
import * as constants from '../utils/constants.js';
|
||||
|
||||
const ServiceIds = z.enum(constants.SERVICES);
|
||||
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
// import { UserDataSchema, UserData, DB } from '../db';
|
||||
import { UserDataSchema, UserData } from './schemas';
|
||||
import { TransactionQueue } from './queue';
|
||||
import { DB } from './db';
|
||||
import { UserData } from './schemas.js';
|
||||
import { TransactionQueue } from './queue.js';
|
||||
import { DB } from './db.js';
|
||||
import {
|
||||
decryptString,
|
||||
deriveKey,
|
||||
encryptString,
|
||||
generateUUID,
|
||||
getTextHash,
|
||||
maskSensitiveInfo,
|
||||
createLogger,
|
||||
constants,
|
||||
Env,
|
||||
verifyHash,
|
||||
validateConfig,
|
||||
formatZodError,
|
||||
applyMigrations,
|
||||
} from '../utils';
|
||||
} from '../utils/index.js';
|
||||
|
||||
const APIError = constants.APIError;
|
||||
const logger = createLogger('users');
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { URL } from 'url';
|
||||
import { createLogger } from '../utils/logger';
|
||||
import { createLogger } from '../utils/logger.js';
|
||||
import path from 'path';
|
||||
|
||||
type BaseConnectionURI = {
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import { z } from 'zod';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { ErrorType, StremThruError } from 'stremthru';
|
||||
// type ErrorCode = "BAD_GATEWAY" | "BAD_REQUEST" | "CONFLICT" | "FORBIDDEN" | "GONE" | "INTERNAL_SERVER_ERROR" | "METHOD_NOT_ALLOWED" | "NOT_FOUND" | "NOT_IMPLEMENTED" | "PAYMENT_REQUIRED" | "PROXY_AUTHENTICATION_REQUIRED" | "SERVICE_UNAVAILABLE" | "STORE_LIMIT_EXCEEDED" | "STORE_MAGNET_INVALID" | "TOO_MANY_REQUESTS" | "UNAUTHORIZED" | "UNAVAILABLE_FOR_LEGAL_REASONS" | "UNKNOWN" | "UNPROCESSABLE_ENTITY" | "UNSUPPORTED_MEDIA_TYPE";
|
||||
|
||||
StremThruError;
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
|
||||
type DebridErrorCode =
|
||||
| 'BAD_GATEWAY'
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
export * from './base';
|
||||
export * from './utils';
|
||||
export * from './stremthru';
|
||||
export * from './torbox';
|
||||
export * from './base.js';
|
||||
export * from './utils.js';
|
||||
export * from './stremthru.js';
|
||||
export * from './torbox.js';
|
||||
|
||||
import { ServiceId } from '../utils';
|
||||
import { DebridService, DebridServiceConfig } from './base';
|
||||
import { StremThruInterface } from './stremthru';
|
||||
import { TorboxDebridService } from './torbox';
|
||||
import { StremThruPreset } from '../presets/stremthru';
|
||||
import { ServiceId } from '../utils/index.js';
|
||||
import { DebridService, DebridServiceConfig } from './base.js';
|
||||
import { StremThruInterface } from './stremthru.js';
|
||||
import { TorboxDebridService } from './torbox.js';
|
||||
import { StremThruPreset } from '../presets/stremthru.js';
|
||||
|
||||
export function getDebridService(
|
||||
serviceName: ServiceId,
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
import { StremThru, StremThruError } from 'stremthru';
|
||||
import { Env, ServiceId, createLogger, getSimpleTextHash } from '../utils';
|
||||
import { selectFileInTorrentOrNZB, Torrent } from './utils';
|
||||
import {
|
||||
Env,
|
||||
ServiceId,
|
||||
createLogger,
|
||||
getSimpleTextHash,
|
||||
Cache,
|
||||
} from '../utils/index.js';
|
||||
import { selectFileInTorrentOrNZB, Torrent } from './utils.js';
|
||||
import {
|
||||
DebridService,
|
||||
DebridServiceConfig,
|
||||
DebridDownload,
|
||||
PlaybackInfo,
|
||||
DebridError,
|
||||
} from './base';
|
||||
import { Cache } from '../utils';
|
||||
import { StremThruServiceId } from '../presets/stremthru';
|
||||
import { PTT } from '../parser';
|
||||
} from './base.js';
|
||||
import { StremThruServiceId } from '../presets/stremthru.js';
|
||||
import { PTT } from '../parser/index.js';
|
||||
import { ParseResult } from 'go-ptt';
|
||||
|
||||
const logger = createLogger('debrid:stremthru');
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
import { TorboxApi } from '@torbox/torbox-api';
|
||||
import { Env, ServiceId, createLogger, getSimpleTextHash } from '../utils';
|
||||
import { PTT } from '../parser';
|
||||
import { selectFileInTorrentOrNZB } from './utils';
|
||||
import { StremThruError } from 'stremthru';
|
||||
import { ParseResult } from 'go-ptt';
|
||||
import {
|
||||
Env,
|
||||
ServiceId,
|
||||
createLogger,
|
||||
getSimpleTextHash,
|
||||
Cache,
|
||||
} from '../utils/index.js';
|
||||
import { PTT } from '../parser/index.js';
|
||||
import { selectFileInTorrentOrNZB } from './utils.js';
|
||||
import {
|
||||
DebridService,
|
||||
DebridServiceConfig,
|
||||
DebridDownload,
|
||||
PlaybackInfo,
|
||||
DebridError,
|
||||
} from './base';
|
||||
import { Cache } from '../utils';
|
||||
import { StremThruInterface } from './stremthru';
|
||||
import { StremThruError } from 'stremthru';
|
||||
import { ParseResult } from 'go-ptt';
|
||||
} from './base.js';
|
||||
import { StremThruInterface } from './stremthru.js';
|
||||
|
||||
const logger = createLogger('debrid:torbox');
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import { z } from 'zod';
|
||||
import { constants, createLogger } from '../utils';
|
||||
|
||||
import { BuiltinServiceId } from '../utils';
|
||||
import { DebridFile, DebridDownload } from './base';
|
||||
import { PTT } from '../parser';
|
||||
import { normaliseTitle, titleMatch } from '../parser/utils';
|
||||
import { constants, createLogger, BuiltinServiceId } from '../utils/index.js';
|
||||
import { DebridFile, DebridDownload } from './base.js';
|
||||
import { normaliseTitle, titleMatch } from '../parser/utils.js';
|
||||
|
||||
const logger = createLogger('debrid');
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import { ParsedStream, UserData } from '../db';
|
||||
// import { constants, Env, createLogger } from '../utils';
|
||||
import * as constants from '../utils/constants';
|
||||
import { createLogger } from '../utils/logger';
|
||||
import { ParsedStream, UserData } from '../db/schemas.js';
|
||||
import * as constants from '../utils/constants.js';
|
||||
import { createLogger } from '../utils/logger.js';
|
||||
import {
|
||||
formatBytes,
|
||||
formatDuration,
|
||||
languageToCode,
|
||||
languageToEmoji,
|
||||
makeSmall,
|
||||
} from './utils';
|
||||
import { Env } from '../utils/env';
|
||||
} from './utils.js';
|
||||
import { Env } from '../utils/env.js';
|
||||
|
||||
const logger = createLogger('formatter');
|
||||
|
||||
@@ -112,10 +111,10 @@ const stringModifiers = {
|
||||
'upper': (value: string) => value.toUpperCase(),
|
||||
'lower': (value: string) => value.toLowerCase(),
|
||||
'title': (value: string) => value
|
||||
.split(' ')
|
||||
.map((word) => word.toLowerCase())
|
||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||
.join(' '),
|
||||
.split(' ')
|
||||
.map((word) => word.toLowerCase())
|
||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||
.join(' '),
|
||||
'length': (value: string) => value.length.toString(),
|
||||
'reverse': (value: string) => value.split('').reverse().join(''),
|
||||
'base64': (value: string) => btoa(value),
|
||||
@@ -414,7 +413,7 @@ export abstract class BaseFormatter {
|
||||
const variable = `(?<variableName>${validVariables.join('|')})\\.(?<propertyName>${validProperties.join('|')})`;
|
||||
|
||||
const singleValidModifier = this.buildModifierRegexPattern();
|
||||
|
||||
|
||||
// Build the conditional check pattern separately
|
||||
// Use [^"]* to capture anything except quotes, making it non-greedy
|
||||
const checkTrue = `"(?<mod_check_true>[^"]*)"`;
|
||||
@@ -425,7 +424,7 @@ export abstract class BaseFormatter {
|
||||
const modTZLocale = `::(?<mod_tzlocale>[A-Za-z]{2,3}(?:-[A-Z]{2})?|[A-Za-z]+?/[A-Za-z_]+?)`;
|
||||
|
||||
const regexPattern = `\\{${variable}(?<modifiers>(${singleValidModifier})+)?(${modTZLocale})?(${checkTF})?\\}`;
|
||||
|
||||
|
||||
return new RegExp(regexPattern, 'gi')
|
||||
}
|
||||
|
||||
@@ -517,7 +516,7 @@ export abstract class BaseFormatter {
|
||||
): string | undefined {
|
||||
const singleModTerminator = '((::)|($))'; // :: if there's multiple modifiers or $ for the end of the string
|
||||
const singleValidModRe = new RegExp(this.buildModifierRegexPattern() + singleModTerminator, 'gi');
|
||||
|
||||
|
||||
let result = input as any;
|
||||
// iterate over modifiers in order of appearance
|
||||
for (const modMatch of [...groups.modifiers.matchAll(singleValidModRe)].sort((a, b) => (a.index ?? 0) - (b.index ?? 0))) {
|
||||
@@ -537,7 +536,7 @@ export abstract class BaseFormatter {
|
||||
let check_false = groups.mod_check_false ?? "";
|
||||
if (typeof check_true !== 'string' || typeof check_false !== 'string')
|
||||
return `{unknown_conditional_modifier_check_true_or_false}`;
|
||||
|
||||
|
||||
if (parseValue) {
|
||||
check_true = this.parseString(check_true, parseValue) || check_true;
|
||||
check_false = this.parseString(check_false, parseValue) || check_false;
|
||||
@@ -568,29 +567,29 @@ export abstract class BaseFormatter {
|
||||
if (!conditionalModifiers.exact.exists(input)) {
|
||||
conditional = false;
|
||||
}
|
||||
|
||||
|
||||
// EXACT
|
||||
else if (isExact) {
|
||||
const modAsKey = mod as keyof typeof conditionalModifiers.exact;
|
||||
conditional = conditionalModifiers.exact[modAsKey](input);
|
||||
}
|
||||
|
||||
|
||||
// PREFIX
|
||||
else if (isPrefix) {
|
||||
// get the longest prefix match
|
||||
const modPrefix = Object.keys(conditionalModifiers.prefix).sort((a, b) => b.length - a.length).find(key => mod.startsWith(key))!!;
|
||||
|
||||
|
||||
// Pre-process string value and check to allow for intuitive comparisons
|
||||
const stringValue = input.toString().toLowerCase();
|
||||
let stringCheck = mod.substring(modPrefix.length).toLowerCase();
|
||||
// remove whitespace from stringCheck if it isn't in stringValue
|
||||
stringCheck = !/\s/.test(stringValue) ? stringCheck.replace(/\s/g, '') : stringCheck;
|
||||
|
||||
|
||||
// parse value/check as if they're numbers (123,456 -> 123456)
|
||||
const [parsedNumericValue, parsedNumericCheck] = [Number(stringValue.replace(/,\s/g, '')), Number(stringCheck.replace(/,\s/g, ''))];
|
||||
const isNumericComparison = ["<", "<=", ">", ">=", "="].includes(modPrefix) &&
|
||||
!isNaN(parsedNumericValue) && !isNaN(parsedNumericCheck);
|
||||
|
||||
|
||||
conditional = conditionalModifiers.prefix[modPrefix as keyof typeof conditionalModifiers.prefix](
|
||||
isNumericComparison ? parsedNumericValue as any : stringValue,
|
||||
isNumericComparison ? parsedNumericCheck as any : stringCheck,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { UserData } from '../db';
|
||||
import { BaseFormatter, FormatterConfig } from './base';
|
||||
import { UserData } from '../db/schemas.js';
|
||||
import { BaseFormatter, FormatterConfig } from './base.js';
|
||||
|
||||
export class CustomFormatter extends BaseFormatter {
|
||||
constructor(
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
export * from './base';
|
||||
export * from './predefined';
|
||||
export * from './custom';
|
||||
export * from './utils';
|
||||
export * from './base.js';
|
||||
export * from './predefined.js';
|
||||
export * from './custom.js';
|
||||
export * from './utils.js';
|
||||
|
||||
import { BaseFormatter, FormatterConfig } from './base';
|
||||
import { BaseFormatter, FormatterConfig } from './base.js';
|
||||
import {
|
||||
TorrentioFormatter,
|
||||
TorboxFormatter,
|
||||
GDriveFormatter,
|
||||
LightGDriveFormatter,
|
||||
MinimalisticGdriveFormatter,
|
||||
} from './predefined';
|
||||
import { CustomFormatter } from './custom';
|
||||
import { UserData } from '../db';
|
||||
} from './predefined.js';
|
||||
import { CustomFormatter } from './custom.js';
|
||||
import { UserData } from '../db/schemas.js';
|
||||
|
||||
export function createFormatter(userData: UserData): BaseFormatter {
|
||||
switch (userData.formatter.id) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { UserData } from '../db';
|
||||
import { BaseFormatter } from './base';
|
||||
import { UserData } from '../db/schemas.js';
|
||||
import { BaseFormatter } from './base.js';
|
||||
|
||||
export class TorrentioFormatter extends BaseFormatter {
|
||||
constructor(userData: UserData) {
|
||||
@@ -95,4 +95,4 @@ export class MinimalisticGdriveFormatter extends BaseFormatter {
|
||||
userData
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { FULL_LANGUAGE_MAPPING } from '../utils';
|
||||
import { FULL_LANGUAGE_MAPPING } from '../utils/languages.js';
|
||||
|
||||
export function formatBytes(bytes: number, k: 1024 | 1000): string {
|
||||
if (bytes === 0) return '0 B';
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
export * from './utils';
|
||||
export * from './db';
|
||||
export * from './main';
|
||||
export * from './parser';
|
||||
export * from './formatters';
|
||||
export * from './transformers';
|
||||
export * from './debrid';
|
||||
export * from './utils/index.js';
|
||||
export * from './db/index.js';
|
||||
export * from './main.js';
|
||||
export * from './parser/index.js';
|
||||
export * from './formatters/index.js';
|
||||
export * from './transformers/index.js';
|
||||
export * from './debrid/index.js';
|
||||
export {
|
||||
TorBoxSearchAddon,
|
||||
GDriveAddon,
|
||||
@@ -14,5 +14,5 @@ export {
|
||||
TorznabAddon,
|
||||
NewznabAddon,
|
||||
ProwlarrAddon,
|
||||
} from './builtins';
|
||||
export { PresetManager } from './presets';
|
||||
} from './builtins/index.js';
|
||||
export { PresetManager } from './presets/index.js';
|
||||
|
||||
+14
-14
@@ -4,7 +4,7 @@ import {
|
||||
Resource,
|
||||
StrictManifestResource,
|
||||
UserData,
|
||||
} from './db';
|
||||
} from './db/index.js';
|
||||
import {
|
||||
constants,
|
||||
createLogger,
|
||||
@@ -16,9 +16,9 @@ import {
|
||||
ExtrasParser,
|
||||
makeUrlLogSafe,
|
||||
AnimeDatabase,
|
||||
} from './utils';
|
||||
import { Wrapper } from './wrapper';
|
||||
import { PresetManager } from './presets';
|
||||
} from './utils/index.js';
|
||||
import { Wrapper } from './wrapper.js';
|
||||
import { PresetManager } from './presets/index.js';
|
||||
import {
|
||||
AddonCatalog,
|
||||
Meta,
|
||||
@@ -27,12 +27,12 @@ import {
|
||||
ParsedStream,
|
||||
Preset,
|
||||
Subtitle,
|
||||
} from './db/schemas';
|
||||
import { createProxy } from './proxy';
|
||||
import { RPDB } from './utils/rpdb';
|
||||
import { FeatureControl } from './utils/feature';
|
||||
import Proxifier from './streams/proxifier';
|
||||
import StreamLimiter from './streams/limiter';
|
||||
} from './db/schemas.js';
|
||||
import { createProxy } from './proxy/index.js';
|
||||
import { RPDB } from './utils/rpdb.js';
|
||||
import { FeatureControl } from './utils/feature.js';
|
||||
import Proxifier from './streams/proxifier.js';
|
||||
import StreamLimiter from './streams/limiter.js';
|
||||
import {
|
||||
StreamFetcher as Fetcher,
|
||||
StreamFilterer as Filterer,
|
||||
@@ -40,10 +40,10 @@ import {
|
||||
StreamDeduplicator as Deduplicator,
|
||||
StreamPrecomputer as Precomputer,
|
||||
StreamUtils,
|
||||
} from './streams';
|
||||
import { getAddonName } from './utils/general';
|
||||
import { TMDBMetadata } from './metadata/tmdb';
|
||||
import { Metadata } from './metadata/utils';
|
||||
} from './streams/index.js';
|
||||
import { getAddonName } from './utils/general.js';
|
||||
import { TMDBMetadata } from './metadata/tmdb.js';
|
||||
import { Metadata } from './metadata/utils.js';
|
||||
const logger = createLogger('core');
|
||||
|
||||
const shuffleCache = Cache.getInstance<string, MetaPreview[]>('shuffle');
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { z } from 'zod';
|
||||
import { Cache, makeRequest, Env, TYPES } from '../utils';
|
||||
import { Wrapper } from '../wrapper';
|
||||
import { Metadata } from './utils';
|
||||
import { Meta, MetaSchema } from '../db';
|
||||
import { Cache, makeRequest, Env, TYPES } from '../utils/index.js';
|
||||
import { Metadata } from './utils.js';
|
||||
import { Meta, MetaSchema } from '../db/schemas.js';
|
||||
|
||||
const IMDBSuggestionSchema = z.object({
|
||||
d: z.array(
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { DistributedLock } from '../utils/distributed-lock';
|
||||
import { Metadata } from './utils';
|
||||
import { TMDBMetadata } from './tmdb';
|
||||
import { getTraktAliases } from './trakt';
|
||||
import { IMDBMetadata } from './imdb';
|
||||
import { createLogger, getTimeTakenSincePoint } from '../utils/logger';
|
||||
import { TYPES } from '../utils/constants';
|
||||
import { AnimeDatabase, ParsedId } from '../utils';
|
||||
import { Meta } from '../db/schemas';
|
||||
import { DistributedLock } from '../utils/distributed-lock.js';
|
||||
import { Metadata } from './utils.js';
|
||||
import { TMDBMetadata } from './tmdb.js';
|
||||
import { getTraktAliases } from './trakt.js';
|
||||
import { IMDBMetadata } from './imdb.js';
|
||||
import { createLogger, getTimeTakenSincePoint } from '../utils/logger.js';
|
||||
import { TYPES } from '../utils/constants.js';
|
||||
import { AnimeDatabase, ParsedId } from '../utils/index.js';
|
||||
import { Meta } from '../db/schemas.js';
|
||||
|
||||
const logger = createLogger('metadata-service');
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Headers } from 'undici';
|
||||
import { Env, Cache, TYPES, makeRequest } from '../utils';
|
||||
import { Metadata } from './utils';
|
||||
import { Env, Cache, TYPES, makeRequest } from '../utils/index.js';
|
||||
import { Metadata } from './utils.js';
|
||||
import { z } from 'zod';
|
||||
|
||||
export type ExternalIdType = 'imdb' | 'tmdb' | 'tvdb';
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
ParsedId,
|
||||
formatZodError,
|
||||
Env,
|
||||
} from '../utils';
|
||||
} from '../utils/index.js';
|
||||
|
||||
const traktAliasCache = Cache.getInstance<string, string[]>('trakt-aliases');
|
||||
const TRAKT_ALIAS_CACHE_TTL = 7 * 24 * 60 * 60; // 7 days
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { PARSE_REGEX } from './regex';
|
||||
import { ParsedFile } from '../db/schemas';
|
||||
import ptt from './ptt';
|
||||
import { PARSE_REGEX } from './regex.js';
|
||||
import { ParsedFile } from '../db/schemas.js';
|
||||
import ptt from './ptt.js';
|
||||
|
||||
function matchPattern(
|
||||
filename: string,
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
Env,
|
||||
getSimpleTextHash,
|
||||
getTimeTakenSincePoint,
|
||||
} from '../utils';
|
||||
} from '../utils/index.js';
|
||||
|
||||
const logger = createLogger('parser');
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export { default as FileParser } from './file';
|
||||
export { default as StreamParser } from './streams';
|
||||
export { default as PTT } from './go-ptt';
|
||||
export { default as FileParser } from './file.js';
|
||||
export { default as StreamParser } from './streams.js';
|
||||
export { default as PTT } from './go-ptt.js';
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { AUDIO_TAGS, QUALITIES, RESOLUTIONS } from '../utils/constants';
|
||||
import { VISUAL_TAGS } from '../utils/constants';
|
||||
import { ENCODES } from '../utils/constants';
|
||||
import { LANGUAGES } from '../utils/constants';
|
||||
import { AUDIO_CHANNELS } from '../utils/constants';
|
||||
import { FakeVisualTag } from '../utils/constants';
|
||||
// import { AUDIO_TAGS, QUALITIES, RESOLUTIONS } from '../utils/constants';
|
||||
// import { VISUAL_TAGS } from '../utils/constants';
|
||||
// import { ENCODES } from '../utils/constants';
|
||||
// import { LANGUAGES } from '../utils/constants';
|
||||
// import { AUDIO_CHANNELS } from '../utils/constants';
|
||||
// import { FakeVisualTag } from '../utils/constants';
|
||||
import { constants } from '../utils/index.js';
|
||||
const createRegex = (pattern: string): RegExp =>
|
||||
new RegExp(`(?<![^\\s\\[(_\\-.,])(${pattern})(?=[\\s\\)\\]_.\\-,]|$)`, 'i');
|
||||
|
||||
@@ -11,19 +12,31 @@ const createLanguageRegex = (pattern: string): RegExp =>
|
||||
createRegex(`${pattern}(?![ .\\-_]?sub(title)?s?)`);
|
||||
|
||||
type PARSE_REGEX = {
|
||||
resolutions: Omit<Record<(typeof RESOLUTIONS)[number], RegExp>, 'Unknown'>;
|
||||
qualities: Omit<Record<(typeof QUALITIES)[number], RegExp>, 'Unknown'>;
|
||||
visualTags: Omit<
|
||||
Record<(typeof VISUAL_TAGS)[number], RegExp>,
|
||||
'Unknown' | FakeVisualTag
|
||||
>;
|
||||
audioTags: Omit<Record<(typeof AUDIO_TAGS)[number], RegExp>, 'Unknown'>;
|
||||
audioChannels: Omit<
|
||||
Record<(typeof AUDIO_CHANNELS)[number], RegExp>,
|
||||
resolutions: Omit<
|
||||
Record<(typeof constants.RESOLUTIONS)[number], RegExp>,
|
||||
'Unknown'
|
||||
>;
|
||||
languages: Omit<Record<(typeof LANGUAGES)[number], RegExp>, 'Unknown'>;
|
||||
encodes: Omit<Record<(typeof ENCODES)[number], RegExp>, 'Unknown'>;
|
||||
qualities: Omit<
|
||||
Record<(typeof constants.QUALITIES)[number], RegExp>,
|
||||
'Unknown'
|
||||
>;
|
||||
visualTags: Omit<
|
||||
Record<(typeof constants.VISUAL_TAGS)[number], RegExp>,
|
||||
'Unknown' | constants.FakeVisualTag
|
||||
>;
|
||||
audioTags: Omit<
|
||||
Record<(typeof constants.AUDIO_TAGS)[number], RegExp>,
|
||||
'Unknown'
|
||||
>;
|
||||
audioChannels: Omit<
|
||||
Record<(typeof constants.AUDIO_CHANNELS)[number], RegExp>,
|
||||
'Unknown'
|
||||
>;
|
||||
languages: Omit<
|
||||
Record<(typeof constants.LANGUAGES)[number], RegExp>,
|
||||
'Unknown'
|
||||
>;
|
||||
encodes: Omit<Record<(typeof constants.ENCODES)[number], RegExp>, 'Unknown'>;
|
||||
releaseGroup: RegExp;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import { Parser } from 'expr-eval';
|
||||
import { ParsedStream, ParsedStreams, ParsedStreamSchema } from '../db';
|
||||
import {
|
||||
ParsedStream,
|
||||
ParsedStreams,
|
||||
ParsedStreamSchema,
|
||||
} from '../db/schemas.js';
|
||||
import bytes from 'bytes';
|
||||
|
||||
export abstract class StreamExpressionEngine {
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import { Stream, ParsedStream, Addon, ParsedFile } from '../db';
|
||||
import { constants, createLogger, Env, FULL_LANGUAGE_MAPPING } from '../utils';
|
||||
import FileParser from './file';
|
||||
import { Stream, ParsedStream, Addon, ParsedFile } from '../db/index.js';
|
||||
import {
|
||||
constants,
|
||||
createLogger,
|
||||
Env,
|
||||
FULL_LANGUAGE_MAPPING,
|
||||
} from '../utils/index.js';
|
||||
import FileParser from './file.js';
|
||||
const logger = createLogger('parser');
|
||||
|
||||
class StreamParser {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { extract, FuzzballExtractOptions } from 'fuzzball';
|
||||
import { createLogger } from '../utils';
|
||||
import { createLogger } from '../utils/index.js';
|
||||
|
||||
const logger = createLogger('parser');
|
||||
|
||||
|
||||
@@ -5,10 +5,15 @@ import {
|
||||
ParsedFile,
|
||||
Stream,
|
||||
UserData,
|
||||
} from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env, HTTP_STREAM_TYPE, LIVE_STREAM_TYPE } from '../utils';
|
||||
import { FileParser, StreamParser } from '../parser';
|
||||
} from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import {
|
||||
constants,
|
||||
Env,
|
||||
HTTP_STREAM_TYPE,
|
||||
LIVE_STREAM_TYPE,
|
||||
} from '../utils/index.js';
|
||||
import { FileParser, StreamParser } from '../parser/index.js';
|
||||
|
||||
class AStreamStreamParser extends StreamParser {
|
||||
protected override getParsedFile(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import {
|
||||
Cache,
|
||||
constants,
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
formatZodError,
|
||||
getSimpleTextHash,
|
||||
makeRequest,
|
||||
} from '../utils';
|
||||
} from '../utils/index.js';
|
||||
import { z } from 'zod';
|
||||
import { FormData } from 'undici';
|
||||
|
||||
@@ -330,3 +330,5 @@ export class AICompanionPreset extends Preset {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Cache, constants, Env, makeRequest } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Cache, constants, Env, makeRequest } from '../utils/index.js';
|
||||
import { z } from 'zod';
|
||||
|
||||
const configCache = Cache.getInstance<string, string>('ai-search-config');
|
||||
@@ -306,3 +306,5 @@ export class AISearchPreset extends Preset {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ import {
|
||||
ParsedStream,
|
||||
Stream,
|
||||
AIOStream,
|
||||
} from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env, formatZodError, RESOURCES } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { createLogger } from '../utils';
|
||||
} from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env, formatZodError, RESOURCES } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { createLogger } from '../utils/index.js';
|
||||
|
||||
const logger = createLogger('parser');
|
||||
|
||||
@@ -172,3 +172,5 @@ export class AIOStreamsPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils/index.js';
|
||||
|
||||
export class AIOSubtitlePreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -436,3 +436,5 @@ export class AIOSubtitlePreset extends Preset {
|
||||
return `${host}/stremio/${configString}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class AnimeCatalogsPreset extends Preset {
|
||||
private static malCatalogs = [
|
||||
@@ -319,3 +319,4 @@ export class AnimeCatalogsPreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class AnimeKitsuPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -76,3 +76,5 @@ export class AnimeKitsuPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Option, UserData } from '../db';
|
||||
import { Env, constants } from '../utils';
|
||||
import { baseOptions } from './preset';
|
||||
import { StremThruPreset } from './stremthru';
|
||||
import { TorznabPreset } from './torznab';
|
||||
import { Option, UserData } from '../db/index.js';
|
||||
import { Env, constants } from '../utils/index.js';
|
||||
import { baseOptions } from './preset.js';
|
||||
import { StremThruPreset } from './stremthru.js';
|
||||
import { TorznabPreset } from './torznab.js';
|
||||
|
||||
export class AnimeToshoPreset extends TorznabPreset {
|
||||
static override get METADATA() {
|
||||
@@ -68,3 +68,5 @@ export class AnimeToshoPreset extends TorznabPreset {
|
||||
return `${Env.INTERNAL_URL}/builtins/torznab/${configString}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ import {
|
||||
ParsedStream,
|
||||
Stream,
|
||||
UserData,
|
||||
} from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env, LIVE_STREAM_TYPE } from '../utils';
|
||||
import { FileParser, StreamParser } from '../parser';
|
||||
} from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env, LIVE_STREAM_TYPE } from '../utils/index.js';
|
||||
import { FileParser, StreamParser } from '../parser/index.js';
|
||||
|
||||
class ArgentinaTvStreamParser extends StreamParser {
|
||||
protected override getParsedFile(
|
||||
@@ -121,3 +121,5 @@ export class ArgentinaTVPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ParsedStream, Stream, UserData } from '../db';
|
||||
import { StreamParser } from '../parser';
|
||||
import { ServiceId } from '../utils/constants';
|
||||
import { Preset } from './preset';
|
||||
import { stremthruSpecialCases } from './stremthru';
|
||||
import { ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { ServiceId } from '../utils/constants.js';
|
||||
import { Preset } from './preset.js';
|
||||
import { stremthruSpecialCases } from './stremthru.js';
|
||||
|
||||
export class BuiltinStreamParser extends StreamParser {
|
||||
override getFolder(stream: Stream): string | undefined {
|
||||
@@ -68,3 +68,5 @@ export class BuiltinAddonPreset extends Preset {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { Addon, Option, UserData, Resource } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { StremThruPreset } from './stremthru';
|
||||
import { Addon, Option, UserData, Resource } from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { StremThruPreset } from './stremthru.js';
|
||||
|
||||
class CometStreamParser extends StreamParser {
|
||||
get errorRegexes(): { pattern: RegExp; message: string }[] | undefined {
|
||||
@@ -224,3 +224,5 @@ export class CometPreset extends StremThruPreset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
class ContentDeepDiveStreamParser extends StreamParser {
|
||||
protected getFilename(
|
||||
@@ -112,3 +112,5 @@ export class ContentDeepDivePreset extends Preset {
|
||||
return `${url}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES } from '../utils/index.js';
|
||||
|
||||
export class CustomPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -143,3 +143,5 @@ export class CustomPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class DcUniversePreset extends Preset {
|
||||
// dc-batman-animations%2C
|
||||
@@ -157,3 +157,5 @@ export class DcUniversePreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Option } from '../db';
|
||||
import { Option } from '../db/index.js';
|
||||
|
||||
export const debridioSocialOption: Option = {
|
||||
id: 'socials',
|
||||
@@ -17,3 +17,5 @@ export const debridioApiKeyOption: Option = {
|
||||
};
|
||||
|
||||
export const debridioLogo = 'https://cdn.lb.debridio.com/site/logo.png';
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { Addon, Option, UserData, Resource, Stream } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, SERVICE_DETAILS } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, UserData, Resource, Stream } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, SERVICE_DETAILS } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import {
|
||||
debridioSocialOption,
|
||||
debridioLogo,
|
||||
debridioApiKeyOption,
|
||||
} from './debridio';
|
||||
} from './debridio.js';
|
||||
|
||||
export class DebridioPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -151,3 +151,5 @@ export class DebridioPreset extends Preset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import {
|
||||
debridioSocialOption,
|
||||
debridioApiKeyOption,
|
||||
debridioLogo,
|
||||
} from './debridio';
|
||||
} from './debridio.js';
|
||||
|
||||
export class DebridioTmdbPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
|
||||
@@ -5,15 +5,15 @@ import {
|
||||
ParsedStream,
|
||||
Stream,
|
||||
UserData,
|
||||
} from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
} from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import {
|
||||
debridioSocialOption,
|
||||
debridioApiKeyOption,
|
||||
debridioLogo,
|
||||
} from './debridio';
|
||||
import { FileParser, StreamParser } from '../parser';
|
||||
} from './debridio.js';
|
||||
import { FileParser, StreamParser } from '../parser/index.js';
|
||||
|
||||
class DebridioTvStreamParser extends StreamParser {
|
||||
protected override getParsedFile(
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import {
|
||||
debridioSocialOption,
|
||||
debridioApiKeyOption,
|
||||
debridioLogo,
|
||||
} from './debridio';
|
||||
} from './debridio.js';
|
||||
|
||||
export class DebridioTvdbPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { FileParser, StreamParser } from '../parser';
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import { FileParser, StreamParser } from '../parser/index.js';
|
||||
import {
|
||||
debridioSocialOption,
|
||||
debridioApiKeyOption,
|
||||
debridioLogo,
|
||||
} from './debridio';
|
||||
} from './debridio.js';
|
||||
|
||||
class DebridioWatchtowerStreamParser extends StreamParser {
|
||||
override parse(stream: Stream): ParsedStream | { skip: true } {
|
||||
|
||||
@@ -5,10 +5,10 @@ import {
|
||||
ParsedStream,
|
||||
Stream,
|
||||
AIOStream,
|
||||
} from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env, RESOURCES } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
} from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env, RESOURCES } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
class DMMCastStreamParser extends StreamParser {
|
||||
protected override getFilename(
|
||||
@@ -153,3 +153,5 @@ export class DMMCastPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// stremio://new-who.onrender.com/manifest.json
|
||||
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
class DoctorWhoUniverseStreamParser extends StreamParser {
|
||||
protected override getMessage(
|
||||
@@ -92,3 +92,5 @@ export class DoctorWhoUniversePreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import {
|
||||
PresetMetadata,
|
||||
Option,
|
||||
@@ -7,8 +7,8 @@ import {
|
||||
UserData,
|
||||
ParsedStream,
|
||||
Stream,
|
||||
} from '../db';
|
||||
import { StreamParser } from '../parser';
|
||||
} from '../db/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
export class EasynewsParser extends StreamParser {
|
||||
protected override getStreamType(
|
||||
@@ -115,3 +115,5 @@ export class EasynewsPreset extends Preset {
|
||||
return `${url}/${this.generateConfig(easynewsCredentials, options)}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { PresetMetadata } from '../db';
|
||||
import { EasynewsPreset } from './easynews';
|
||||
import { constants, Env } from '../utils';
|
||||
import { baseOptions } from './preset';
|
||||
import { PresetMetadata } from '../db/index.js';
|
||||
import { EasynewsPreset } from './easynews.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import { baseOptions } from './preset.js';
|
||||
|
||||
export class EasynewsPlusPreset extends EasynewsPreset {
|
||||
static override get METADATA(): PresetMetadata {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ParsedStream, PresetMetadata, Stream } from '../db';
|
||||
import { EasynewsPreset, EasynewsParser } from './easynews';
|
||||
import { constants, Env } from '../utils';
|
||||
import { baseOptions } from './preset';
|
||||
import { StreamParser } from '../parser';
|
||||
import { ParsedStream, PresetMetadata, Stream } from '../db/index.js';
|
||||
import { EasynewsPreset, EasynewsParser } from './easynews.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import { baseOptions } from './preset.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
class EasynewsPlusPlusParser extends EasynewsParser {
|
||||
protected override get ageRegex(): RegExp {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// stremio://new-who.onrender.com/manifest.json
|
||||
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { constants, Env, ServiceId } from '../utils';
|
||||
import { StremThruPreset } from './stremthru';
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env, ServiceId } from '../utils/index.js';
|
||||
import { StremThruPreset } from './stremthru.js';
|
||||
|
||||
export class FKStreamPreset extends StremThruPreset {
|
||||
static override get METADATA() {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
import {
|
||||
PresetMetadata,
|
||||
Option,
|
||||
@@ -7,10 +7,10 @@ import {
|
||||
UserData,
|
||||
ParsedStream,
|
||||
Stream,
|
||||
} from '../db';
|
||||
import { StreamParser } from '../parser';
|
||||
import { GDriveAPI } from '../builtins/gdrive';
|
||||
import { GoogleOAuth } from '../builtins/gdrive/api';
|
||||
} from '../db/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { GDriveAPI } from '../builtins/gdrive/index.js';
|
||||
import { GoogleOAuth } from '../builtins/gdrive/api.js';
|
||||
|
||||
export class GDriveParser extends StreamParser {
|
||||
protected override raiseErrorIfNecessary(
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
export * from './preset';
|
||||
export * from './presetManager';
|
||||
export * from './preset.js';
|
||||
export * from './presetManager.js';
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { Addon, Option, UserData, Resource } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { StremThruPreset } from './stremthru';
|
||||
import { Addon, Option, UserData, Resource } from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { StremThruPreset } from './stremthru.js';
|
||||
|
||||
class JackettioStreamParser extends StreamParser {
|
||||
override applyUrlModifications(url: string | undefined): string | undefined {
|
||||
@@ -195,3 +195,5 @@ export class JackettioPreset extends StremThruPreset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class MarvelPreset extends Preset {
|
||||
private static catalogs = [
|
||||
@@ -133,3 +133,5 @@ export class MarvelPreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { createLogger, Env, getSimpleTextHash } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import {
|
||||
Addon,
|
||||
Option,
|
||||
UserData,
|
||||
Resource,
|
||||
Stream,
|
||||
ParsedStream,
|
||||
} from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { createLogger, Env, getSimpleTextHash } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
const logger = createLogger('core');
|
||||
|
||||
@@ -517,3 +524,5 @@ export class MediaFusionPreset extends Preset {
|
||||
return encodedUserData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Addon, Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import {
|
||||
Cache,
|
||||
constants,
|
||||
Env,
|
||||
getSimpleTextHash,
|
||||
makeRequest,
|
||||
} from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
} from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
const moreLikeThisManifests = Cache.getInstance<string, string>(
|
||||
'moreLikeThisManifests'
|
||||
@@ -504,3 +504,5 @@ export class MoreLikeThisPreset extends Preset {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Addon, Option, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES, ServiceId, constants } from '../utils';
|
||||
import { BuiltinAddonPreset } from './builtin';
|
||||
import { Addon, Option, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES, ServiceId, constants } from '../utils/index.js';
|
||||
import { BuiltinAddonPreset } from './builtin.js';
|
||||
|
||||
export class NewznabPreset extends BuiltinAddonPreset {
|
||||
static override get METADATA() {
|
||||
@@ -146,3 +146,5 @@ export class NewznabPreset extends BuiltinAddonPreset {
|
||||
return `${this.METADATA.URL}/${configString}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, SERVICE_DETAILS } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { FileParser, StreamParser } from '../parser';
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, SERVICE_DETAILS } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { FileParser, StreamParser } from '../parser/index.js';
|
||||
|
||||
class NuvioStreamsStreamParser extends StreamParser {
|
||||
parse(stream: Stream): ParsedStream {
|
||||
@@ -273,3 +273,5 @@ export class NuvioStreamsPreset extends Preset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils/index.js';
|
||||
|
||||
export class OpenSubtitlesV3PlusPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -220,3 +220,5 @@ export class OpenSubtitlesV3PlusPreset extends Preset {
|
||||
return `${host}/${config}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES, SUBTITLES_RESOURCE } from '../utils/index.js';
|
||||
|
||||
export class OpenSubtitlesPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -58,3 +58,5 @@ export class OpenSubtitlesPreset extends Preset {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Addon, Option, UserData, Resource, ParsedStream, Stream } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, UserData, Resource, ParsedStream, Stream } from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
class OrionStreamParser extends StreamParser {
|
||||
protected override raiseErrorIfNecessary(
|
||||
@@ -188,3 +188,5 @@ export class OrionPreset extends Preset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Addon, Option, UserData, Resource, Stream } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, SERVICE_DETAILS } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, UserData, Resource, Stream } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, SERVICE_DETAILS } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
export class PeerflixPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -181,3 +181,5 @@ export class PeerflixPreset extends Preset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ import {
|
||||
UserData,
|
||||
PresetMetadata,
|
||||
Addon,
|
||||
} from '../db';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Env, ServiceId, constants } from '../utils';
|
||||
} from '../db/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { Env, ServiceId, constants } from '../utils/index.js';
|
||||
/**
|
||||
*
|
||||
* What modifications are needed for each preset:
|
||||
@@ -274,3 +274,5 @@ export abstract class Preset {
|
||||
return apiKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,64 +1,64 @@
|
||||
import { PresetMetadata, PresetMinimalMetadata } from '../db';
|
||||
import { CometPreset } from './comet';
|
||||
import { CustomPreset } from './custom';
|
||||
import { MediaFusionPreset } from './mediafusion';
|
||||
import { StremthruStorePreset } from './stremthruStore';
|
||||
import { TorrentioPreset } from './torrentio';
|
||||
import { TorboxAddonPreset } from './torbox';
|
||||
import { EasynewsPreset } from './easynews';
|
||||
import { EasynewsPlusPreset } from './easynewsPlus';
|
||||
import { EasynewsPlusPlusPreset } from './easynewsPlusPlus';
|
||||
import { StremthruTorzPreset } from './stremthruTorz';
|
||||
import { DebridioPreset } from './debridioScraper';
|
||||
import { AIOStreamsPreset } from './aiostreams';
|
||||
import { OpenSubtitlesPreset } from './opensubtitles';
|
||||
import { PeerflixPreset } from './peerflix';
|
||||
import { DMMCastPreset } from './dmmCast';
|
||||
import { MarvelPreset } from './marvel';
|
||||
import { JackettioPreset } from './jackettio';
|
||||
import { OrionPreset } from './orion';
|
||||
import { StreamFusionPreset } from './streamfusion';
|
||||
import { AnimeKitsuPreset } from './animeKitsu';
|
||||
import { NuvioStreamsPreset } from './nuviostreams';
|
||||
import { RpdbCatalogsPreset } from './rpdbCatalogs';
|
||||
import { TmdbCollectionsPreset } from './tmdbCollections';
|
||||
import { DebridioWatchtowerPreset } from './debridioWatchtower';
|
||||
import { DebridioTmdbPreset } from './debridioTmdb';
|
||||
import { StarWarsUniversePreset } from './starWarsUniverse';
|
||||
import { DebridioTvdbPreset } from './debridioTvdb';
|
||||
import { DcUniversePreset } from './dcUniverse';
|
||||
import { DebridioTvPreset } from './debridioTv';
|
||||
import { TorrentCatalogsPreset } from './torrentCatalogs';
|
||||
import { StreamingCatalogsPreset } from './streamingCatalogs';
|
||||
import { AnimeCatalogsPreset } from './animeCatalogs';
|
||||
import { DoctorWhoUniversePreset } from './doctorWhoUniverse';
|
||||
import { WebStreamrPreset } from './webstreamr';
|
||||
import { TMDBAddonPreset } from './tmdb';
|
||||
import { TorrentsDbPreset } from './torrentsDb';
|
||||
import { USATVPreset } from './usaTv';
|
||||
import { ArgentinaTVPreset } from './argentinaTv';
|
||||
import { OpenSubtitlesV3PlusPreset } from './opensubtitles-v3-plus';
|
||||
import { SubSourcePreset } from './subsource';
|
||||
import { SubDLPreset } from './subdl';
|
||||
import { AISearchPreset } from './aiSearch';
|
||||
import { FKStreamPreset } from './fkstream';
|
||||
import { AIOSubtitlePreset } from './aiosubtitle';
|
||||
import { SubHeroPreset } from './subhero';
|
||||
import { StreamAsiaPreset } from './streamasia';
|
||||
import { MoreLikeThisPreset } from './moreLikeThis';
|
||||
import { GDriveAPI } from '../builtins/gdrive';
|
||||
import { GDrivePreset } from './gdrive';
|
||||
import { ContentDeepDivePreset } from './contentDeepDive';
|
||||
import { AICompanionPreset } from './aiCompanion';
|
||||
import { GoogleOAuth } from '../builtins/gdrive/api';
|
||||
import { TorBoxSearchPreset } from './torboxSearch';
|
||||
import { TorznabPreset } from './torznab';
|
||||
import { AStreamPreset } from './aStream';
|
||||
import { Env } from '../utils/env';
|
||||
import { ZileanPreset } from './zilean';
|
||||
import { AnimeToshoPreset } from './animetosho';
|
||||
import { NewznabPreset } from './newznab';
|
||||
import { ProwlarrPreset } from './prowlarr';
|
||||
import { PresetMetadata, PresetMinimalMetadata } from '../db/index.js';
|
||||
import { CometPreset } from './comet.js';
|
||||
import { CustomPreset } from './custom.js';
|
||||
import { MediaFusionPreset } from './mediafusion.js';
|
||||
import { StremthruStorePreset } from './stremthruStore.js';
|
||||
import { TorrentioPreset } from './torrentio.js';
|
||||
import { TorboxAddonPreset } from './torbox.js';
|
||||
import { EasynewsPreset } from './easynews.js';
|
||||
import { EasynewsPlusPreset } from './easynewsPlus.js';
|
||||
import { EasynewsPlusPlusPreset } from './easynewsPlusPlus.js';
|
||||
import { StremthruTorzPreset } from './stremthruTorz.js';
|
||||
import { DebridioPreset } from './debridioScraper.js';
|
||||
import { AIOStreamsPreset } from './aiostreams.js';
|
||||
import { OpenSubtitlesPreset } from './opensubtitles.js';
|
||||
import { PeerflixPreset } from './peerflix.js';
|
||||
import { DMMCastPreset } from './dmmCast.js';
|
||||
import { MarvelPreset } from './marvel.js';
|
||||
import { JackettioPreset } from './jackettio.js';
|
||||
import { OrionPreset } from './orion.js';
|
||||
import { StreamFusionPreset } from './streamfusion.js';
|
||||
import { AnimeKitsuPreset } from './animeKitsu.js';
|
||||
import { NuvioStreamsPreset } from './nuviostreams.js';
|
||||
import { RpdbCatalogsPreset } from './rpdbCatalogs.js';
|
||||
import { TmdbCollectionsPreset } from './tmdbCollections.js';
|
||||
import { DebridioWatchtowerPreset } from './debridioWatchtower.js';
|
||||
import { DebridioTmdbPreset } from './debridioTmdb.js';
|
||||
import { StarWarsUniversePreset } from './starWarsUniverse.js';
|
||||
import { DebridioTvdbPreset } from './debridioTvdb.js';
|
||||
import { DcUniversePreset } from './dcUniverse.js';
|
||||
import { DebridioTvPreset } from './debridioTv.js';
|
||||
import { TorrentCatalogsPreset } from './torrentCatalogs.js';
|
||||
import { StreamingCatalogsPreset } from './streamingCatalogs.js';
|
||||
import { AnimeCatalogsPreset } from './animeCatalogs.js';
|
||||
import { DoctorWhoUniversePreset } from './doctorWhoUniverse.js';
|
||||
import { WebStreamrPreset } from './webstreamr.js';
|
||||
import { TMDBAddonPreset } from './tmdb.js';
|
||||
import { TorrentsDbPreset } from './torrentsDb.js';
|
||||
import { USATVPreset } from './usaTv.js';
|
||||
import { ArgentinaTVPreset } from './argentinaTv.js';
|
||||
import { OpenSubtitlesV3PlusPreset } from './opensubtitles-v3-plus.js';
|
||||
import { SubSourcePreset } from './subsource.js';
|
||||
import { SubDLPreset } from './subdl.js';
|
||||
import { AISearchPreset } from './aiSearch.js';
|
||||
import { FKStreamPreset } from './fkstream.js';
|
||||
import { AIOSubtitlePreset } from './aiosubtitle.js';
|
||||
import { SubHeroPreset } from './subhero.js';
|
||||
import { StreamAsiaPreset } from './streamasia.js';
|
||||
import { MoreLikeThisPreset } from './moreLikeThis.js';
|
||||
import { GDriveAPI } from '../builtins/gdrive/index.js';
|
||||
import { GDrivePreset } from './gdrive.js';
|
||||
import { ContentDeepDivePreset } from './contentDeepDive.js';
|
||||
import { AICompanionPreset } from './aiCompanion.js';
|
||||
import { GoogleOAuth } from '../builtins/gdrive/api.js';
|
||||
import { TorBoxSearchPreset } from './torboxSearch.js';
|
||||
import { TorznabPreset } from './torznab.js';
|
||||
import { AStreamPreset } from './aStream.js';
|
||||
import { Env } from '../utils/env.js';
|
||||
import { ZileanPreset } from './zilean.js';
|
||||
import { AnimeToshoPreset } from './animetosho.js';
|
||||
import { NewznabPreset } from './newznab.js';
|
||||
import { ProwlarrPreset } from './prowlarr.js';
|
||||
|
||||
let PRESET_LIST: string[] = [
|
||||
'custom',
|
||||
@@ -261,3 +261,5 @@ export class PresetManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Addon, Option, Stream, UserData } from '../db';
|
||||
import { Preset, baseOptions } from './preset';
|
||||
import { Env, RESOURCES, ServiceId, constants } from '../utils';
|
||||
import { StremThruPreset } from './stremthru';
|
||||
import { BuiltinAddonPreset } from './builtin';
|
||||
import { Addon, Option, Stream, UserData } from '../db/index.js';
|
||||
import { Preset, baseOptions } from './preset.js';
|
||||
import { Env, RESOURCES, ServiceId, constants } from '../utils/index.js';
|
||||
import { StremThruPreset } from './stremthru.js';
|
||||
import { BuiltinAddonPreset } from './builtin.js';
|
||||
|
||||
export class ProwlarrPreset extends BuiltinAddonPreset {
|
||||
static override get METADATA() {
|
||||
@@ -133,3 +133,5 @@ export class ProwlarrPreset extends BuiltinAddonPreset {
|
||||
return `${this.METADATA.URL}/${configString}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class RpdbCatalogsPreset extends Preset {
|
||||
private static catalogs = [
|
||||
@@ -109,3 +109,5 @@ export class RpdbCatalogsPreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class StarWarsUniversePreset extends Preset {
|
||||
private static catalogs = [
|
||||
@@ -161,3 +161,5 @@ export class StarWarsUniversePreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { createLogger, Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { createLogger, Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
|
||||
const logger = createLogger('core');
|
||||
|
||||
@@ -445,3 +445,5 @@ there is no need to provide these details here.
|
||||
return encodedUserData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Addon, Option, UserData, Resource } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { Addon, Option, UserData, Resource } from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
|
||||
export class StreamFusionPreset extends Preset {
|
||||
static override get METADATA() {
|
||||
@@ -275,3 +275,5 @@ export class StreamFusionPreset extends Preset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Addon, Option, UserData } from '../db';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset';
|
||||
import { constants, Env } from '../utils';
|
||||
import { Addon, Option, UserData } from '../db/index.js';
|
||||
import { CacheKeyRequestOptions, Preset, baseOptions } from './preset.js';
|
||||
import { constants, Env } from '../utils/index.js';
|
||||
|
||||
export class StreamingCatalogsPreset extends Preset {
|
||||
// amp,atp,hbm,sst,vil,cpd,nlz,blv,zee,hay,clv,gop,hst,cru,mgl,cts,hlu,pmp,pcp,dnp,nfk,nfx
|
||||
@@ -220,3 +220,5 @@ export class StreamingCatalogsPreset extends Preset {
|
||||
return cacheKey;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Option, ParsedStream, Stream, UserData } from '../db';
|
||||
import { StreamParser } from '../parser';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { Preset } from './preset';
|
||||
import { Option, ParsedStream, Stream, UserData } from '../db/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { Preset } from './preset.js';
|
||||
|
||||
export const stremthruSpecialCases: Partial<
|
||||
Record<ServiceId, (credentials: any) => any>
|
||||
@@ -76,3 +76,5 @@ export class StremThruPreset extends Preset {
|
||||
|
||||
export type StremThruServiceId =
|
||||
(typeof StremThruPreset.supportedServices)[number];
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import { Addon, Option, UserData, Resource, Stream, ParsedStream } from '../db';
|
||||
import { baseOptions, Preset } from './preset';
|
||||
import { Env } from '../utils';
|
||||
import { constants, ServiceId } from '../utils';
|
||||
import { StreamParser } from '../parser';
|
||||
import { StremThruPreset, StremThruStreamParser } from './stremthru';
|
||||
import {
|
||||
Addon,
|
||||
Option,
|
||||
UserData,
|
||||
Resource,
|
||||
Stream,
|
||||
ParsedStream,
|
||||
} from '../db/index.js';
|
||||
import { baseOptions, Preset } from './preset.js';
|
||||
import { Env } from '../utils/index.js';
|
||||
import { constants, ServiceId } from '../utils/index.js';
|
||||
import { StreamParser } from '../parser/index.js';
|
||||
import { StremThruPreset, StremThruStreamParser } from './stremthru.js';
|
||||
|
||||
class StremthruStoreStreamParser extends StremThruStreamParser {
|
||||
protected override applyUrlModifications(
|
||||
@@ -180,3 +187,5 @@ export class StremthruStorePreset extends StremThruPreset {
|
||||
return `${url}${configString ? '/' + configString : ''}/manifest.json`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user