48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
} |