@pardnchiu/jwt-auth
Version:
A JWT authentication package providing both Access Token and Refresh Token mechanisms, featuring fingerprint recognition, Redis storage, and automatic refresh functionality.
49 lines • 1.98 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = CreateFingerprint;
const crypto_1 = __importDefault(require("crypto"));
async function CreateFingerprint(req) {
const userAgent = req.headers["user-agent"] || "Unknown";
function getOS() {
switch (true) {
case (/Windows/.test(userAgent)): return "Windows";
case (/Macintosh|Mac OS X/.test(userAgent)): return "MacOS";
case (/Linux/.test(userAgent)): return "Linux";
case (/Android/.test(userAgent)): return "Android";
case (/iPhone|iPad|iPod/.test(userAgent)): return "iOS";
default: return "Unknown_OS";
}
}
function getBrowser() {
switch (true) {
case (/Edge|Edg/.test(userAgent)): return "Edge";
case (/Firefox/.test(userAgent)): return "Firefox";
case (/Chrome/.test(userAgent)): return "Chrome";
case (/Safari/.test(userAgent)): return "Safari";
case (/Opera|OPR/.test(userAgent)): return "Opera";
default: return "Unknown_Browser";
}
}
function getDevice() {
switch (true) {
case (/iPad/.test(userAgent)): return "Tablet";
case (/iPhone|iPod|Android.*Mobile|BlackBerry|IEMobile|Opera Mini/.test(userAgent)): return "Mobile";
default: return "Desktop";
}
}
const fingerprintData = {
os: getOS(),
browser: getBrowser(),
device: getDevice(),
deviceId: req.headers["X-Device-ID"] || req.headers["x-device-id"] || req.body?.deviceId || "Unknown",
};
const fp = JSON.stringify(fingerprintData);
return crypto_1.default
.createHash("sha256")
.update(fp)
.digest("hex");
}
//# sourceMappingURL=CreateFingerprint.js.map