@codecanva/nest-auth 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -0
- package/dist/auth.constants.d.ts +8 -0
- package/dist/auth.constants.d.ts.map +1 -0
- package/dist/auth.constants.js +11 -0
- package/dist/auth.constants.js.map +1 -0
- package/dist/auth.module.d.ts +6 -0
- package/dist/auth.module.d.ts.map +1 -0
- package/dist/auth.module.js +75 -0
- package/dist/auth.module.js.map +1 -0
- package/dist/auth.service.d.ts +25 -0
- package/dist/auth.service.d.ts.map +1 -0
- package/dist/auth.service.js +108 -0
- package/dist/auth.service.js.map +1 -0
- package/dist/decorators/current-user.decorator.d.ts +3 -0
- package/dist/decorators/current-user.decorator.d.ts.map +1 -0
- package/dist/decorators/current-user.decorator.js +12 -0
- package/dist/decorators/current-user.decorator.js.map +1 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +19 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/public.decorator.d.ts +2 -0
- package/dist/decorators/public.decorator.d.ts.map +1 -0
- package/dist/decorators/public.decorator.js +8 -0
- package/dist/decorators/public.decorator.js.map +1 -0
- package/dist/dto/index.d.ts +3 -0
- package/dist/dto/index.d.ts.map +1 -0
- package/dist/dto/index.js +19 -0
- package/dist/dto/index.js.map +1 -0
- package/dist/dto/login.dto.d.ts +5 -0
- package/dist/dto/login.dto.d.ts.map +1 -0
- package/dist/dto/login.dto.js +28 -0
- package/dist/dto/login.dto.js.map +1 -0
- package/dist/dto/refresh-token.dto.d.ts +4 -0
- package/dist/dto/refresh-token.dto.d.ts.map +1 -0
- package/dist/dto/refresh-token.dto.js +23 -0
- package/dist/dto/refresh-token.dto.js.map +1 -0
- package/dist/errors/auth.errors.d.ts +19 -0
- package/dist/errors/auth.errors.d.ts.map +1 -0
- package/dist/errors/auth.errors.js +41 -0
- package/dist/errors/auth.errors.js.map +1 -0
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +19 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/jwt-auth.guard.d.ts +10 -0
- package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
- package/dist/guards/jwt-auth.guard.js +38 -0
- package/dist/guards/jwt-auth.guard.js.map +1 -0
- package/dist/guards/refresh-auth.guard.d.ts +5 -0
- package/dist/guards/refresh-auth.guard.d.ts.map +1 -0
- package/dist/guards/refresh-auth.guard.js +19 -0
- package/dist/guards/refresh-auth.guard.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/auth-module-options.interface.d.ts +38 -0
- package/dist/interfaces/auth-module-options.interface.d.ts.map +1 -0
- package/dist/interfaces/auth-module-options.interface.js +3 -0
- package/dist/interfaces/auth-module-options.interface.js.map +1 -0
- package/dist/interfaces/auth-user.interface.d.ts +8 -0
- package/dist/interfaces/auth-user.interface.d.ts.map +1 -0
- package/dist/interfaces/auth-user.interface.js +3 -0
- package/dist/interfaces/auth-user.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +6 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +22 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/jwt-payload.interface.d.ts +14 -0
- package/dist/interfaces/jwt-payload.interface.d.ts.map +1 -0
- package/dist/interfaces/jwt-payload.interface.js +3 -0
- package/dist/interfaces/jwt-payload.interface.js.map +1 -0
- package/dist/interfaces/refresh-token-store.interface.d.ts +34 -0
- package/dist/interfaces/refresh-token-store.interface.d.ts.map +1 -0
- package/dist/interfaces/refresh-token-store.interface.js +3 -0
- package/dist/interfaces/refresh-token-store.interface.js.map +1 -0
- package/dist/interfaces/user-validator.interface.d.ts +11 -0
- package/dist/interfaces/user-validator.interface.d.ts.map +1 -0
- package/dist/interfaces/user-validator.interface.js +3 -0
- package/dist/interfaces/user-validator.interface.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/token.service.d.ts +23 -0
- package/dist/services/token.service.d.ts.map +1 -0
- package/dist/services/token.service.js +94 -0
- package/dist/services/token.service.js.map +1 -0
- package/dist/strategies/index.d.ts +3 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/index.js +19 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/strategies/jwt.strategy.d.ts +15 -0
- package/dist/strategies/jwt.strategy.d.ts.map +1 -0
- package/dist/strategies/jwt.strategy.js +50 -0
- package/dist/strategies/jwt.strategy.js.map +1 -0
- package/dist/strategies/refresh.strategy.d.ts +18 -0
- package/dist/strategies/refresh.strategy.d.ts.map +1 -0
- package/dist/strategies/refresh.strategy.js +65 -0
- package/dist/strategies/refresh.strategy.js.map +1 -0
- package/dist/utils/extract-token.d.ts +2 -0
- package/dist/utils/extract-token.d.ts.map +1 -0
- package/dist/utils/extract-token.js +12 -0
- package/dist/utils/extract-token.js.map +1 -0
- package/dist/utils/hash-token.d.ts +3 -0
- package/dist/utils/hash-token.d.ts.map +1 -0
- package/dist/utils/hash-token.js +16 -0
- package/dist/utils/hash-token.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare class AuthError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class InvalidCredentialsError extends AuthError {
|
|
5
|
+
constructor(message?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class InvalidRefreshTokenError extends AuthError {
|
|
8
|
+
constructor(message?: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class RefreshTokenExpiredError extends AuthError {
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class RefreshTokenReuseDetectedError extends AuthError {
|
|
14
|
+
constructor(message?: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class UserNotFoundError extends AuthError {
|
|
17
|
+
constructor(message?: string);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=auth.errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors/auth.errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,uBAAwB,SAAQ,SAAS;gBACxC,OAAO,SAAwB;CAG5C;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,OAAO,SAA0B;CAG9C;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,OAAO,SAA0B;CAG9C;AAED,qBAAa,8BAA+B,SAAQ,SAAS;gBAC/C,OAAO,SAAuD;CAG3E;AAED,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,OAAO,SAAmB;CAGvC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserNotFoundError = exports.RefreshTokenReuseDetectedError = exports.RefreshTokenExpiredError = exports.InvalidRefreshTokenError = exports.InvalidCredentialsError = exports.AuthError = void 0;
|
|
4
|
+
class AuthError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = this.constructor.name;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.AuthError = AuthError;
|
|
11
|
+
class InvalidCredentialsError extends AuthError {
|
|
12
|
+
constructor(message = 'Invalid credentials') {
|
|
13
|
+
super(message);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.InvalidCredentialsError = InvalidCredentialsError;
|
|
17
|
+
class InvalidRefreshTokenError extends AuthError {
|
|
18
|
+
constructor(message = 'Invalid refresh token') {
|
|
19
|
+
super(message);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.InvalidRefreshTokenError = InvalidRefreshTokenError;
|
|
23
|
+
class RefreshTokenExpiredError extends AuthError {
|
|
24
|
+
constructor(message = 'Refresh token expired') {
|
|
25
|
+
super(message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.RefreshTokenExpiredError = RefreshTokenExpiredError;
|
|
29
|
+
class RefreshTokenReuseDetectedError extends AuthError {
|
|
30
|
+
constructor(message = 'Refresh token reuse detected; all sessions revoked') {
|
|
31
|
+
super(message);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.RefreshTokenReuseDetectedError = RefreshTokenReuseDetectedError;
|
|
35
|
+
class UserNotFoundError extends AuthError {
|
|
36
|
+
constructor(message = 'User not found') {
|
|
37
|
+
super(message);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.UserNotFoundError = UserNotFoundError;
|
|
41
|
+
//# sourceMappingURL=auth.errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.errors.js","sourceRoot":"","sources":["../../src/lib/errors/auth.errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AALD,8BAKC;AAED,MAAa,uBAAwB,SAAQ,SAAS;IACpD,YAAY,OAAO,GAAG,qBAAqB;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,0DAIC;AAED,MAAa,wBAAyB,SAAQ,SAAS;IACrD,YAAY,OAAO,GAAG,uBAAuB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,wBAAyB,SAAQ,SAAS;IACrD,YAAY,OAAO,GAAG,uBAAuB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,4DAIC;AAED,MAAa,8BAA+B,SAAQ,SAAS;IAC3D,YAAY,OAAO,GAAG,oDAAoD;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,wEAIC;AAED,MAAa,iBAAkB,SAAQ,SAAS;IAC9C,YAAY,OAAO,GAAG,gBAAgB;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,8CAIC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/guards/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./jwt-auth.guard"), exports);
|
|
18
|
+
__exportStar(require("./refresh-auth.guard"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,uDAAqC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
declare const JwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
|
|
4
|
+
export declare class JwtAuthGuard extends JwtAuthGuard_base {
|
|
5
|
+
private readonly reflector;
|
|
6
|
+
constructor(reflector: Reflector);
|
|
7
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=jwt-auth.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../src/lib/guards/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;;AAIzC,qBACa,YAAa,SAAQ,iBAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAIjD,WAAW,CAAC,OAAO,EAAE,gBAAgB;CAQtC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.JwtAuthGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const passport_1 = require("@nestjs/passport");
|
|
16
|
+
const auth_constants_1 = require("../auth.constants");
|
|
17
|
+
let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)(auth_constants_1.JWT_STRATEGY_NAME) {
|
|
18
|
+
reflector;
|
|
19
|
+
constructor(reflector) {
|
|
20
|
+
super();
|
|
21
|
+
this.reflector = reflector;
|
|
22
|
+
}
|
|
23
|
+
canActivate(context) {
|
|
24
|
+
const isPublic = this.reflector.getAllAndOverride(auth_constants_1.IS_PUBLIC_KEY, [
|
|
25
|
+
context.getHandler(),
|
|
26
|
+
context.getClass(),
|
|
27
|
+
]);
|
|
28
|
+
if (isPublic)
|
|
29
|
+
return true;
|
|
30
|
+
return super.canActivate(context);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.JwtAuthGuard = JwtAuthGuard;
|
|
34
|
+
exports.JwtAuthGuard = JwtAuthGuard = __decorate([
|
|
35
|
+
(0, common_1.Injectable)(),
|
|
36
|
+
__metadata("design:paramtypes", [core_1.Reflector])
|
|
37
|
+
], JwtAuthGuard);
|
|
38
|
+
//# sourceMappingURL=jwt-auth.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../src/lib/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA8D;AAC9D,uCAAyC;AACzC,+CAA6C;AAC7C,sDAAqE;AAG9D,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,kCAAiB,CAAC;IAC/B;IAA7B,YAA6B,SAAoB;QAC/C,KAAK,EAAE,CAAC;QADmB,cAAS,GAAT,SAAS,CAAW;IAEjD,CAAC;IAED,WAAW,CAAC,OAAyB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,8BAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AAbY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAE6B,gBAAS;GADtC,YAAY,CAaxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-auth.guard.d.ts","sourceRoot":"","sources":["../../src/lib/guards/refresh-auth.guard.ts"],"names":[],"mappings":";AAIA,qBACa,gBAAiB,SAAQ,qBAAgC;CAAG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RefreshAuthGuard = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const passport_1 = require("@nestjs/passport");
|
|
12
|
+
const auth_constants_1 = require("../auth.constants");
|
|
13
|
+
let RefreshAuthGuard = class RefreshAuthGuard extends (0, passport_1.AuthGuard)(auth_constants_1.REFRESH_STRATEGY_NAME) {
|
|
14
|
+
};
|
|
15
|
+
exports.RefreshAuthGuard = RefreshAuthGuard;
|
|
16
|
+
exports.RefreshAuthGuard = RefreshAuthGuard = __decorate([
|
|
17
|
+
(0, common_1.Injectable)()
|
|
18
|
+
], RefreshAuthGuard);
|
|
19
|
+
//# sourceMappingURL=refresh-auth.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-auth.guard.js","sourceRoot":"","sources":["../../src/lib/guards/refresh-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA6C;AAC7C,sDAA0D;AAGnD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,IAAA,oBAAS,EAAC,sCAAqB,CAAC;CAAG,CAAA;AAA5D,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAA4C"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { AuthModule } from './auth.module';
|
|
2
|
+
export { AuthService } from './auth.service';
|
|
3
|
+
export type { AuthTokens, LoginResult } from './auth.service';
|
|
4
|
+
export { JWT_STRATEGY_NAME, REFRESH_STRATEGY_NAME, REFRESH_TOKEN_STORE, USER_VALIDATOR, AUTH_MODULE_OPTIONS, IS_PUBLIC_KEY, } from './auth.constants';
|
|
5
|
+
export * from './decorators';
|
|
6
|
+
export * from './guards';
|
|
7
|
+
export * from './dto';
|
|
8
|
+
export * from './interfaces';
|
|
9
|
+
export * from './errors/auth.errors';
|
|
10
|
+
export type { RefreshRequestUser } from './strategies/refresh.strategy';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.IS_PUBLIC_KEY = exports.AUTH_MODULE_OPTIONS = exports.USER_VALIDATOR = exports.REFRESH_TOKEN_STORE = exports.REFRESH_STRATEGY_NAME = exports.JWT_STRATEGY_NAME = exports.AuthService = exports.AuthModule = void 0;
|
|
18
|
+
var auth_module_1 = require("./auth.module");
|
|
19
|
+
Object.defineProperty(exports, "AuthModule", { enumerable: true, get: function () { return auth_module_1.AuthModule; } });
|
|
20
|
+
var auth_service_1 = require("./auth.service");
|
|
21
|
+
Object.defineProperty(exports, "AuthService", { enumerable: true, get: function () { return auth_service_1.AuthService; } });
|
|
22
|
+
var auth_constants_1 = require("./auth.constants");
|
|
23
|
+
Object.defineProperty(exports, "JWT_STRATEGY_NAME", { enumerable: true, get: function () { return auth_constants_1.JWT_STRATEGY_NAME; } });
|
|
24
|
+
Object.defineProperty(exports, "REFRESH_STRATEGY_NAME", { enumerable: true, get: function () { return auth_constants_1.REFRESH_STRATEGY_NAME; } });
|
|
25
|
+
Object.defineProperty(exports, "REFRESH_TOKEN_STORE", { enumerable: true, get: function () { return auth_constants_1.REFRESH_TOKEN_STORE; } });
|
|
26
|
+
Object.defineProperty(exports, "USER_VALIDATOR", { enumerable: true, get: function () { return auth_constants_1.USER_VALIDATOR; } });
|
|
27
|
+
Object.defineProperty(exports, "AUTH_MODULE_OPTIONS", { enumerable: true, get: function () { return auth_constants_1.AUTH_MODULE_OPTIONS; } });
|
|
28
|
+
Object.defineProperty(exports, "IS_PUBLIC_KEY", { enumerable: true, get: function () { return auth_constants_1.IS_PUBLIC_KEY; } });
|
|
29
|
+
__exportStar(require("./decorators"), exports);
|
|
30
|
+
__exportStar(require("./guards"), exports);
|
|
31
|
+
__exportStar(require("./dto"), exports);
|
|
32
|
+
__exportStar(require("./interfaces"), exports);
|
|
33
|
+
__exportStar(require("./errors/auth.errors"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,mDAO0B;AANxB,mHAAA,iBAAiB,OAAA;AACjB,uHAAA,qBAAqB,OAAA;AACrB,qHAAA,mBAAmB,OAAA;AACnB,gHAAA,cAAc,OAAA;AACd,qHAAA,mBAAmB,OAAA;AACnB,+GAAA,aAAa,OAAA;AAGf,+CAA6B;AAC7B,2CAAyB;AACzB,wCAAsB;AACtB,+CAA6B;AAC7B,uDAAqC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ModuleMetadata, Type } from '@nestjs/common';
|
|
2
|
+
import { RefreshTokenStore } from './refresh-token-store.interface';
|
|
3
|
+
import { UserValidator } from './user-validator.interface';
|
|
4
|
+
export interface AuthModuleOptions {
|
|
5
|
+
accessSecret: string;
|
|
6
|
+
refreshSecret: string;
|
|
7
|
+
/** e.g. '15m', '1h', or seconds as a number. Default: '15m' */
|
|
8
|
+
accessTtl?: string | number;
|
|
9
|
+
/** e.g. '30d', '7d'. Default: '30d' */
|
|
10
|
+
refreshTtl?: string | number;
|
|
11
|
+
/** Optional pepper mixed into the token hash so a DB leak alone is not replayable. */
|
|
12
|
+
tokenHashPepper?: string;
|
|
13
|
+
/** JWT clock skew tolerance in seconds. Default: 5 */
|
|
14
|
+
clockTolerance?: number;
|
|
15
|
+
/** JWT issuer claim. Optional. */
|
|
16
|
+
issuer?: string;
|
|
17
|
+
/** JWT audience claim. Optional. */
|
|
18
|
+
audience?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface RefreshTokenStoreProvider {
|
|
21
|
+
useExisting?: Type<RefreshTokenStore>;
|
|
22
|
+
useClass?: Type<RefreshTokenStore>;
|
|
23
|
+
useFactory?: (...args: any[]) => RefreshTokenStore | Promise<RefreshTokenStore>;
|
|
24
|
+
inject?: any[];
|
|
25
|
+
}
|
|
26
|
+
export interface UserValidatorProvider {
|
|
27
|
+
useExisting?: Type<UserValidator>;
|
|
28
|
+
useClass?: Type<UserValidator>;
|
|
29
|
+
useFactory?: (...args: any[]) => UserValidator | Promise<UserValidator>;
|
|
30
|
+
inject?: any[];
|
|
31
|
+
}
|
|
32
|
+
export interface AuthModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
33
|
+
useFactory: (...args: any[]) => AuthModuleOptions | Promise<AuthModuleOptions>;
|
|
34
|
+
inject?: any[];
|
|
35
|
+
store: RefreshTokenStoreProvider;
|
|
36
|
+
validator: UserValidatorProvider;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=auth-module-options.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-module-options.interface.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/auth-module-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,CACX,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IACvC,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,yBAAyB,CAAC;IACjC,SAAS,EAAE,qBAAqB,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-module-options.interface.js","sourceRoot":"","sources":["../../src/lib/interfaces/auth-module-options.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.interface.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/auth-user.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.interface.js","sourceRoot":"","sources":["../../src/lib/interfaces/auth-user.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./auth-user.interface"), exports);
|
|
18
|
+
__exportStar(require("./jwt-payload.interface"), exports);
|
|
19
|
+
__exportStar(require("./refresh-token-store.interface"), exports);
|
|
20
|
+
__exportStar(require("./user-validator.interface"), exports);
|
|
21
|
+
__exportStar(require("./auth-module-options.interface"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,0DAAwC;AACxC,kEAAgD;AAChD,6DAA2C;AAC3C,kEAAgD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface JwtPayload {
|
|
2
|
+
sub: string | number;
|
|
3
|
+
email?: string;
|
|
4
|
+
roles?: string[];
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface RefreshJwtPayload {
|
|
8
|
+
sub: string | number;
|
|
9
|
+
jti: string;
|
|
10
|
+
typ: 'refresh';
|
|
11
|
+
iat?: number;
|
|
12
|
+
exp?: number;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=jwt-payload.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-payload.interface.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/jwt-payload.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,SAAS,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-payload.interface.js","sourceRoot":"","sources":["../../src/lib/interfaces/jwt-payload.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type SessionMetadata = Record<string, unknown>;
|
|
2
|
+
export interface StoredRefreshToken {
|
|
3
|
+
id: string;
|
|
4
|
+
userId: string | number;
|
|
5
|
+
tokenHash: string;
|
|
6
|
+
metadata?: SessionMetadata;
|
|
7
|
+
expiresAt: Date;
|
|
8
|
+
revokedAt?: Date | null;
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateRefreshTokenInput {
|
|
12
|
+
id: string;
|
|
13
|
+
userId: string | number;
|
|
14
|
+
tokenHash: string;
|
|
15
|
+
expiresAt: Date;
|
|
16
|
+
metadata?: SessionMetadata;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pluggable persistence contract for refresh-token sessions. Consumers provide
|
|
20
|
+
* the implementation (TypeORM, Prisma, Mongoose, Redis, etc.).
|
|
21
|
+
*
|
|
22
|
+
* `consume` MUST be atomic: it should mark the row revoked and return it ONLY
|
|
23
|
+
* if it was previously unrevoked AND the supplied hash matches. Implementing
|
|
24
|
+
* this non-atomically opens a window where two concurrent refresh calls both
|
|
25
|
+
* succeed and split the session.
|
|
26
|
+
*/
|
|
27
|
+
export interface RefreshTokenStore {
|
|
28
|
+
create(input: CreateRefreshTokenInput): Promise<StoredRefreshToken>;
|
|
29
|
+
findById(id: string): Promise<StoredRefreshToken | null>;
|
|
30
|
+
consume(id: string, expectedHash: string): Promise<StoredRefreshToken | null>;
|
|
31
|
+
revokeById(id: string): Promise<void>;
|
|
32
|
+
revokeAllForUser(userId: string | number): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=refresh-token-store.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token-store.interface.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/refresh-token-store.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACzD,OAAO,CACL,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token-store.interface.js","sourceRoot":"","sources":["../../src/lib/interfaces/refresh-token-store.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AuthUser } from './auth-user.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Pluggable identity contract. Consumers implement this against their own
|
|
4
|
+
* user store (DB, identity provider, etc.) — the library never reads users
|
|
5
|
+
* directly.
|
|
6
|
+
*/
|
|
7
|
+
export interface UserValidator {
|
|
8
|
+
validateCredentials(email: string, password: string): Promise<AuthUser | null>;
|
|
9
|
+
findById(userId: string | number): Promise<AuthUser | null>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=user-validator.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-validator.interface.d.ts","sourceRoot":"","sources":["../../src/lib/interfaces/user-validator.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB,CACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-validator.interface.js","sourceRoot":"","sources":["../../src/lib/interfaces/user-validator.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./token.service"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { JwtService } from '@nestjs/jwt';
|
|
2
|
+
import type { AuthModuleOptions } from '../interfaces/auth-module-options.interface';
|
|
3
|
+
import type { JwtPayload, RefreshJwtPayload } from '../interfaces/jwt-payload.interface';
|
|
4
|
+
export declare class TokenService {
|
|
5
|
+
private readonly jwt;
|
|
6
|
+
private readonly options;
|
|
7
|
+
constructor(jwt: JwtService, options: AuthModuleOptions);
|
|
8
|
+
signAccessToken(payload: JwtPayload): Promise<string>;
|
|
9
|
+
signRefreshToken(payload: {
|
|
10
|
+
sub: string | number;
|
|
11
|
+
jti: string;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
verifyAccessToken(token: string): Promise<JwtPayload>;
|
|
14
|
+
verifyRefreshToken(token: string): Promise<RefreshJwtPayload>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the configured refresh-token TTL into an absolute Date for store rows.
|
|
17
|
+
* Mirrors `expiresIn` semantics from `jsonwebtoken`: number = seconds, string = vercel/ms.
|
|
18
|
+
*/
|
|
19
|
+
refreshExpiresAt(now?: Date): Date;
|
|
20
|
+
private signOpts;
|
|
21
|
+
private verifyOpts;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=token.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.service.d.ts","sourceRoot":"","sources":["../../src/lib/services/token.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EAGX,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAI7C,qBACa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,GAAG,EAAE,UAAU,EAEf,OAAO,EAAE,iBAAiB;IAG7C,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,gBAAgB,CAAC,OAAO,EAAE;QACxB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC,MAAM,CAAC;IAOnB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI7D;;;OAGG;IACH,gBAAgB,CAAC,GAAG,GAAE,IAAiB,GAAG,IAAI;IAM9C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,UAAU;CASnB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TokenService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
18
|
+
const auth_constants_1 = require("../auth.constants");
|
|
19
|
+
let TokenService = class TokenService {
|
|
20
|
+
jwt;
|
|
21
|
+
options;
|
|
22
|
+
constructor(jwt, options) {
|
|
23
|
+
this.jwt = jwt;
|
|
24
|
+
this.options = options;
|
|
25
|
+
}
|
|
26
|
+
signAccessToken(payload) {
|
|
27
|
+
return this.jwt.signAsync(payload, this.signOpts(this.options.accessSecret, this.options.accessTtl ?? '15m'));
|
|
28
|
+
}
|
|
29
|
+
signRefreshToken(payload) {
|
|
30
|
+
return this.jwt.signAsync({ ...payload, typ: auth_constants_1.REFRESH_TOKEN_TYPE }, this.signOpts(this.options.refreshSecret, this.options.refreshTtl ?? '30d'));
|
|
31
|
+
}
|
|
32
|
+
verifyAccessToken(token) {
|
|
33
|
+
return this.jwt.verifyAsync(token, this.verifyOpts(this.options.accessSecret));
|
|
34
|
+
}
|
|
35
|
+
verifyRefreshToken(token) {
|
|
36
|
+
return this.jwt.verifyAsync(token, this.verifyOpts(this.options.refreshSecret));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolve the configured refresh-token TTL into an absolute Date for store rows.
|
|
40
|
+
* Mirrors `expiresIn` semantics from `jsonwebtoken`: number = seconds, string = vercel/ms.
|
|
41
|
+
*/
|
|
42
|
+
refreshExpiresAt(now = new Date()) {
|
|
43
|
+
const ttl = this.options.refreshTtl ?? '30d';
|
|
44
|
+
const seconds = ttlToSeconds(ttl);
|
|
45
|
+
return new Date(now.getTime() + seconds * 1000);
|
|
46
|
+
}
|
|
47
|
+
signOpts(secret, ttl) {
|
|
48
|
+
const opts = {
|
|
49
|
+
secret,
|
|
50
|
+
expiresIn: ttl,
|
|
51
|
+
};
|
|
52
|
+
if (this.options.issuer)
|
|
53
|
+
opts.issuer = this.options.issuer;
|
|
54
|
+
if (this.options.audience)
|
|
55
|
+
opts.audience = this.options.audience;
|
|
56
|
+
return opts;
|
|
57
|
+
}
|
|
58
|
+
verifyOpts(secret) {
|
|
59
|
+
const opts = {
|
|
60
|
+
secret,
|
|
61
|
+
clockTolerance: this.options.clockTolerance ?? 5,
|
|
62
|
+
};
|
|
63
|
+
if (this.options.issuer)
|
|
64
|
+
opts.issuer = this.options.issuer;
|
|
65
|
+
if (this.options.audience)
|
|
66
|
+
opts.audience = this.options.audience;
|
|
67
|
+
return opts;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.TokenService = TokenService;
|
|
71
|
+
exports.TokenService = TokenService = __decorate([
|
|
72
|
+
(0, common_1.Injectable)(),
|
|
73
|
+
__param(1, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
74
|
+
__metadata("design:paramtypes", [jwt_1.JwtService, Object])
|
|
75
|
+
], TokenService);
|
|
76
|
+
function ttlToSeconds(ttl) {
|
|
77
|
+
if (typeof ttl === 'number')
|
|
78
|
+
return ttl;
|
|
79
|
+
const match = /^(\d+)\s*(s|m|h|d|w)?$/i.exec(ttl.trim());
|
|
80
|
+
if (!match) {
|
|
81
|
+
throw new Error(`Invalid TTL: ${ttl}`);
|
|
82
|
+
}
|
|
83
|
+
const value = parseInt(match[1], 10);
|
|
84
|
+
const unit = (match[2] || 's').toLowerCase();
|
|
85
|
+
const multipliers = {
|
|
86
|
+
s: 1,
|
|
87
|
+
m: 60,
|
|
88
|
+
h: 3600,
|
|
89
|
+
d: 86400,
|
|
90
|
+
w: 604800,
|
|
91
|
+
};
|
|
92
|
+
return value * multipliers[unit];
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=token.service.js.map
|