From: Chris Duncan Date: Fri, 21 Mar 2025 14:15:50 +0000 (-0700) Subject: Reimplement CSP and generate script hash to use for puppeteer page content. Get GPU... X-Git-Tag: v3.2.1~2 X-Git-Url: https://zoso.dev/?a=commitdiff_plain;h=ea27171d1cf115ae21b7f4a06270972525c14c99;p=nano-pow.git Reimplement CSP and generate script hash to use for puppeteer page content. Get GPU types to resolve Typescript warning. --- diff --git a/src/bin/cli.ts b/src/bin/cli.ts index 7c31441..138c742 100755 --- a/src/bin/cli.ts +++ b/src/bin/cli.ts @@ -1,6 +1,7 @@ #!/usr/bin/env node //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later +/// import * as fs from 'node:fs/promises' import * as readline from 'node:readline/promises' @@ -123,8 +124,30 @@ if (hashes.length === 0) { ] }) const page = await browser.newPage() - await page.setBypassCSP(true) - await page.goto('chrome://terms') + const cliPage = `${import.meta.dirname}/cli.html` + await fs.writeFile(cliPage, '') + await page.goto(import.meta.resolve('./cli.html')) + await page.waitForFunction(async () => { + return await navigator.gpu.requestAdapter() + }) + + const inject = ` + ${NanoPow} + window.results = [] + const hashes = ["${hashes.join('","')}"] + for (const hash of hashes) { + try { + const work = await NanoPow.${fn}(${work}hash, ${JSON.stringify(options)}) + window.results.push(work) + console.log(\`cli \${work}\`) + } catch (err) { + console.error(\`cli \${err}\`) + } + } + console.log('cli exit') + ` + const hash = await crypto.subtle.digest('SHA-256', Buffer.from(inject, 'utf-8')) + const src = `sha256-${Buffer.from(hash).toString('base64')}` let start = performance.now() page.on('console', async (msg) => { @@ -153,31 +176,15 @@ if (hashes.length === 0) { console.log(msg.text()) } }) - await page.waitForFunction(async () => { - return await navigator.gpu.requestAdapter() - }) start = performance.now() - await page.addScriptTag({ - type: 'module', - content: ` - window.trustedTypes?.createPolicy?.('default', { - createHTML: string => string, - createScriptURL: string => string, - createScript: string => string, - }) - ${NanoPow} - window.results = [] - const hashes = ["${hashes.join('","')}"] - for (const hash of hashes) { - try { - const work = await NanoPow.${fn}(${work}hash, ${JSON.stringify(options)}) - window.results.push(work) - console.log(\`cli \${work}\`) - } catch (err) { - console.error(\`cli \${err}\`) - } - } - console.log('cli exit') - ` - }) + await page.setContent(` + + + + + + + `) + await fs.unlink(cliPage) + if (options['debug']) console.log('Puppeteer initialized') })()