cnpmcore
Version:
91 lines • 6.23 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBrowserTypeForWebauthn = exports.getUAInfo = exports.sha512 = exports.checkIntegrity = exports.integrity = exports.checkToken = exports.randomToken = void 0;
const crypto_1 = __importDefault(require("crypto"));
const base_x_1 = __importDefault(require("base-x"));
const crc32_1 = require("@node-rs/crc32");
const ssri = __importStar(require("ssri"));
const ua_parser_js_1 = __importDefault(require("ua-parser-js"));
const base62 = (0, base_x_1.default)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
const crc32Buffer = Buffer.alloc(4);
function randomToken(prefix) {
const bytes = crypto_1.default.randomBytes(24);
const crc = (0, crc32_1.crc32)(bytes);
crc32Buffer.writeUInt32BE(crc);
return `${prefix}_${base62.encode(bytes)}_${base62.encode(crc32Buffer)}`;
}
exports.randomToken = randomToken;
function checkToken(token, prefix) {
const splits = token.split('_');
if (splits.length !== 3)
return false;
if (splits[0] !== prefix)
return false;
try {
const bytes = base62.decode(splits[1]);
const crcBytes = base62.decode(splits[2]);
return crcBytes.readUInt32BE(0) === (0, crc32_1.crc32)(bytes);
}
catch {
return false;
}
}
exports.checkToken = checkToken;
function integrity(plain) {
return ssri.create().update(plain).digest()
.toString();
}
exports.integrity = integrity;
function checkIntegrity(plain, expectedIntegrity) {
return !!ssri.checkData(plain, expectedIntegrity);
}
exports.checkIntegrity = checkIntegrity;
function sha512(plain) {
return crypto_1.default.createHash('sha512').update(plain).digest('hex');
}
exports.sha512 = sha512;
function getUAInfo(userAgent) {
if (!userAgent)
return null;
return new ua_parser_js_1.default(userAgent);
}
exports.getUAInfo = getUAInfo;
function getBrowserTypeForWebauthn(userAgent) {
const ua = getUAInfo(userAgent);
if (!ua)
return null;
const os = ua.getOS();
if (os.name === 'iOS' || os.name === 'Android')
return 'mobile';
if (os.name === 'Mac OS')
return ua.getBrowser().name;
return null;
}
exports.getBrowserTypeForWebauthn = getBrowserTypeForWebauthn;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hcHAvY29tbW9uL1VzZXJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUEwQjtBQUMxQiwwQ0FBdUM7QUFDdkMsMkNBQTZCO0FBQzdCLGdFQUFvQztBQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFJLEVBQUMsZ0VBQWdFLENBQUMsQ0FBQztBQUV0RixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXBDLFNBQWdCLFdBQVcsQ0FBQyxNQUFjO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUEsYUFBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBTEQsa0NBS0M7QUFFRCxTQUFnQixVQUFVLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJO1FBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFBLGFBQUssRUFBQyxLQUFLLENBQUMsQ0FBQztLQUNsRDtJQUFDLE1BQU07UUFDTixPQUFPLEtBQUssQ0FBQztLQUNkO0FBQ0gsQ0FBQztBQVhELGdDQVdDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLEtBQWE7SUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtTQUN4QyxRQUFRLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBSEQsOEJBR0M7QUFFRCxTQUFnQixjQUFjLENBQUMsS0FBYSxFQUFFLGlCQUF5QjtJQUNyRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFGRCx3Q0FFQztBQUVELFNBQWdCLE1BQU0sQ0FBQyxLQUFhO0lBQ2xDLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRkQsd0JBRUM7QUFFRCxTQUFnQixTQUFTLENBQUMsU0FBa0I7SUFDMUMsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QixPQUFPLElBQUksc0JBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBSEQsOEJBR0M7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxTQUFrQjtJQUMxRCxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNyQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUNoRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN0RCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFQRCw4REFPQyJ9