display error stream response for expires rd sub

This commit is contained in:
TheBeastLT
2022-10-09 13:46:48 +02:00
parent 14dc202cde
commit c986088f47
3 changed files with 27 additions and 11 deletions

View File

@@ -9,7 +9,7 @@ const putio = require('./putio');
const StaticResponse = require('./static'); const StaticResponse = require('./static');
const { cacheWrapResolvedUrl } = require('../lib/cache'); const { cacheWrapResolvedUrl } = require('../lib/cache');
const { timeout } = require('../lib/promises'); const { timeout } = require('../lib/promises');
const { BadTokenError, streamFilename } = require('./mochHelper'); const { BadTokenError, streamFilename, AccessDeniedError } = require('./mochHelper');
const RESOLVE_TIMEOUT = 2 * 60 * 1000; // 2 minutes const RESOLVE_TIMEOUT = 2 * 60 * 1000; // 2 minutes
const MIN_API_KEY_SYMBOLS = 15; const MIN_API_KEY_SYMBOLS = 15;
@@ -136,9 +136,11 @@ async function getMochItemMeta(mochKey, itemId, config) {
} }
function processMochResults(streams, config, results) { function processMochResults(streams, config, results) {
const errorResults = results.filter(result => result && result.error === BadTokenError); const errorResults = results
.map(result => errorStreamResponse(result.moch.key, result.error))
.filter(errorResponse => errorResponse);
if (errorResults.length) { if (errorResults.length) {
return errorResults.map(result => badTokenStreamResponse(result.moch.key)) return errorResults;
} }
const includeTorrentLinks = options.includeTorrentLinks(config); const includeTorrentLinks = options.includeTorrentLinks(config);
@@ -194,12 +196,22 @@ function blackListToken(token, mochKey) {
TOKEN_BLACKLIST.push(tokenKey); TOKEN_BLACKLIST.push(tokenKey);
} }
function badTokenStreamResponse(mochKey) { function errorStreamResponse(mochKey, error) {
return { if (error === BadTokenError) {
name: `Torrentio\n${MOCHS[mochKey].shortName} error`, return {
title: `Invalid ${MOCHS[mochKey].name} ApiKey/Token!`, name: `Torrentio\n${MOCHS[mochKey].shortName} error`,
url: StaticResponse.FAILED_ACCESS title: `Invalid ${MOCHS[mochKey].name} ApiKey/Token!`,
}; url: StaticResponse.FAILED_ACCESS
};
}
if (error === AccessDeniedError) {
return {
name: `Torrentio\n${MOCHS[mochKey].shortName} error`,
title: `Expired ${MOCHS[mochKey].name} subscription!`,
url: StaticResponse.FAILED_ACCESS
};
}
return undefined;
} }
module.exports = { applyMochs, getMochCatalog, getMochItemMeta, resolve, MochOptions: MOCHS } module.exports = { applyMochs, getMochCatalog, getMochItemMeta, resolve, MochOptions: MOCHS }

View File

@@ -1,4 +1,5 @@
const BadTokenError = { code: 'BAD_TOKEN' } const BadTokenError = { code: 'BAD_TOKEN' }
const AccessDeniedError = { code: 'ACCESS_DENIED' }
function chunkArray(arr, size) { function chunkArray(arr, size) {
return arr.length > size return arr.length > size
@@ -15,4 +16,4 @@ function streamFilename(stream) {
return encodeURIComponent(filename) return encodeURIComponent(filename)
} }
module.exports = { chunkArray, BadTokenError, streamFilename } module.exports = { chunkArray, streamFilename, BadTokenError, AccessDeniedError }

View File

@@ -5,7 +5,7 @@ const { delay } = require('../lib/promises');
const { cacheAvailabilityResults, getCachedAvailabilityResults } = require('../lib/cache'); const { cacheAvailabilityResults, getCachedAvailabilityResults } = require('../lib/cache');
const StaticResponse = require('./static'); const StaticResponse = require('./static');
const { getMagnetLink } = require('../lib/magnetHelper'); const { getMagnetLink } = require('../lib/magnetHelper');
const { chunkArray, BadTokenError } = require('./mochHelper'); const { chunkArray, BadTokenError, AccessDeniedError } = require('./mochHelper');
const MIN_SIZE = 5 * 1024 * 1024; // 5 MB const MIN_SIZE = 5 * 1024 * 1024; // 5 MB
const CATALOG_MAX_PAGE = 5; const CATALOG_MAX_PAGE = 5;
@@ -52,6 +52,9 @@ async function _getInstantAvailable(hashes, apiKey, retries = 3, maxChunkSize =
if (error && error.code === 8) { if (error && error.code === 8) {
return Promise.reject(BadTokenError); return Promise.reject(BadTokenError);
} }
if (error && accessDeniedError(error)) {
return Promise.reject(AccessDeniedError);
}
if (!error && maxChunkSize !== 1) { if (!error && maxChunkSize !== 1) {
// sometimes due to large response size RD responds with an empty body. Reduce chunk size to reduce body // sometimes due to large response size RD responds with an empty body. Reduce chunk size to reduce body
console.log(`Reducing chunk size for availability request: ${hashes[0]}`); console.log(`Reducing chunk size for availability request: ${hashes[0]}`);