Skip to content

Commit a9c6b40

Browse files
committed
Merge pull request auth0#11 from luisfarzati/typed-errors
Throws typed error when token is expired
2 parents 7eed152 + 558ddc0 commit a9c6b40

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

index.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ module.exports.verify = function(jwtString, secretOrPublicKey, options, callback
5757

5858
if (payload.exp) {
5959
if (Math.round(Date.now()) / 1000 >= payload.exp)
60-
return callback(new Error('jwt expired'));
60+
return callback(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));
6161
}
6262

6363
if (options.audience) {
@@ -72,3 +72,20 @@ module.exports.verify = function(jwtString, secretOrPublicKey, options, callback
7272

7373
callback(null, payload);
7474
};
75+
76+
function JsonWebTokenError(message, error) {
77+
Error.call(this, message);
78+
this.name = 'JsonWebTokenError';
79+
this.message = message;
80+
if (error) this.inner = error;
81+
}
82+
JsonWebTokenError.prototype = Object.create(Error.prototype);
83+
JsonWebTokenError.prototype.constructor = JsonWebTokenError;
84+
85+
var TokenExpiredError = module.exports.TokenExpiredError = function (message, expiredAt) {
86+
JsonWebTokenError.call(this, message);
87+
this.name = 'TokenExpiredError';
88+
this.expiredAt = expiredAt;
89+
}
90+
TokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);
91+
TokenExpiredError.prototype.constructor = TokenExpiredError;

test/jwt.rs.tests.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ describe('RS256', function() {
5656
jwt.verify(token, pub, function(err, decoded) {
5757
assert.isUndefined(decoded);
5858
assert.isNotNull(err);
59+
assert.instanceOf(err, jwt.TokenExpiredError);
60+
assert.instanceOf(err.expiredAt, Date);
5961
done();
6062
});
6163
});

0 commit comments

Comments
 (0)