{"_id":"2fab64","_rev":"1-657fcc5e4ca7135d7485335f77de069a","name":"2fab64","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"2fab64","version":"1.0.0","description":"A Secure Auth Package For APIS 2FAbcrypt64","main":"./index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Ducky"},"license":"MIT","dependencies":{"jsdoc":"^4.0.2"},"_id":"2fab64@1.0.0","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-07lZ595f30D+flHsVjTNhfks1khNah0GmGjpbQvlLpzQUEcRAVrVOZLFN5CkXgpvF1QwX3YIqT16mhYik8pR9w==","shasum":"750fcbae61e62f925c7e82fb7a09928459c52e17","tarball":"https://registry.npmjs.org/2fab64/-/2fab64-1.0.0.tgz","fileCount":3,"unpackedSize":15198,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNkzy9zt0UkfufTt7mcWKAjRFwphhN79ZxE27/IxbBWwIgLqfI23JX8LP3SL+585Z2cssa/pgAsrPxk0DZpjvGdkE="}]},"_npmUser":{"name":"duckeydev","email":"duckydev@ambrosia.gg"},"directories":{},"maintainers":[{"name":"duckeydev","email":"duckydev@ambrosia.gg"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/2fab64_1.0.0_1707660544267_0.38236310823913633"},"_hasShrinkwrap":false},"1.0.1":{"name":"2fab64","version":"1.0.1","description":"A Secure Auth Package For APIS 2FAbcrypt64","main":"./index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Ducky"},"license":"MIT","dependencies":{"jsdoc":"^4.0.2"},"_id":"2fab64@1.0.1","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-SpZngqVge8uOImP8ZZVmjk25eYWoaQcTGp4iNlu5IcHZJIPSS6bpf7Ce92HaJh/gQbthJkR53t6lU1rIuAV1HA==","shasum":"3a1e3abd26cd2209cdd739d2fb76bee7b614113f","tarball":"https://registry.npmjs.org/2fab64/-/2fab64-1.0.1.tgz","fileCount":4,"unpackedSize":17409,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICbHS7S7yD2TEpuHyo4ic0f159NgQKHBEcy9iytjbItGAiEAl72x3xhEL57mM2zUlcnWUYpOMx+qVPA2u5MxW5u6LQ4="}]},"_npmUser":{"name":"duckeydev","email":"duckydev@ambrosia.gg"},"directories":{},"maintainers":[{"name":"duckeydev","email":"duckydev@ambrosia.gg"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/2fab64_1.0.1_1707660622203_0.8077091731828656"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-11T14:09:04.265Z","1.0.0":"2024-02-11T14:09:04.428Z","modified":"2024-02-11T14:10:22.564Z","1.0.1":"2024-02-11T14:10:22.375Z"},"maintainers":[{"name":"duckeydev","email":"duckydev@ambrosia.gg"}],"description":"A Secure Auth Package For APIS 2FAbcrypt64","author":{"name":"Ducky"},"license":"MIT","readme":"# 2FAB64\r\n2FAB is a secure auth token generator\r\nSource code:\r\n\r\n```js\r\nconst { Database } = require(\"bun:sqlite\");\r\nconst db = new Database();\r\n\r\nconst inMemoryStore = db.query(`\r\nCREATE TABLE IF NOT EXISTS tokenStore (\r\n  token TEXT,\r\n  uses INTEGER,\r\n  usesLimit INTEGER, -- Make sure this column exists to match your INSERT statement\r\n  date TIMESTAMP DEFAULT CURRENT_TIMESTAMP\r\n)\r\n`).run()\r\n\r\n\r\n  \r\n\r\nconst deleteToken = db.query(\"DELETE FROM tokenStore WHERE token = $token\");\r\nfunction randomString(length) {\r\n    let result = '';\r\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n    const charactersLength = characters.length;\r\n    let counter = 0;\r\n    while (counter < length) {\r\n        result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n        counter += 1;\r\n    }\r\n    return result;\r\n}\r\n\r\nasync function generateSecureToken(cost, stringLength, uses) {\r\n    const token = await Bun.password.hash(randomString(stringLength), {\r\n        algorithm: \"bcrypt\",\r\n        cost: cost,\r\n    });\r\n    db.query(\"INSERT INTO tokenStore (token, uses, usesLimit) VALUES ($token, $uses, $usesLimit)\")\r\n    .run({ $token: token, $uses:  0, $usesLimit: uses });\r\n    return await token\r\n}\r\n\r\nasync function validateSecureToken(token) {\r\n    if (!inMemoryStore.get({ $token: token })) {\r\n        const findTokenData = inMemoryStore.get({ $token: token });\r\n        if (findTokenData.uses > findTokenData.usesLimit || findTokenData == findTokenData.usesLimit) {\r\n            return false\r\n        }\r\n        return false\r\n    }\r\n    return true\r\n}\r\n\r\nasync function destroySecureToken(token) {\r\n    // Query to check if the token exists\r\n    const tokenExistsQuery = db.query(\"SELECT * FROM tokenStore WHERE token = $token\");\r\n    // Execute the query with the given token\r\n    const tokenData = await tokenExistsQuery.get({ $token: token });\r\n    if (!tokenData) {\r\n        console.error(\"Token does not exist\");\r\n        return;\r\n    }\r\n    // If the token exists, delete it\r\n    deleteToken.run({ $token: token });\r\n    console.log(\"Token destroyed\");\r\n}\r\n\r\n\r\nmodule.exports = { destroySecureToken, validateSecureToken, generateSecureToken }\r\n```","readmeFilename":"README.md"}