import * as tokenMan from "../src/tokenMan"; import Jimp from "jimp"; import QrCode from "qrcode-reader"; import speakeasy from "speakeasy"; async function test(){ const user = await tokenMan.initUser({ name:"Phillip Thern", email: "phillip.nicholas@thern.wtf" }) const otpURI = tokenMan.otpauthURI(user) const qrpngdata = tokenMan.generateQR(otpURI, (result: Buffer)=>{ return result }) Jimp.read(qrpngdata, (err, img)=>{ if(err){ throw err; } //console.log(img) const qr = new QrCode() qr.callback = (err: Error, data: {result: string})=>{ if(err){ throw err; } const token = speakeasy.totp({ secret: new URLSearchParams(data.result.split("?")[1]).get("secret")!, encoding: "base32" }) console.log(speakeasy.totp.verify({ secret: user.secret, encoding: "base32", token })?"token is valid":"token is invalid") } qr.decode(img.bitmap) }) } test()