nurlresolver
Version:
url resolver for node
100 lines • 3.84 kB
JavaScript
import { BaseUrlResolver } from "../BaseResolver.js";
const tryParseContentLengthFromRangeHeader = (h) => {
if (h) {
return parseInt(h.split('/').pop() || '0');
}
};
const parseFileNameFromContentDisposition = (h) => {
//Content-Disposition: attachment; filename="Starfish.2023.1080p.Hindi.WEB-DL.5.1.ESub.x264-HDHub4u.Tv.mkv"
if (h) {
return /filename="([^"]*)"/.exec(h)?.[1];
}
};
export class cloudFlareStorageResolver extends BaseUrlResolver {
constructor() {
super({
domains: [/https?:\/\/\w+\.r2\.cloudflarestorage\.com/],
speedRank: 95
});
this.fn1 = async (_urlToResolve) => {
const purl = new URL(_urlToResolve);
purl.searchParams.delete('x-nu-org');
const newur = purl.href;
const rs = await this.gotInstance(newur, { headers: { Range: 'bytes=0-0' } });
const title = this.extractFileNameFromUrl(_urlToResolve);
return {
link: newur,
title,
isPlayable: true,
parent: _urlToResolve,
size: tryParseContentLengthFromRangeHeader(rs.headers['content-range']),
lastModified: rs.headers['last-modified'],
contentType: rs.headers['content-type']
};
};
}
async resolveInner(_urlToResolve) {
try {
return await this.fn1(_urlToResolve);
}
catch (error) {
const xnr = new URL(_urlToResolve).searchParams.get('x-nu-org');
if (xnr) {
const nlinks = await this._context?.resolve(xnr);
const whichIsResolvable = nlinks?.find(x => this.canResolve(x.link)); //this will do the trick as long as there's only one cloudflarestorage link in that page.
if (whichIsResolvable) {
return this.fn1(whichIsResolvable.link);
}
}
}
return [];
}
async fillMetaInfo(resolveMediaItem) {
////empty one
}
}
export class pixeldraStorageResolver extends BaseUrlResolver {
constructor() {
super({
domains: [/https?:\/\/pixeldra/],
speedRank: 95
});
this.fn1 = async (_urlToResolve) => {
console.log(_urlToResolve);
const purl = new URL(_urlToResolve);
purl.searchParams.delete('x-nu-org');
const newur = purl.href;
const rs = await this.gotInstance.head(newur);
const title = parseFileNameFromContentDisposition(rs.headers["content-disposition"]) || this.extractFileNameFromUrl(_urlToResolve);
return {
link: newur,
title,
isPlayable: true,
parent: _urlToResolve,
size: rs.headers["content-length"] && parseInt(rs.headers["content-length"]),
lastModified: rs.headers['last-modified'],
contentType: rs.headers['content-type']
};
};
}
async resolveInner(_urlToResolve) {
try {
return await this.fn1(_urlToResolve);
}
catch (error) {
const xnr = new URL(_urlToResolve).searchParams.get('x-nu-org');
if (xnr) {
const nlinks = await this._context?.resolve(xnr);
const whichIsResolvable = nlinks?.find(x => this.canResolve(x.link)); //this will do the trick as long as there's only one cloudflarestorage link in that page.
if (whichIsResolvable) {
return this.fn1(whichIsResolvable.link);
}
}
}
return [];
}
async fillMetaInfo(resolveMediaItem) {
////empty one
}
}
//# sourceMappingURL=cloudFlareStorage.js.map