mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
fix(addon): allow any IDs
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 });
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user