#!/usr/bin/env node
//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
//! SPDX-License-Identifier: GPL-3.0-or-later
+/// <reference types="@webgpu/types" />
import * as fs from 'node:fs/promises'
import * as readline from 'node:readline/promises'
]
})
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) => {
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(`
+ <!DOCTYPE html>
+ <head>
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; base-uri 'none'; form-action 'none'; script-src '${src}';">
+ <script type="module">${inject}</script>
+ </head>
+ </html>
+ `)
+ await fs.unlink(cliPage)
+ if (options['debug']) console.log('Puppeteer initialized')
})()