metadata/utils/webpo-helper.ts

48 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-08-01 18:00:38 +00:00
import { BG, type BgConfig } from 'bgutils-js';
import { JSDOM } from 'jsdom';
export async function generateWebPoToken(visitorData: string) {
const requestKey = 'O43z0dpjhgX20SCx4KAo';
if (!visitorData)
throw new Error('Could not get visitor data');
const dom = new JSDOM();
Object.assign(globalThis, {
window: dom.window,
document: dom.window.document
});
const bgConfig: BgConfig = { // @ts-ignore
fetch: (input: string | URL | globalThis.Request, init?: RequestInit) => fetch(input, init),
globalObj: globalThis,
identifier: visitorData,
requestKey
};
const bgChallenge = await BG.Challenge.create(bgConfig);
if (!bgChallenge)
throw new Error('Could not get challenge');
const interpreterJavascript = bgChallenge.interpreterJavascript.privateDoNotAccessOrElseSafeScriptWrappedValue;
if (interpreterJavascript) {
new Function(interpreterJavascript)();
} else throw new Error('Could not load VM');
const poTokenResult = await BG.PoToken.generate({
program: bgChallenge.program,
globalName: bgChallenge.globalName,
bgConfig
});
const placeholderPoToken = BG.PoToken.generatePlaceholder(visitorData);
return {
visitorData,
placeholderPoToken,
poToken: poTokenResult.poToken,
};
}