@expass/node
Version:
A modern and secure password hashing/encryption library for node
71 lines (70 loc) • 1.98 kB
JavaScript
;
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;