UNPKG

ziron-server

Version:
1 lines 2.84 kB
"use strict";var __awaiter=this&&this.__awaiter||function(t,e,i,r){return new(i||(i=Promise))((function(n,o){function s(t){try{u(r.next(t))}catch(t){o(t)}}function a(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const ziron_errors_1=require("ziron-errors"),jsonwebtoken_1=require("jsonwebtoken"),crypto=require("crypto");class AuthEngine{constructor(t={}){this._options={secretKey:null,defaultExpiry:86400,algorithm:"HS256",publicKey:null,privateKey:null},this.updateOptions(t)}get options(){return Object.assign({},this._options)}updateOptions(t={}){if(Object.assign(this._options,t),null!=this._options.privateKey||null!=this._options.publicKey){if(null==this._options.privateKey)throw new ziron_errors_1.InvalidOptionsError("The authPrivateKey option must be specified if authPublicKey is specified");if(null==this._options.publicKey)throw new ziron_errors_1.InvalidOptionsError("The authPublicKey option must be specified if authPrivateKey is specified");this._signatureKey=this._options.privateKey,this._verificationKey=this._options.publicKey}else null==this._options.secretKey&&(this._options.secretKey=crypto.randomBytes(32).toString("hex")),this._signatureKey=this._options.secretKey,this._verificationKey=this._options.secretKey;this._defaultSignOptionsWithoutExp=Object.assign(Object.assign({},null!=this._options.algorithm?{algorithm:this._options.algorithm}:{}),{mutatePayload:!0}),this._defaultSignOptions=Object.assign(Object.assign({},this._defaultSignOptionsWithoutExp),{expiresIn:this._options.defaultExpiry}),this._defaultVerifyOptions=Object.assign({},null!=this._options.algorithm?{algorithms:[this._options.algorithm]}:{})}verifyToken(t){return __awaiter(this,arguments,void 0,(function*(t,e={}){if("string"==typeof t)return new Promise((i,r)=>{(0,jsonwebtoken_1.verify)(t,this._verificationKey,Object.assign({},this._defaultVerifyOptions,e),(t,e)=>{if(t)switch(t.name){case"TokenExpiredError":return r(new ziron_errors_1.AuthTokenExpiredError(t.message,t.expiredAt));case"JsonWebTokenError":return r(new ziron_errors_1.AuthTokenInvalidError(t.message));case"NotBeforeError":return r(new ziron_errors_1.AuthTokenNotBeforeError(t.message,t.date));default:return r(new ziron_errors_1.AuthTokenError(t.message))}else i(e)})});throw new ziron_errors_1.InvalidArgumentsError("Invalid token format - Token must be a string")}))}signToken(t){return __awaiter(this,arguments,void 0,(function*(t,e={}){return new Promise((i,r)=>{(0,jsonwebtoken_1.sign)(t,this._signatureKey,Object.assign({},"object"==typeof t&&null!=t.exp?this._defaultSignOptionsWithoutExp:this._defaultSignOptions,e),(t,e)=>{t?r(t):i(e)})})}))}}exports.default=AuthEngine;