OverviewFilesCommitsIssuesDocsReleasesPeers

stremio-vsembed / node_helper / vidcore_direct_probe.mjs

34 lines · javascript ref:
// vidcore_direct_probe.mjs — can we drive the vidcore.net iframe URL directly
// (parameterized by season/episode) instead of flixlab's SPA route?
// Usage: xvfb-run -a node node_helper/vidcore_direct_probe.mjs <vidcoreUrl>
import { chromium } from 'patchright';
const log = (...a) => console.error('[vd]', ...a);
const MEDIA = /\.m3u8(\?|$)|\/playlist|\/master/i;
const NOISE = /youtube|googlevideo|ytimg|chaturbate|mmcdn|canAutoplay/i;
const URL_ = process.argv[2];
if (!URL_) { console.error('usage: <vidcoreUrl>'); process.exit(1); }

const ctx = await chromium.launchPersistentContext('/tmp/vc_profile_direct', {
  headless: false, args: ['--no-sandbox'], viewport: { width: 1280, height: 720 }, locale: 'en-US',
});
ctx.on('page', p => setTimeout(() => { if (!p.isClosed() && !/vidcore/.test(p.url())) p.close().catch(() => {}); }, 500));
const media = new Map();
ctx.on('request', r => { const u = r.url(); if (MEDIA.test(u) && !NOISE.test(u)) media.set(u, 1); });
const page = ctx.pages()[0] || await ctx.newPage();
await page.setExtraHTTPHeaders({ Referer: 'https://flixlab.org/' });
log('goto', URL_);
await page.goto(URL_, { waitUntil: 'domcontentloaded', timeout: 60000 }).catch(e => log('warn', e.message));
for (let i = 0; i < 14 && media.size === 0; i++) {
  await page.waitForTimeout(3000);
  const st = await page.evaluate(() => ({
    t: ((document.body && document.body.innerText) || '').replace(/\s+/g, ' ').slice(0, 60),
    v: !!document.querySelector('video'),
  })).catch(() => ({}));
  log(`t=${(i + 1) * 3}s "${st.t}" video=${st.v} media=${media.size}`);
  const v = await page.$('video').catch(() => null);
  if (v) await v.click({ timeout: 1200, force: true }).catch(() => {});
  else await page.mouse.click(640, 360).catch(() => {});
}
await ctx.close().catch(() => {});
console.log(JSON.stringify({ url: URL_, media: [...media.keys()] }));