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,
|
||
|
};
|
||
|
}
|