@nik2208/node-auth 1.0.2
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/LICENSE +21 -0
- package/README.md +636 -0
- package/dist/abstract/base-auth-strategy.abstract.d.ts +7 -0
- package/dist/abstract/base-auth-strategy.abstract.d.ts.map +1 -0
- package/dist/abstract/base-auth-strategy.abstract.js +7 -0
- package/dist/abstract/base-auth-strategy.abstract.js.map +1 -0
- package/dist/abstract/base-oauth-strategy.abstract.d.ts +26 -0
- package/dist/abstract/base-oauth-strategy.abstract.d.ts.map +1 -0
- package/dist/abstract/base-oauth-strategy.abstract.js +11 -0
- package/dist/abstract/base-oauth-strategy.abstract.js.map +1 -0
- package/dist/auth-configurator.d.ts +24 -0
- package/dist/auth-configurator.d.ts.map +1 -0
- package/dist/auth-configurator.js +42 -0
- package/dist/auth-configurator.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/auth-strategy.interface.d.ts +6 -0
- package/dist/interfaces/auth-strategy.interface.d.ts.map +1 -0
- package/dist/interfaces/auth-strategy.interface.js +3 -0
- package/dist/interfaces/auth-strategy.interface.js.map +1 -0
- package/dist/interfaces/token-store.interface.d.ts +10 -0
- package/dist/interfaces/token-store.interface.d.ts.map +1 -0
- package/dist/interfaces/token-store.interface.js +3 -0
- package/dist/interfaces/token-store.interface.js.map +1 -0
- package/dist/interfaces/user-store.interface.d.ts +23 -0
- package/dist/interfaces/user-store.interface.d.ts.map +1 -0
- package/dist/interfaces/user-store.interface.js +3 -0
- package/dist/interfaces/user-store.interface.js.map +1 -0
- package/dist/middleware/auth.middleware.d.ts +12 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +23 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/models/auth-config.model.d.ts +96 -0
- package/dist/models/auth-config.model.d.ts.map +1 -0
- package/dist/models/auth-config.model.js +3 -0
- package/dist/models/auth-config.model.js.map +1 -0
- package/dist/models/errors.d.ts +6 -0
- package/dist/models/errors.d.ts.map +1 -0
- package/dist/models/errors.js +13 -0
- package/dist/models/errors.js.map +1 -0
- package/dist/models/token.model.d.ts +12 -0
- package/dist/models/token.model.d.ts.map +1 -0
- package/dist/models/token.model.js +3 -0
- package/dist/models/token.model.js.map +1 -0
- package/dist/models/user.model.d.ts +18 -0
- package/dist/models/user.model.d.ts.map +1 -0
- package/dist/models/user.model.js +3 -0
- package/dist/models/user.model.js.map +1 -0
- package/dist/router/auth.router.d.ts +13 -0
- package/dist/router/auth.router.d.ts.map +1 -0
- package/dist/router/auth.router.js +329 -0
- package/dist/router/auth.router.js.map +1 -0
- package/dist/services/mailer.service.d.ts +11 -0
- package/dist/services/mailer.service.d.ts.map +1 -0
- package/dist/services/mailer.service.js +138 -0
- package/dist/services/mailer.service.js.map +1 -0
- package/dist/services/password.service.d.ts +5 -0
- package/dist/services/password.service.d.ts.map +1 -0
- package/dist/services/password.service.js +17 -0
- package/dist/services/password.service.js.map +1 -0
- package/dist/services/sms.service.d.ts +14 -0
- package/dist/services/sms.service.d.ts.map +1 -0
- package/dist/services/sms.service.js +51 -0
- package/dist/services/sms.service.js.map +1 -0
- package/dist/services/token.service.d.ts +13 -0
- package/dist/services/token.service.d.ts.map +1 -0
- package/dist/services/token.service.js +78 -0
- package/dist/services/token.service.js.map +1 -0
- package/dist/strategies/local/local.strategy.d.ts +19 -0
- package/dist/strategies/local/local.strategy.d.ts.map +1 -0
- package/dist/strategies/local/local.strategy.js +29 -0
- package/dist/strategies/local/local.strategy.js.map +1 -0
- package/dist/strategies/magic-link/magic-link.strategy.d.ts +8 -0
- package/dist/strategies/magic-link/magic-link.strategy.d.ts.map +1 -0
- package/dist/strategies/magic-link/magic-link.strategy.js +50 -0
- package/dist/strategies/magic-link/magic-link.strategy.js.map +1 -0
- package/dist/strategies/oauth/github.strategy.d.ts +29 -0
- package/dist/strategies/oauth/github.strategy.d.ts.map +1 -0
- package/dist/strategies/oauth/github.strategy.js +69 -0
- package/dist/strategies/oauth/github.strategy.js.map +1 -0
- package/dist/strategies/oauth/google.strategy.d.ts +29 -0
- package/dist/strategies/oauth/google.strategy.d.ts.map +1 -0
- package/dist/strategies/oauth/google.strategy.js +61 -0
- package/dist/strategies/oauth/google.strategy.js.map +1 -0
- package/dist/strategies/sms/sms.strategy.d.ts +7 -0
- package/dist/strategies/sms/sms.strategy.d.ts.map +1 -0
- package/dist/strategies/sms/sms.strategy.js +39 -0
- package/dist/strategies/sms/sms.strategy.js.map +1 -0
- package/dist/strategies/two-factor/totp.strategy.d.ts +12 -0
- package/dist/strategies/two-factor/totp.strategy.d.ts.map +1 -0
- package/dist/strategies/two-factor/totp.strategy.js +32 -0
- package/dist/strategies/two-factor/totp.strategy.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AuthConfig } from '../models/auth-config.model';
|
|
2
|
+
import { BaseUser } from '../models/user.model';
|
|
3
|
+
import { BaseAuthStrategy } from './base-auth-strategy.abstract';
|
|
4
|
+
export declare abstract class BaseOAuthStrategy<TUser extends BaseUser = BaseUser> extends BaseAuthStrategy<{
|
|
5
|
+
code: string;
|
|
6
|
+
state?: string;
|
|
7
|
+
}, TUser> {
|
|
8
|
+
abstract name: string;
|
|
9
|
+
abstract getAuthorizationUrl(state?: string): string;
|
|
10
|
+
abstract handleCallback(code: string, state?: string): Promise<TUser>;
|
|
11
|
+
protected abstract exchangeCodeForTokens(code: string): Promise<{
|
|
12
|
+
accessToken: string;
|
|
13
|
+
idToken?: string;
|
|
14
|
+
}>;
|
|
15
|
+
protected abstract getUserProfile(accessToken: string): Promise<{
|
|
16
|
+
id: string;
|
|
17
|
+
email: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
picture?: string;
|
|
20
|
+
}>;
|
|
21
|
+
authenticate(input: {
|
|
22
|
+
code: string;
|
|
23
|
+
state?: string;
|
|
24
|
+
}, _config: AuthConfig): Promise<TUser>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=base-oauth-strategy.abstract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-oauth-strategy.abstract.d.ts","sourceRoot":"","sources":["../../src/abstract/base-oauth-strategy.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,8BAAsB,iBAAiB,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,gBAAgB,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC;IAC1I,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IACpD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IACrE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1G,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzH,YAAY,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;CAGjG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseOAuthStrategy = void 0;
|
|
4
|
+
const base_auth_strategy_abstract_1 = require("./base-auth-strategy.abstract");
|
|
5
|
+
class BaseOAuthStrategy extends base_auth_strategy_abstract_1.BaseAuthStrategy {
|
|
6
|
+
async authenticate(input, _config) {
|
|
7
|
+
return this.handleCallback(input.code, input.state);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.BaseOAuthStrategy = BaseOAuthStrategy;
|
|
11
|
+
//# sourceMappingURL=base-oauth-strategy.abstract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-oauth-strategy.abstract.js","sourceRoot":"","sources":["../../src/abstract/base-oauth-strategy.abstract.ts"],"names":[],"mappings":";;;AAEA,+EAAiE;AAEjE,MAAsB,iBAAqD,SAAQ,8CAAyD;IAQ1I,KAAK,CAAC,YAAY,CAAC,KAAuC,EAAE,OAAmB;QAC7E,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;CACF;AAXD,8CAWC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Router, RequestHandler } from 'express';
|
|
2
|
+
import { AuthConfig } from './models/auth-config.model';
|
|
3
|
+
import { IUserStore } from './interfaces/user-store.interface';
|
|
4
|
+
import { TokenService } from './services/token.service';
|
|
5
|
+
import { PasswordService } from './services/password.service';
|
|
6
|
+
import { LocalStrategy } from './strategies/local/local.strategy';
|
|
7
|
+
import { GoogleStrategy } from './strategies/oauth/google.strategy';
|
|
8
|
+
import { GithubStrategy } from './strategies/oauth/github.strategy';
|
|
9
|
+
import { RouterOptions } from './router/auth.router';
|
|
10
|
+
export declare class AuthConfigurator {
|
|
11
|
+
private readonly config;
|
|
12
|
+
private readonly userStore;
|
|
13
|
+
private readonly _tokenService;
|
|
14
|
+
private readonly _passwordService;
|
|
15
|
+
constructor(config: AuthConfig, userStore: IUserStore);
|
|
16
|
+
middleware(): RequestHandler;
|
|
17
|
+
router(options?: RouterOptions): Router;
|
|
18
|
+
get tokenService(): TokenService;
|
|
19
|
+
get passwordService(): PasswordService;
|
|
20
|
+
strategy(name: 'local'): LocalStrategy;
|
|
21
|
+
strategy(name: 'google'): GoogleStrategy;
|
|
22
|
+
strategy(name: 'github'): GithubStrategy;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=auth-configurator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-configurator.d.ts","sourceRoot":"","sources":["../src/auth-configurator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAoB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvE,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAGhC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU;IAMxC,UAAU,IAAI,cAAc;IAI5B,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAIvC,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa;IACtC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc;IACxC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc;CAazC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthConfigurator = void 0;
|
|
4
|
+
const token_service_1 = require("./services/token.service");
|
|
5
|
+
const password_service_1 = require("./services/password.service");
|
|
6
|
+
const local_strategy_1 = require("./strategies/local/local.strategy");
|
|
7
|
+
const auth_middleware_1 = require("./middleware/auth.middleware");
|
|
8
|
+
const auth_router_1 = require("./router/auth.router");
|
|
9
|
+
class AuthConfigurator {
|
|
10
|
+
constructor(config, userStore) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.userStore = userStore;
|
|
13
|
+
this._tokenService = new token_service_1.TokenService();
|
|
14
|
+
this._passwordService = new password_service_1.PasswordService();
|
|
15
|
+
}
|
|
16
|
+
middleware() {
|
|
17
|
+
return (0, auth_middleware_1.createAuthMiddleware)(this.config);
|
|
18
|
+
}
|
|
19
|
+
router(options) {
|
|
20
|
+
return (0, auth_router_1.createAuthRouter)(this.userStore, this.config, options);
|
|
21
|
+
}
|
|
22
|
+
get tokenService() {
|
|
23
|
+
return this._tokenService;
|
|
24
|
+
}
|
|
25
|
+
get passwordService() {
|
|
26
|
+
return this._passwordService;
|
|
27
|
+
}
|
|
28
|
+
strategy(name) {
|
|
29
|
+
switch (name) {
|
|
30
|
+
case 'local':
|
|
31
|
+
return new local_strategy_1.LocalStrategy(this.userStore, this._passwordService);
|
|
32
|
+
case 'google':
|
|
33
|
+
throw new Error('GoogleStrategy is abstract - extend it and pass via RouterOptions');
|
|
34
|
+
case 'github':
|
|
35
|
+
throw new Error('GithubStrategy is abstract - extend it and pass via RouterOptions');
|
|
36
|
+
default:
|
|
37
|
+
throw new Error(`Unknown strategy: ${name}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.AuthConfigurator = AuthConfigurator;
|
|
42
|
+
//# sourceMappingURL=auth-configurator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-configurator.js","sourceRoot":"","sources":["../src/auth-configurator.ts"],"names":[],"mappings":";;;AAGA,4DAAwD;AACxD,kEAA8D;AAC9D,sEAAkE;AAGlE,kEAAoE;AACpE,sDAAuE;AAEvE,MAAa,gBAAgB;IAI3B,YACmB,MAAkB,EAClB,SAAqB;QADrB,WAAM,GAAN,MAAM,CAAY;QAClB,cAAS,GAAT,SAAS,CAAY;QAEtC,IAAI,CAAC,aAAa,GAAG,IAAI,4BAAY,EAAE,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,IAAI,kCAAe,EAAE,CAAC;IAChD,CAAC;IAED,UAAU;QACR,OAAO,IAAA,sCAAoB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,OAAuB;QAC5B,OAAO,IAAA,8BAAgB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAKD,QAAQ,CAAC,IAAY;QACnB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,IAAI,8BAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClE,KAAK,QAAQ;gBACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,KAAK,QAAQ;gBACX,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;CACF;AA3CD,4CA2CC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { AuthConfigurator } from './auth-configurator';
|
|
2
|
+
export type { IUserStore } from './interfaces/user-store.interface';
|
|
3
|
+
export type { ITokenStore } from './interfaces/token-store.interface';
|
|
4
|
+
export type { IAuthStrategy } from './interfaces/auth-strategy.interface';
|
|
5
|
+
export type { BaseUser } from './models/user.model';
|
|
6
|
+
export type { TokenPair, AccessTokenPayload } from './models/token.model';
|
|
7
|
+
export type { AuthConfig } from './models/auth-config.model';
|
|
8
|
+
export { AuthError } from './models/errors';
|
|
9
|
+
export { BaseAuthStrategy } from './abstract/base-auth-strategy.abstract';
|
|
10
|
+
export { BaseOAuthStrategy } from './abstract/base-oauth-strategy.abstract';
|
|
11
|
+
export { LocalStrategy } from './strategies/local/local.strategy';
|
|
12
|
+
export { GoogleStrategy } from './strategies/oauth/google.strategy';
|
|
13
|
+
export { GithubStrategy } from './strategies/oauth/github.strategy';
|
|
14
|
+
export { MagicLinkStrategy } from './strategies/magic-link/magic-link.strategy';
|
|
15
|
+
export { SmsStrategy } from './strategies/sms/sms.strategy';
|
|
16
|
+
export { TotpStrategy } from './strategies/two-factor/totp.strategy';
|
|
17
|
+
export { TokenService } from './services/token.service';
|
|
18
|
+
export { PasswordService } from './services/password.service';
|
|
19
|
+
export { SmsService } from './services/sms.service';
|
|
20
|
+
export { MailerService } from './services/mailer.service';
|
|
21
|
+
export type { MailerConfig } from './models/auth-config.model';
|
|
22
|
+
export { createAuthMiddleware } from './middleware/auth.middleware';
|
|
23
|
+
export { createAuthRouter } from './router/auth.router';
|
|
24
|
+
export type { RouterOptions } from './router/auth.router';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,YAAY,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAuthRouter = exports.createAuthMiddleware = exports.MailerService = exports.SmsService = exports.PasswordService = exports.TokenService = exports.TotpStrategy = exports.SmsStrategy = exports.MagicLinkStrategy = exports.GithubStrategy = exports.GoogleStrategy = exports.LocalStrategy = exports.BaseOAuthStrategy = exports.BaseAuthStrategy = exports.AuthError = exports.AuthConfigurator = void 0;
|
|
4
|
+
var auth_configurator_1 = require("./auth-configurator");
|
|
5
|
+
Object.defineProperty(exports, "AuthConfigurator", { enumerable: true, get: function () { return auth_configurator_1.AuthConfigurator; } });
|
|
6
|
+
var errors_1 = require("./models/errors");
|
|
7
|
+
Object.defineProperty(exports, "AuthError", { enumerable: true, get: function () { return errors_1.AuthError; } });
|
|
8
|
+
var base_auth_strategy_abstract_1 = require("./abstract/base-auth-strategy.abstract");
|
|
9
|
+
Object.defineProperty(exports, "BaseAuthStrategy", { enumerable: true, get: function () { return base_auth_strategy_abstract_1.BaseAuthStrategy; } });
|
|
10
|
+
var base_oauth_strategy_abstract_1 = require("./abstract/base-oauth-strategy.abstract");
|
|
11
|
+
Object.defineProperty(exports, "BaseOAuthStrategy", { enumerable: true, get: function () { return base_oauth_strategy_abstract_1.BaseOAuthStrategy; } });
|
|
12
|
+
var local_strategy_1 = require("./strategies/local/local.strategy");
|
|
13
|
+
Object.defineProperty(exports, "LocalStrategy", { enumerable: true, get: function () { return local_strategy_1.LocalStrategy; } });
|
|
14
|
+
var google_strategy_1 = require("./strategies/oauth/google.strategy");
|
|
15
|
+
Object.defineProperty(exports, "GoogleStrategy", { enumerable: true, get: function () { return google_strategy_1.GoogleStrategy; } });
|
|
16
|
+
var github_strategy_1 = require("./strategies/oauth/github.strategy");
|
|
17
|
+
Object.defineProperty(exports, "GithubStrategy", { enumerable: true, get: function () { return github_strategy_1.GithubStrategy; } });
|
|
18
|
+
var magic_link_strategy_1 = require("./strategies/magic-link/magic-link.strategy");
|
|
19
|
+
Object.defineProperty(exports, "MagicLinkStrategy", { enumerable: true, get: function () { return magic_link_strategy_1.MagicLinkStrategy; } });
|
|
20
|
+
var sms_strategy_1 = require("./strategies/sms/sms.strategy");
|
|
21
|
+
Object.defineProperty(exports, "SmsStrategy", { enumerable: true, get: function () { return sms_strategy_1.SmsStrategy; } });
|
|
22
|
+
var totp_strategy_1 = require("./strategies/two-factor/totp.strategy");
|
|
23
|
+
Object.defineProperty(exports, "TotpStrategy", { enumerable: true, get: function () { return totp_strategy_1.TotpStrategy; } });
|
|
24
|
+
var token_service_1 = require("./services/token.service");
|
|
25
|
+
Object.defineProperty(exports, "TokenService", { enumerable: true, get: function () { return token_service_1.TokenService; } });
|
|
26
|
+
var password_service_1 = require("./services/password.service");
|
|
27
|
+
Object.defineProperty(exports, "PasswordService", { enumerable: true, get: function () { return password_service_1.PasswordService; } });
|
|
28
|
+
var sms_service_1 = require("./services/sms.service");
|
|
29
|
+
Object.defineProperty(exports, "SmsService", { enumerable: true, get: function () { return sms_service_1.SmsService; } });
|
|
30
|
+
var mailer_service_1 = require("./services/mailer.service");
|
|
31
|
+
Object.defineProperty(exports, "MailerService", { enumerable: true, get: function () { return mailer_service_1.MailerService; } });
|
|
32
|
+
var auth_middleware_1 = require("./middleware/auth.middleware");
|
|
33
|
+
Object.defineProperty(exports, "createAuthMiddleware", { enumerable: true, get: function () { return auth_middleware_1.createAuthMiddleware; } });
|
|
34
|
+
var auth_router_1 = require("./router/auth.router");
|
|
35
|
+
Object.defineProperty(exports, "createAuthRouter", { enumerable: true, get: function () { return auth_router_1.createAuthRouter; } });
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AASzB,0CAA4C;AAAnC,mGAAA,SAAS,OAAA;AAElB,sFAA0E;AAAjE,+HAAA,gBAAgB,OAAA;AACzB,wFAA4E;AAAnE,iIAAA,iBAAiB,OAAA;AAE1B,oEAAkE;AAAzD,+GAAA,aAAa,OAAA;AACtB,sEAAoE;AAA3D,iHAAA,cAAc,OAAA;AACvB,sEAAoE;AAA3D,iHAAA,cAAc,OAAA;AACvB,mFAAgF;AAAvE,wHAAA,iBAAiB,OAAA;AAC1B,8DAA4D;AAAnD,2GAAA,WAAW,OAAA;AACpB,uEAAqE;AAA5D,6GAAA,YAAY,OAAA;AAErB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,sDAAoD;AAA3C,yGAAA,UAAU,OAAA;AACnB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AAGtB,gEAAoE;AAA3D,uHAAA,oBAAoB,OAAA;AAC7B,oDAAwD;AAA/C,+GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AuthConfig } from '../models/auth-config.model';
|
|
2
|
+
export interface IAuthStrategy<TInput = unknown, TOutput = unknown> {
|
|
3
|
+
name: string;
|
|
4
|
+
authenticate(input: TInput, config: AuthConfig): Promise<TOutput>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=auth-strategy.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/auth-strategy.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,WAAW,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy.interface.js","sourceRoot":"","sources":["../../src/interfaces/auth-strategy.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ITokenStore {
|
|
2
|
+
saveRefreshToken(userId: string, token: string, expiry: Date): Promise<void>;
|
|
3
|
+
findRefreshToken(token: string): Promise<{
|
|
4
|
+
userId: string;
|
|
5
|
+
expiry: Date;
|
|
6
|
+
} | null>;
|
|
7
|
+
deleteRefreshToken(token: string): Promise<void>;
|
|
8
|
+
deleteAllUserTokens(userId: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=token-store.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/token-store.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAClF,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.interface.js","sourceRoot":"","sources":["../../src/interfaces/token-store.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseUser } from '../models/user.model';
|
|
2
|
+
export interface IUserStore<U extends BaseUser = BaseUser> {
|
|
3
|
+
findByEmail(email: string): Promise<U | null>;
|
|
4
|
+
findById(id: string): Promise<U | null>;
|
|
5
|
+
create(data: Partial<U>): Promise<U>;
|
|
6
|
+
updateRefreshToken(userId: string, token: string | null, expiry: Date | null): Promise<void>;
|
|
7
|
+
updateResetToken(userId: string, token: string | null, expiry: Date | null): Promise<void>;
|
|
8
|
+
updatePassword(userId: string, hashedPassword: string): Promise<void>;
|
|
9
|
+
updateTotpSecret(userId: string, secret: string | null): Promise<void>;
|
|
10
|
+
updateMagicLinkToken(userId: string, token: string | null, expiry: Date | null): Promise<void>;
|
|
11
|
+
updateSmsCode(userId: string, code: string | null, expiry: Date | null): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Find a user by their password-reset token.
|
|
14
|
+
* Required to support the POST /auth/reset-password endpoint.
|
|
15
|
+
*/
|
|
16
|
+
findByResetToken?(token: string): Promise<U | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Find a user by their magic-link token.
|
|
19
|
+
* Required to support the POST /auth/magic-link/verify endpoint.
|
|
20
|
+
*/
|
|
21
|
+
findByMagicLinkToken?(token: string): Promise<U | null>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=user-store.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-store.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/user-store.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF;;;OAGG;IACH,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEpD;;;OAGG;IACH,oBAAoB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-store.interface.js","sourceRoot":"","sources":["../../src/interfaces/user-store.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RequestHandler } from 'express';
|
|
2
|
+
import { AuthConfig } from '../models/auth-config.model';
|
|
3
|
+
import { AccessTokenPayload } from '../models/token.model';
|
|
4
|
+
declare global {
|
|
5
|
+
namespace Express {
|
|
6
|
+
interface Request {
|
|
7
|
+
user?: AccessTokenPayload;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare function createAuthMiddleware(config: AuthConfig): RequestHandler;
|
|
12
|
+
//# sourceMappingURL=auth.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE,kBAAkB,CAAC;SAC3B;KACF;CACF;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAevE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAuthMiddleware = createAuthMiddleware;
|
|
4
|
+
const token_service_1 = require("../services/token.service");
|
|
5
|
+
const tokenService = new token_service_1.TokenService();
|
|
6
|
+
function createAuthMiddleware(config) {
|
|
7
|
+
return (req, res, next) => {
|
|
8
|
+
const token = tokenService.extractTokenFromCookie(req, 'accessToken');
|
|
9
|
+
if (!token) {
|
|
10
|
+
res.status(403).json({ error: 'No access token provided' });
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const payload = tokenService.verifyAccessToken(token, config);
|
|
15
|
+
req.user = payload;
|
|
16
|
+
next();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
res.status(403).json({ error: 'Invalid or expired access token' });
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=auth.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.middleware.js","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":";;AAeA,oDAeC;AA3BD,6DAAyD;AAUzD,MAAM,YAAY,GAAG,IAAI,4BAAY,EAAE,CAAC;AAExC,SAAgB,oBAAoB,CAAC,MAAkB;IACrD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;YACnB,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for the built-in HTTP-based mailer transport.
|
|
3
|
+
*
|
|
4
|
+
* The mailer makes a POST request to `endpoint` with a JSON body:
|
|
5
|
+
* ```
|
|
6
|
+
* POST {endpoint}
|
|
7
|
+
* X-API-Key: {apiKey}
|
|
8
|
+
* Content-Type: application/json
|
|
9
|
+
*
|
|
10
|
+
* { "to": "...", "subject": "...", "html": "...", "text": "...", "from": "...", "fromName": "..." }
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* If you prefer to control email sending yourself, omit `mailer` and use
|
|
14
|
+
* the `sendMagicLink`, `sendPasswordReset`, and `sendWelcome` callbacks instead.
|
|
15
|
+
*/
|
|
16
|
+
export interface MailerConfig {
|
|
17
|
+
/** Full URL of the HTTP mailer endpoint (receives a POST with JSON body). */
|
|
18
|
+
endpoint: string;
|
|
19
|
+
/** API key sent as the `X-API-Key` header. */
|
|
20
|
+
apiKey: string;
|
|
21
|
+
/** Sender email address. */
|
|
22
|
+
from: string;
|
|
23
|
+
/** Sender display name (optional). */
|
|
24
|
+
fromName?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Default language for built-in email templates.
|
|
27
|
+
* Supported: `'en'` (default) | `'it'`.
|
|
28
|
+
* Can be overridden per-request via `emailLang` in the request body.
|
|
29
|
+
*/
|
|
30
|
+
defaultLang?: 'en' | 'it';
|
|
31
|
+
}
|
|
32
|
+
export interface AuthConfig {
|
|
33
|
+
accessTokenSecret: string;
|
|
34
|
+
refreshTokenSecret: string;
|
|
35
|
+
accessTokenExpiresIn?: string;
|
|
36
|
+
refreshTokenExpiresIn?: string;
|
|
37
|
+
cookieOptions?: {
|
|
38
|
+
secure?: boolean;
|
|
39
|
+
sameSite?: 'strict' | 'lax' | 'none';
|
|
40
|
+
domain?: string;
|
|
41
|
+
};
|
|
42
|
+
bcryptSaltRounds?: number;
|
|
43
|
+
sms?: {
|
|
44
|
+
endpoint: string;
|
|
45
|
+
apiKey: string;
|
|
46
|
+
username: string;
|
|
47
|
+
password: string;
|
|
48
|
+
codeExpiresInMinutes?: number;
|
|
49
|
+
};
|
|
50
|
+
email?: {
|
|
51
|
+
/**
|
|
52
|
+
* Base URL of your site, used to build reset / magic-link URLs.
|
|
53
|
+
* Example: `'https://yourapp.com'`
|
|
54
|
+
*/
|
|
55
|
+
siteUrl?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Concrete HTTP mailer transport configuration.
|
|
58
|
+
* When set, the library sends emails automatically using the built-in
|
|
59
|
+
* templates (password reset, magic link, welcome) via HTTP POST.
|
|
60
|
+
* Callback overrides below always take precedence over the mailer transport.
|
|
61
|
+
*/
|
|
62
|
+
mailer?: MailerConfig;
|
|
63
|
+
/**
|
|
64
|
+
* Override: custom magic-link email sender.
|
|
65
|
+
* When provided, this callback is used instead of `mailer`.
|
|
66
|
+
*/
|
|
67
|
+
sendMagicLink?: (to: string, token: string, link: string, lang?: string) => Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Override: custom password-reset email sender.
|
|
70
|
+
* When provided, this callback is used instead of `mailer`.
|
|
71
|
+
*/
|
|
72
|
+
sendPasswordReset?: (to: string, token: string, link: string, lang?: string) => Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Override: custom welcome email sender.
|
|
75
|
+
* When provided, this callback is used instead of `mailer`.
|
|
76
|
+
*/
|
|
77
|
+
sendWelcome?: (to: string, data: Record<string, unknown>, lang?: string) => Promise<void>;
|
|
78
|
+
};
|
|
79
|
+
oauth?: {
|
|
80
|
+
google?: {
|
|
81
|
+
clientId: string;
|
|
82
|
+
clientSecret: string;
|
|
83
|
+
callbackUrl: string;
|
|
84
|
+
projectId?: string;
|
|
85
|
+
};
|
|
86
|
+
github?: {
|
|
87
|
+
clientId: string;
|
|
88
|
+
clientSecret: string;
|
|
89
|
+
callbackUrl: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
twoFactor?: {
|
|
93
|
+
appName?: string;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=auth-config.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-config.model.d.ts","sourceRoot":"","sources":["../../src/models/auth-config.model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;;;WAKG;QACH,MAAM,CAAC,EAAE,YAAY,CAAC;QAEtB;;;WAGG;QACH,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1F;;;WAGG;QACH,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9F;;;WAGG;QACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3F,CAAC;IACF,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-config.model.js","sourceRoot":"","sources":["../../src/models/auth-config.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;aAGhB,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,MAAM;gBAFlC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAY;CAK3C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthError = void 0;
|
|
4
|
+
class AuthError extends Error {
|
|
5
|
+
constructor(message, code, statusCode = 401) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.statusCode = statusCode;
|
|
9
|
+
this.name = 'AuthError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.AuthError = AuthError;
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAU,SAAQ,KAAK;IAClC,YACE,OAAe,EACC,IAAY,EACZ,aAAqB,GAAG;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QAGxC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AATD,8BASC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.model.d.ts","sourceRoot":"","sources":["../../src/models/token.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.model.js","sourceRoot":"","sources":["../../src/models/token.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface BaseUser {
|
|
2
|
+
id: string;
|
|
3
|
+
email: string;
|
|
4
|
+
password?: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
refreshToken?: string | null;
|
|
7
|
+
refreshTokenExpiry?: Date | null;
|
|
8
|
+
resetToken?: string | null;
|
|
9
|
+
resetTokenExpiry?: Date | null;
|
|
10
|
+
totpSecret?: string | null;
|
|
11
|
+
isTotpEnabled?: boolean;
|
|
12
|
+
magicLinkToken?: string | null;
|
|
13
|
+
magicLinkTokenExpiry?: Date | null;
|
|
14
|
+
smsCode?: string | null;
|
|
15
|
+
smsCodeExpiry?: Date | null;
|
|
16
|
+
phoneNumber?: string | null;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=user.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.model.d.ts","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.model.js","sourceRoot":"","sources":["../../src/models/user.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Router, RequestHandler } from 'express';
|
|
2
|
+
import { IUserStore } from '../interfaces/user-store.interface';
|
|
3
|
+
import { AuthConfig } from '../models/auth-config.model';
|
|
4
|
+
import { GoogleStrategy } from '../strategies/oauth/google.strategy';
|
|
5
|
+
import { GithubStrategy } from '../strategies/oauth/github.strategy';
|
|
6
|
+
export interface RouterOptions {
|
|
7
|
+
googleStrategy?: GoogleStrategy;
|
|
8
|
+
githubStrategy?: GithubStrategy;
|
|
9
|
+
/** Optional rate limiter middleware applied to sensitive auth endpoints (login, refresh, password reset, etc.). */
|
|
10
|
+
rateLimiter?: RequestHandler;
|
|
11
|
+
}
|
|
12
|
+
export declare function createAuthRouter(userStore: IUserStore, config: AuthConfig, options?: RouterOptions): Router;
|
|
13
|
+
//# sourceMappingURL=auth.router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.router.d.ts","sourceRoot":"","sources":["../../src/router/auth.router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,cAAc,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAIrE,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mHAAmH;IACnH,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAgBD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAsUR"}
|