@antelopejs/auth-jwt
Version:
Authentication and authorization module that implements the Auth interface of antelopejs with JWT
41 lines • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JWTHandler = void 0;
const jsonwebtoken_1 = require("jsonwebtoken");
const beta_1 = require("@ajs/api/beta");
const promises_1 = require("fs/promises");
class JWTHandler {
loadFromDisk = false;
signKey;
verifyKey;
signOptions;
verifyOptions;
constructor(config) {
if (!config.secret && (!config.signKey || !config.verifyKey)) {
throw new Error('Invalid JWT config');
}
if (!config.secret) {
this.loadFromDisk = true;
}
this.signKey = (config.signKey || config.secret);
this.verifyKey = (config.verifyKey || config.secret);
this.signOptions = config.signOptions || {};
this.verifyOptions = config.verifyOptions || {};
}
async loadKeys() {
if (this.loadFromDisk) {
this.signKey = await (0, promises_1.readFile)(this.signKey);
this.verifyKey = await (0, promises_1.readFile)(this.verifyKey);
}
}
verify(data, options) {
return data
? new Promise((resolve, reject) => (0, jsonwebtoken_1.verify)(data, this.verifyKey, { ...this.verifyOptions, ...(options || {}) }, (err, encoded) => err ? reject(new beta_1.HTTPResult(403, `Forbidden (${err.message})`)) : resolve(encoded)))
: Promise.reject(new beta_1.HTTPResult(401, 'Unauthorized'));
}
sign(data, options) {
return new Promise((resolve, reject) => (0, jsonwebtoken_1.sign)(data, this.signKey, { ...this.signOptions, ...(options || {}) }, (err, encoded) => err ? reject(err) : resolve(encoded)));
}
}
exports.JWTHandler = JWTHandler;
//# sourceMappingURL=jwt.js.map