const puppeteer = require('puppeteer'); const fs = require('fs'); const crypto = require('crypto'); const path = require('path');

(async () => {

var stdinBuffer = fs.readFileSync(0);

var tmp = path.join(path.dirname(__filename), 'tmp');

if (!fs.existsSync(tmp)){
    fs.mkdirSync(tmp);
}

const filename = path.join(tmp, crypto.randomBytes(40).toString('hex')+ '.pdf');
const browser = await puppeteer.launch({  headless: true,args: [ '--no-sandbox']});
try{
    const params = {...JSON.parse(Buffer.from(stdinBuffer.toString(), 'base64').toString('utf-8')), ...{path: filename}};   
    const page = await browser.newPage();
    if(params.cookies != null){
        for(var i = 0; i<params.cookies.length; i++)
            await page.setCookie(params.cookies[i])
    }

    await page.goto(params.url, {waitUntil: (params.waitUntil != null ? params.waitUntil : 'load'), timeout: (params.timeout == null ? 30000 : params.timeout)});
    await page.pdf(params);
    process.stdout.write(filename)
}
catch(e){
    console.error(e)
    process.exit(1);
}
finally{
    await browser.close();
    process.exit(0);
}

})();