fix(addon): allow any IDs

This commit is contained in:
Viren070
2025-01-02 14:08:59 +00:00
parent c3eeba449f
commit ccbd649bc8
4 changed files with 20 additions and 80 deletions
+9 -38
View File
@@ -47,7 +47,7 @@ app.get('/stream/:type/:id', (req: Request, res: Response) => {
res.status(200).json(missingConfig(rootUrl(req)));
});
app.get('/:config/stream/:type/:id', (req: Request, res: Response) => {
app.get('/:config/stream/:type/:id.json', (req: Request, res: Response) => {
const config = req.params.config;
// Decode Base64 encoded JSON config
@@ -63,9 +63,8 @@ app.get('/:config/stream/:type/:id', (req: Request, res: Response) => {
const decodedPath = decodeURIComponent(req.path);
const streamMatch = new RegExp(
`/stream/(movie|series)/tt([0-9]{7,})(?::([0-9]+):([0-9]+))?\.json`
`/stream/(movie|series)/([^/]+)\.json`
).exec(decodedPath.replace(`/${config}`, ''));
if (!streamMatch) {
// log after removing config if present
console.error(`Invalid request: ${decodedPath.replace(`/${config}`, '')}`);
@@ -73,46 +72,18 @@ app.get('/:config/stream/:type/:id', (req: Request, res: Response) => {
return;
}
const [type, id, season, episode] = streamMatch.slice(1);
const [type, id] = streamMatch.slice(1);
console.log(
`Received /stream request with Type: ${type}, ID: ${id}, Season: ${season}, Episode: ${episode}`
`Received /stream request with Type: ${type}, ID: ${id}`
);
let streamRequest: StreamRequest;
switch (type) {
case 'series':
if (!season || !episode) {
res.status(400).send('Invalid request');
console.log(
`Request type was series but season or episode was missing`
);
return;
}
streamRequest = {
id,
type: 'series',
season,
episode,
};
break;
case 'movie':
if (season || episode) {
console.log(`Request type was movie but season or episode was present`);
res.status(400).send('Invalid request');
return;
}
streamRequest = {
id,
type: 'movie',
};
break;
default:
console.log(`Request type was invalid`);
res.status(400).send('Invalid request');
return;
if (type !== 'movie' && type !== 'series') {
res.status(400).send('Invalid type');
return;
}
let streamRequest: StreamRequest = { id, type };
try {
const { valid, errorCode, errorMessage } = validateConfig(configJson);
if (!valid) {
+7 -25
View File
@@ -71,7 +71,7 @@ export default {
const config = components[0];
const decodedPath = decodeURIComponent(url.pathname);
const streamMatch = /\/stream\/(movie|series)\/tt(\d{7,})(?::(\d+):(\d+))?.json/.exec(decodedPath.replace(`/${config}`, ''));
const streamMatch = /stream\/(movie|series)\/([^/]+)\.json/.exec(decodedPath.replace(`/${config}`, ''));
if (!streamMatch) {
let path = decodedPath.replace(`/${config}`, '');
@@ -79,9 +79,9 @@ export default {
return createResponse('Invalid request', 400);
}
const [type, id, season, episode] = streamMatch.slice(1);
const [type, id] = streamMatch.slice(1);
console.log(
`Received /stream request with Type: ${type}, ID: ${id}, Season: ${season}, Episode: ${episode}`
`Received /stream request with Type: ${type}, ID: ${id}`
);
let decodedConfig: Config;
@@ -101,30 +101,12 @@ export default {
);
}
let streamRequest: StreamRequest;
switch (type) {
case 'series':
if (!season || !episode) {
return createResponse('Invalid Request', 400);
}
streamRequest = {
id,
type: 'series',
season: season,
episode: episode,
};
break;
case 'movie':
streamRequest = {
id,
type: 'movie',
};
break;
default:
return createResponse('Invalid Request', 400);
if (type !== 'movie' && type !== 'series') {
return createResponse('Invalid Request', 400);
}
let streamRequest: StreamRequest = { id, type };
const aioStreams = new AIOStreams(decodedConfig);
const streams = await aioStreams.getStreams(streamRequest);
return createJsonResponse({ streams });
+2 -11
View File
@@ -73,20 +73,11 @@ export interface Subtitle {
lang: string;
}
interface MovieRequest {
export interface StreamRequest {
id: string;
type: 'movie';
type: 'series' | 'movie';
}
interface SeriesRequest {
id: string;
type: 'series';
season: string;
episode: string;
}
export type StreamRequest = MovieRequest | SeriesRequest;
export type Resolution = { [key: string]: boolean };
export type Quality = { [key: string]: boolean };
export type VisualTag = { [key: string]: boolean };
+2 -6
View File
@@ -8,7 +8,7 @@ import { extractSizeInBytes, parseFilename } from '@aiostreams/parser';
import { serviceDetails } from './details';
export class BaseWrapper {
private readonly streamPath: string = 'stream/{type}/tt{id}.json';
private readonly streamPath: string = 'stream/{type}/{id}.json';
private indexerTimeout: number;
protected addonName: string;
private addonUrl: string;
@@ -37,15 +37,11 @@ export class BaseWrapper {
}
private getStreamUrl(streamRequest: StreamRequest) {
let finalId =
streamRequest.type === 'series'
? `${streamRequest.id}:${streamRequest.season}:${streamRequest.episode}`
: streamRequest.id;
return (
this.addonUrl.replace('manifest.json', '') +
this.streamPath
.replace('{type}', streamRequest.type)
.replace('{id}', finalId)
.replace('{id}', streamRequest.id)
);
}