spoof-detect / deno /index.ts
Niv Sardi
add dockerfiles
8aad435
import PQueue from "https://deno.land/x/p_queue@1.0.1/mod.ts"
import { Application, Router } from "https://deno.land/x/oak@v9.0.0/mod.ts";
import * as CSV from './csv.ts';
import Puppet from './puppet.ts';
import selectors from './selectors.ts';
import { fetch_logos } from './logos.ts';
const puppet = new Puppet();
const app = new Application();
const router = new Router();
const stats = {
in_flight: 0,
done: 0
}
export const DEFAULT_VIEWPORTS = [{
width: 640,
height: 480
}, {
width: 1080,
height: 800
}, {
width: 640,
height: 640
}, {
width: 600,
height: 800,
hasTouch: true,
isMobile: true
}]
router.post('/screenshot', async (ctx) => {
const { request, response } = ctx;
const { url, path = './debug.png', logos = false, viewports = DEFAULT_VIEWPORTS } = await request.body().value;
stats.in_flight++;
let i = 0, v = {};
viewports.map(async (v, i) => {
const ret = await puppet.run(async page => {
await page.setViewport(v)
console.error('running', url, stats, v)
try {
const npath = path.replace('.png', `.${i}.png`)
await page.goto(url, { waitUntil: 'networkidle2', timeout: 60000 })
await page.screenshot({ path: npath, fullPage: true })
if (logos) {
await fetch_logos(page, npath)
}
console.error(`screenshot ${v} / ${i} ok: ${path}`)
} catch (e) {
console.error(e)
}
return { response: 'ok' }
})
})
stats.in_flight--;
stats.done++
response.body = { response: 'ok' }
})
app.use(router.routes())
app.use(router.allowedMethods())
const addr = '0.0.0.0:8000'
console.error(`listen on ${addr}`)
app.listen(addr)