UNPKG

@expass/node

Version:

A modern and secure password hashing/encryption library for node

71 lines (70 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeExPass = void 0; const core_1 = require("@expass/core"); const crypto_1 = require("./crypto"); const encoder_1 = require("./encoder"); const getExPassService = (() => { let exPassService = null; return () => { if (!exPassService) { exPassService = (0, core_1.ExPassModuleFactory)({ Crypto: crypto_1.NodeCrypto, Encoder: encoder_1.NodeScryptEncoder, }); } return exPassService; }; })(); ; class NodeExPass { #secret; #exPass; #config; constructor(secret, options = {}) { if (Buffer.isBuffer(secret)) { this.#secret = secret; } else { this.#secret = Buffer.from(secret, 'utf8'); } this.#config = { config: Object.keys(options) .filter((k) => k in core_1.DefaultConfig) .reduce((acc, _k) => { const k = _k; return { ...acc, [k]: options[k], }; }, {}), params: options, }; this.#exPass = getExPassService(); } get #exPassConfig() { return { ...this.#config.config }; } get #exPassConfigParams() { return { ...this.#exPassConfig, ...this.#config.params }; } async encode(password) { return this.#exPass.encode(password, this.#secret, this.#config.config); } async verify(password, hash) { return this.#exPass.compare(password, hash, this.#secret, this.#config.params) .catch((err) => { if (err.code === 'ERR_OSSL_BAD_DECRYPT') { return false; } throw err; }); } isExPassHash(hash) { return this.#exPass.isExPassHash(hash); } } exports.NodeExPass = NodeExPass;