{"version":3,"sources":["jsdelivr-header.js","/npm/otp-process@1.0.4/server.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,OAAS,QAAQ,WACjB,eAAC,eAAe,QAAE,QAAQ,QAAE,SAAW,QAAQ,aAErD,MAAM,UAEF,SAAA,CAAU,EAAQ,EAAG,EAAO,CAAC,EAAG,EAAS,EAAG,EAAS,QAEjD,IAAI,OAAO,UAAU,GACjB,MAAO,CAAE,MAAO,4BAA6B,MAAM,GACjD,IAAK,OAAO,UAAU,GACxB,MAAO,CAAE,MAAO,6BAA8B,MAAM,GAGxD,GAAI,EAAQ,EACR,MAAO,CAAE,MAAO,4BAA6B,MAAM,GAChD,GAAI,EAAQ,GACf,MAAO,CAAE,MAAO,+BAAgC,MAAM,GACnD,CAEH,MAAM,EAAS,eAAe,GAExB,EAAM,OAAO,UAAU,OAAO,EAAO,KAAM,OAAO,EAAO,MAIzD,EAAa,IAAY,EAEzB,EAAU,KAAK,MAAQ,EAG7B,IAAI,EAAa,GAAG,KAAO,KAC3B,IAAK,IAAI,KAAQ,EACb,EAAa,EAAa,EAAK,GAAQ,IAI3C,EAAa,EAAW,UAAU,EAAG,EAAW,OAAS,GAMzD,MAAO,CAAE,OAAO,EAAO,MAAK,MAAM,EAAM,OAAM,KAAM,GAFnC,QAAQ,EAFV,MAIoD,IACvE,CACJ,CAEA,MAAA,CAAO,EAAM,EAAK,CAAC,EAAG,EAAK,EAAS,QAEhC,IAAK,IAAS,IAAS,EACnB,MAAO,CAAE,MAAO,0BAA2B,MAAM,GAIrD,IAAI,OAAO,UAAU,OAAO,IACxB,MAAO,CAAE,MAAO,0BAA2B,MAAM,GAIrD,MAAO,EAAW,GAAW,EAAK,MAAM,KAGxC,GAAI,KAAK,MAAQ,OAAO,GAEpB,MAAO,CAAE,MAAO,kBAAmB,MAAM,GAI7C,IAAI,EAAa,GAAG,KAAO,KAC3B,IAAK,IAAI,KAAQ,EACb,EAAa,EAAa,EAAK,GAAQ,IAI3C,EAAa,EAAW,UAAU,EAAG,EAAW,OAAS,GAQzD,OAFsB,QAAQ,EAHf,EAGmC,GAM3C,CAAC,OAAQ,EAAQ,OAAO,KAAK,gBAHzB,CAAC,MAAM,sDAAwD,MAAK,EAInF,EAGJ,OAAO,QAAU,IAAI","file":"/npm/otp-process@1.0.4/server.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/otp-process@1.0.4/server.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const crypto = require('crypto');\r\nconst {generateMinMax , hashOtp , compare} = require('./helpers');\r\n\r\nclass OtpSystem {\r\n    // this function will be used to do otp generation process\r\n    createOtp(digit = 4, data = {}, expiry = 1, secret = \"None\") {\r\n        // validation 1\r\n        if(!Number.isInteger(digit)){\r\n            return { error: \"digit should be a integer\", flag: false };\r\n        }else if (!Number.isInteger(expiry)){\r\n            return { error: \"expiry should be a integer\", flag: false };\r\n        }\r\n        // validating digit 2\r\n        if (digit < 4) {\r\n            return { error: \"digit should be atleast 4\", flag: false };\r\n        } else if (digit > 12) {\r\n            return { error: \"digit should be less than 13\", flag: false };\r\n        } else {\r\n            // holding min max for deciding otp length\r\n            const length = generateMinMax(digit);\r\n            // creating otp\r\n            const otp = crypto.randomInt(Number(length.min), Number(length.max));\r\n\r\n            // creating otp hash\r\n            // this is total time\r\n            const expiryTime = 1000 * 60 * expiry;\r\n            // this is expires time\r\n            const expires = Date.now() + expiryTime;\r\n\r\n            // creating data string encrypting data\r\n            let dataString = `${otp}.${expires}.`;\r\n            for (let item in data) {\r\n                dataString = dataString + data[item] + \".\";\r\n            };\r\n\r\n            // purify the dataString\r\n            dataString = dataString.substring(0, dataString.length - 1);\r\n            // this is the secret for creating otp hash\r\n            const SECRET = secret;\r\n            // creating otp hash\r\n            const otp_hash = hashOtp(dataString, SECRET);\r\n\r\n            return { error: false, otp, flag: true, data, hash: `${otp_hash}.${expires}` };\r\n        }\r\n    };\r\n\r\n    verify(hash, data={}, otp, secret = \"None\") {\r\n        // validating\r\n        if (!hash || !data || !otp) {\r\n            return { error: \"All fields are required\", flag: false };\r\n        }\r\n\r\n        // validation 2\r\n        if(!Number.isInteger(Number(otp))){\r\n            return { error: \"otp should be a integer\", flag: false };\r\n        }\r\n\r\n        // destructuring hash data\r\n        const [hashedOtp, expires] = hash.split(\".\");\r\n\r\n        // Checking here, Is entered otp expired or not?\r\n        if (Date.now() > Number(expires)) {\r\n            // console.log({ \"msg\": \"Otp has been expired\", flag: false });\r\n            return { error: \"otp has expired\", flag: false };\r\n        };\r\n\r\n        // this is the data for creating otp hash \r\n        let dataString = `${otp}.${expires}.`;\r\n        for (let item in data) {\r\n            dataString = dataString + data[item] + \".\";\r\n        };\r\n\r\n        // purify the dataString\r\n        dataString = dataString.substring(0, dataString.length - 1);\r\n\r\n        // this is the secret for creating otp hash\r\n        const SECRET = secret;\r\n\r\n        // user will be verified or not\r\n        const verifyingUser = compare(dataString, SECRET, hashedOtp);\r\n\r\n        if(!verifyingUser){\r\n            return {error:\"Otp verification failed, please enter valid details\" , flag:false};\r\n        }\r\n\r\n        return {error : false , data , flag:\"Otp verified\"};\r\n    }\r\n}\r\n\r\nmodule.exports = new OtpSystem();"]}