mirror of
https://github.com/p-stream/providers.git
synced 2026-04-21 18:22:18 +00:00
update valid to handle 200 errors that fail anyway
This commit is contained in:
parent
add7dc5b3f
commit
1c41c7d868
1 changed files with 28 additions and 3 deletions
|
|
@ -41,7 +41,28 @@ export function isValidStream(stream: Stream | undefined): boolean {
|
||||||
* instead of proxiedFetcher
|
* instead of proxiedFetcher
|
||||||
*/
|
*/
|
||||||
function isAlreadyProxyUrl(url: string): boolean {
|
function isAlreadyProxyUrl(url: string): boolean {
|
||||||
return url.includes('/m3u8-proxy?url=');
|
return url.includes('/m3u8-proxy?url=') || url.includes('shegu.net');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a response result indicates an invalid/error response that should fail validation
|
||||||
|
*/
|
||||||
|
function isErrorResponse(result: { statusCode: number; body: string | any; finalUrl?: string }): boolean {
|
||||||
|
if (result.statusCode === 403) return true;
|
||||||
|
|
||||||
|
const bodyStr = typeof result.body === 'string' ? result.body : String(result.body);
|
||||||
|
if (result.statusCode === 200 && bodyStr.trim() === 'error_wrong_ip') return true;
|
||||||
|
|
||||||
|
if (result.statusCode === 200) {
|
||||||
|
try {
|
||||||
|
const parsed = JSON.parse(bodyStr);
|
||||||
|
if (parsed.status === 403 && parsed.msg === 'Access Denied') return true;
|
||||||
|
} catch {
|
||||||
|
// Not JSON, continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function validatePlayableStream(
|
export async function validatePlayableStream(
|
||||||
|
|
@ -88,7 +109,7 @@ export async function validatePlayableStream(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.statusCode < 200 || result.statusCode >= 400) return null;
|
if (result.statusCode < 200 || result.statusCode >= 400 || isErrorResponse(result)) return null;
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -130,7 +151,11 @@ export async function validatePlayableStream(
|
||||||
// remove invalid qualities from the stream
|
// remove invalid qualities from the stream
|
||||||
const validQualities = stream.qualities;
|
const validQualities = stream.qualities;
|
||||||
Object.keys(stream.qualities).forEach((quality, index) => {
|
Object.keys(stream.qualities).forEach((quality, index) => {
|
||||||
if (validQualitiesResults[index].statusCode < 200 || validQualitiesResults[index].statusCode >= 400) {
|
if (
|
||||||
|
validQualitiesResults[index].statusCode < 200 ||
|
||||||
|
validQualitiesResults[index].statusCode >= 400 ||
|
||||||
|
isErrorResponse(validQualitiesResults[index])
|
||||||
|
) {
|
||||||
delete validQualities[quality as keyof typeof stream.qualities];
|
delete validQualities[quality as keyof typeof stream.qualities];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue