@warlock.js/auth 4.0.5 → 4.0.10
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/cjs/commands/auth-cleanup-command.d.ts +10 -0
- package/cjs/commands/auth-cleanup-command.d.ts.map +1 -0
- package/cjs/commands/auth-cleanup-command.js +29 -0
- package/cjs/commands/auth-cleanup-command.js.map +1 -0
- package/cjs/commands/jwt-secret-generator-command.d.ts.map +1 -1
- package/cjs/commands/jwt-secret-generator-command.js +5 -1
- package/cjs/commands/jwt-secret-generator-command.js.map +1 -1
- package/cjs/contracts/types.d.ts +100 -1
- package/cjs/contracts/types.d.ts.map +1 -1
- package/cjs/contracts/types.js +20 -0
- package/cjs/contracts/types.js.map +1 -0
- package/cjs/index.d.ts +2 -1
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +1 -1
- package/cjs/middleware/auth.middleware.d.ts.map +1 -1
- package/cjs/middleware/auth.middleware.js +14 -37
- package/cjs/middleware/auth.middleware.js.map +1 -1
- package/cjs/models/auth.d.ts +24 -2
- package/cjs/models/auth.d.ts.map +1 -1
- package/cjs/models/auth.js +39 -40
- package/cjs/models/auth.js.map +1 -1
- package/cjs/models/casts/cast-password.d.ts.map +1 -1
- package/cjs/models/casts/cast-password.js +2 -2
- package/cjs/models/casts/cast-password.js.map +1 -1
- package/cjs/models/index.d.ts +1 -1
- package/cjs/models/index.d.ts.map +1 -1
- package/cjs/models/refresh-token/index.d.ts +2 -0
- package/cjs/models/refresh-token/index.d.ts.map +1 -0
- package/cjs/models/refresh-token/migration.d.ts.map +1 -0
- package/cjs/models/refresh-token/refresh-token.d.ts +32 -0
- package/cjs/models/refresh-token/refresh-token.d.ts.map +1 -0
- package/cjs/models/refresh-token/refresh-token.js +52 -0
- package/cjs/models/refresh-token/refresh-token.js.map +1 -0
- package/cjs/services/auth-events.d.ts +84 -0
- package/cjs/services/auth-events.d.ts.map +1 -0
- package/cjs/services/auth-events.js +65 -0
- package/cjs/services/auth-events.js.map +1 -0
- package/cjs/services/auth.service.d.ts +78 -0
- package/cjs/services/auth.service.d.ts.map +1 -0
- package/cjs/services/auth.service.js +265 -0
- package/cjs/services/auth.service.js.map +1 -0
- package/cjs/services/generate-jwt-secret.d.ts.map +1 -1
- package/cjs/services/generate-jwt-secret.js +4 -4
- package/cjs/services/generate-jwt-secret.js.map +1 -1
- package/cjs/services/index.d.ts +2 -1
- package/cjs/services/index.d.ts.map +1 -1
- package/cjs/services/jwt.d.ts +2 -2
- package/cjs/services/jwt.d.ts.map +1 -1
- package/cjs/services/jwt.js +4 -4
- package/cjs/services/jwt.js.map +1 -1
- package/cjs/utils/auth-error-codes.d.ts +18 -0
- package/cjs/utils/auth-error-codes.d.ts.map +1 -0
- package/cjs/utils/auth-error-codes.js +18 -0
- package/cjs/utils/auth-error-codes.js.map +1 -0
- package/cjs/utils/duration.d.ts +45 -0
- package/cjs/utils/duration.d.ts.map +1 -0
- package/cjs/utils/duration.js +93 -0
- package/cjs/utils/duration.js.map +1 -0
- package/cjs/utils/index.d.ts +3 -0
- package/cjs/utils/index.d.ts.map +1 -0
- package/esm/commands/auth-cleanup-command.d.ts +10 -0
- package/esm/commands/auth-cleanup-command.d.ts.map +1 -0
- package/esm/commands/auth-cleanup-command.js +29 -0
- package/esm/commands/auth-cleanup-command.js.map +1 -0
- package/esm/commands/jwt-secret-generator-command.d.ts.map +1 -1
- package/esm/commands/jwt-secret-generator-command.js +5 -1
- package/esm/commands/jwt-secret-generator-command.js.map +1 -1
- package/esm/contracts/types.d.ts +100 -1
- package/esm/contracts/types.d.ts.map +1 -1
- package/esm/contracts/types.js +20 -0
- package/esm/contracts/types.js.map +1 -0
- package/esm/index.d.ts +2 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -1
- package/esm/middleware/auth.middleware.d.ts.map +1 -1
- package/esm/middleware/auth.middleware.js +14 -37
- package/esm/middleware/auth.middleware.js.map +1 -1
- package/esm/models/auth.d.ts +24 -2
- package/esm/models/auth.d.ts.map +1 -1
- package/esm/models/auth.js +38 -39
- package/esm/models/auth.js.map +1 -1
- package/esm/models/casts/cast-password.d.ts.map +1 -1
- package/esm/models/casts/cast-password.js +2 -2
- package/esm/models/casts/cast-password.js.map +1 -1
- package/esm/models/index.d.ts +1 -1
- package/esm/models/index.d.ts.map +1 -1
- package/esm/models/refresh-token/index.d.ts +2 -0
- package/esm/models/refresh-token/index.d.ts.map +1 -0
- package/esm/models/refresh-token/migration.d.ts.map +1 -0
- package/esm/models/refresh-token/refresh-token.d.ts +32 -0
- package/esm/models/refresh-token/refresh-token.d.ts.map +1 -0
- package/esm/models/refresh-token/refresh-token.js +52 -0
- package/esm/models/refresh-token/refresh-token.js.map +1 -0
- package/esm/services/auth-events.d.ts +84 -0
- package/esm/services/auth-events.d.ts.map +1 -0
- package/esm/services/auth-events.js +65 -0
- package/esm/services/auth-events.js.map +1 -0
- package/esm/services/auth.service.d.ts +78 -0
- package/esm/services/auth.service.d.ts.map +1 -0
- package/esm/services/auth.service.js +265 -0
- package/esm/services/auth.service.js.map +1 -0
- package/esm/services/generate-jwt-secret.d.ts.map +1 -1
- package/esm/services/generate-jwt-secret.js +5 -5
- package/esm/services/generate-jwt-secret.js.map +1 -1
- package/esm/services/index.d.ts +2 -1
- package/esm/services/index.d.ts.map +1 -1
- package/esm/services/jwt.d.ts +2 -2
- package/esm/services/jwt.d.ts.map +1 -1
- package/esm/services/jwt.js +4 -4
- package/esm/services/jwt.js.map +1 -1
- package/esm/utils/auth-error-codes.d.ts +18 -0
- package/esm/utils/auth-error-codes.d.ts.map +1 -0
- package/esm/utils/auth-error-codes.js +18 -0
- package/esm/utils/auth-error-codes.js.map +1 -0
- package/esm/utils/duration.d.ts +45 -0
- package/esm/utils/duration.d.ts.map +1 -0
- package/esm/utils/duration.js +93 -0
- package/esm/utils/duration.js.map +1 -0
- package/esm/utils/index.d.ts +3 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/package.json +12 -9
- package/cjs/commands/index.d.ts +0 -2
- package/cjs/commands/index.d.ts.map +0 -1
- package/cjs/controllers/guest-login.d.ts +0 -3
- package/cjs/controllers/guest-login.d.ts.map +0 -1
- package/cjs/controllers/guest-login.js +0 -5
- package/cjs/controllers/guest-login.js.map +0 -1
- package/cjs/controllers/index.d.ts +0 -2
- package/cjs/controllers/index.d.ts.map +0 -1
- package/cjs/middleware/auth-middleware.d.ts +0 -2
- package/cjs/middleware/auth-middleware.d.ts.map +0 -1
- package/cjs/models/guest/guest.d.ts +0 -26
- package/cjs/models/guest/guest.d.ts.map +0 -1
- package/cjs/models/guest/guest.js +0 -39
- package/cjs/models/guest/guest.js.map +0 -1
- package/cjs/models/guest/index.d.ts +0 -3
- package/cjs/models/guest/index.d.ts.map +0 -1
- package/cjs/models/guest/migration.d.ts.map +0 -1
- package/cjs/models/guest/migration.js +0 -10
- package/cjs/models/guest/migration.js.map +0 -1
- package/cjs/services/generate-guest-token.d.ts +0 -2
- package/cjs/services/generate-guest-token.d.ts.map +0 -1
- package/cjs/services/generate-guest-token.js +0 -11
- package/cjs/services/generate-guest-token.js.map +0 -1
- package/esm/commands/index.d.ts +0 -2
- package/esm/commands/index.d.ts.map +0 -1
- package/esm/controllers/guest-login.d.ts +0 -3
- package/esm/controllers/guest-login.d.ts.map +0 -1
- package/esm/controllers/guest-login.js +0 -5
- package/esm/controllers/guest-login.js.map +0 -1
- package/esm/controllers/index.d.ts +0 -2
- package/esm/controllers/index.d.ts.map +0 -1
- package/esm/middleware/auth-middleware.d.ts +0 -2
- package/esm/middleware/auth-middleware.d.ts.map +0 -1
- package/esm/models/guest/guest.d.ts +0 -26
- package/esm/models/guest/guest.d.ts.map +0 -1
- package/esm/models/guest/guest.js +0 -39
- package/esm/models/guest/guest.js.map +0 -1
- package/esm/models/guest/index.d.ts +0 -3
- package/esm/models/guest/index.d.ts.map +0 -1
- package/esm/models/guest/migration.d.ts.map +0 -1
- package/esm/models/guest/migration.js +0 -10
- package/esm/models/guest/migration.js.map +0 -1
- package/esm/services/generate-guest-token.d.ts +0 -2
- package/esm/services/generate-guest-token.d.ts.map +0 -1
- package/esm/services/generate-guest-token.js +0 -11
- package/esm/services/generate-guest-token.js.map +0 -1
- /package/cjs/models/{guest → refresh-token}/migration.d.ts +0 -0
- /package/esm/models/{guest → refresh-token}/migration.d.ts +0 -0
package/esm/models/auth.d.ts
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
import type { ChildModel } from "@warlock.js/cascade";
|
|
2
2
|
import { Model } from "@warlock.js/cascade";
|
|
3
|
+
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
4
|
+
import type { RefreshToken } from "./refresh-token/refresh-token";
|
|
3
5
|
export declare abstract class Auth extends Model {
|
|
4
6
|
/**
|
|
5
7
|
* Get user type
|
|
6
8
|
*/
|
|
7
9
|
abstract get userType(): string;
|
|
8
10
|
/**
|
|
9
|
-
*
|
|
11
|
+
* Get access token payload
|
|
12
|
+
*/
|
|
13
|
+
accessTokenPayload(): any;
|
|
14
|
+
/**
|
|
15
|
+
* Create both access and refresh tokens
|
|
16
|
+
*/
|
|
17
|
+
createTokenPair(deviceInfo?: DeviceInfo): Promise<TokenPair>;
|
|
18
|
+
/**
|
|
19
|
+
* Generate access token
|
|
10
20
|
*/
|
|
11
21
|
generateAccessToken(data?: any): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate refresh token
|
|
24
|
+
*/
|
|
25
|
+
generateRefreshToken(deviceInfo?: DeviceInfo): Promise<RefreshToken>;
|
|
12
26
|
/**
|
|
13
27
|
* Remove current access token
|
|
14
28
|
*/
|
|
15
29
|
removeAccessToken(token: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Revoke all tokens (logout from all devices)
|
|
32
|
+
*/
|
|
33
|
+
revokeAllTokens(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Get active sessions
|
|
36
|
+
*/
|
|
37
|
+
activeSessions(): Promise<RefreshToken[]>;
|
|
16
38
|
/**
|
|
17
39
|
* Attempt to login the user
|
|
18
40
|
*/
|
|
@@ -20,6 +42,6 @@ export declare abstract class Auth extends Model {
|
|
|
20
42
|
/**
|
|
21
43
|
* Confirm password
|
|
22
44
|
*/
|
|
23
|
-
confirmPassword(password: string):
|
|
45
|
+
confirmPassword(password: string): boolean;
|
|
24
46
|
}
|
|
25
47
|
//# sourceMappingURL=auth.d.ts.map
|
package/esm/models/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/models/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/models/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,8BAAsB,IAAK,SAAQ,KAAK;IACtC;;OAEG;IACH,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;OAEG;IACI,kBAAkB;IAMzB;;OAEG;IACU,eAAe,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzE;;OAEG;IACU,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D;;OAEG;IACU,oBAAoB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjF;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAItD;;OAEG;WACiB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIjF;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGlD"}
|
package/esm/models/auth.js
CHANGED
|
@@ -1,59 +1,58 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {Model}from'@warlock.js/cascade';import'@mongez/events';import {authService}from'../services/auth.service.js';import'@mongez/fs';import'@mongez/reinforcements';import'@warlock.js/core';import'@warlock.js/logger';import'fast-jwt';class Auth extends Model {
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Get access token payload
|
|
4
|
+
*/
|
|
5
|
+
accessTokenPayload() {
|
|
6
|
+
// Dynamically import to avoid circular dependency
|
|
7
|
+
const { authService } = require("../services/auth.service");
|
|
8
|
+
return authService.buildAccessTokenPayload(this);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create both access and refresh tokens
|
|
12
|
+
*/
|
|
13
|
+
async createTokenPair(deviceInfo) {
|
|
14
|
+
return authService.createTokenPair(this, deviceInfo);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate access token
|
|
4
18
|
*/
|
|
5
19
|
async generateAccessToken(data) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
userType: this.userType,
|
|
14
|
-
createdAt: Date.now(),
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
// use our own jwt generator to generate a token for the guest
|
|
18
|
-
const token = await jwt.generate(data);
|
|
19
|
-
// store token and the auth model data in the access token model
|
|
20
|
-
// note that we didn't make it sync because we don't want to wait for the token to be stored in the database
|
|
21
|
-
// as nothing depends on it
|
|
22
|
-
AccessToken.create({
|
|
23
|
-
token,
|
|
24
|
-
user: data,
|
|
25
|
-
});
|
|
26
|
-
return token;
|
|
20
|
+
return authService.generateAccessToken(this, data);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate refresh token
|
|
24
|
+
*/
|
|
25
|
+
async generateRefreshToken(deviceInfo) {
|
|
26
|
+
return authService.createRefreshToken(this, deviceInfo);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Remove current access token
|
|
30
30
|
*/
|
|
31
31
|
async removeAccessToken(token) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
return authService.removeAccessToken(this, token);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Revoke all tokens (logout from all devices)
|
|
36
|
+
*/
|
|
37
|
+
async revokeAllTokens() {
|
|
38
|
+
return authService.revokeAllTokens(this);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get active sessions
|
|
42
|
+
*/
|
|
43
|
+
async activeSessions() {
|
|
44
|
+
return authService.getActiveSessions(this);
|
|
36
45
|
}
|
|
37
46
|
/**
|
|
38
47
|
* Attempt to login the user
|
|
39
48
|
*/
|
|
40
49
|
static async attempt(data) {
|
|
41
|
-
|
|
42
|
-
const { password, ...otherData } = data;
|
|
43
|
-
const user = (await this.first(otherData));
|
|
44
|
-
if (!user) {
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
// now verify the password
|
|
48
|
-
if (!user.confirmPassword(password)) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
return user;
|
|
50
|
+
return authService.attemptLogin(this, data);
|
|
52
51
|
}
|
|
53
52
|
/**
|
|
54
53
|
* Confirm password
|
|
55
54
|
*/
|
|
56
55
|
confirmPassword(password) {
|
|
57
|
-
return
|
|
56
|
+
return authService.verifyPassword(this.get("password"), password);
|
|
58
57
|
}
|
|
59
58
|
}export{Auth};//# sourceMappingURL=auth.js.map
|
package/esm/models/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sources":["../../src/models/auth.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sources":["../../src/models/auth.ts"],"sourcesContent":[null],"names":[],"mappings":"4OAMM,MAAgB,IAAK,SAAQ,KAAK,CAAA;AAMtC;;AAEG;IACI,kBAAkB,GAAA;;QAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC5D,QAAA,OAAO,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;KAClD;AAED;;AAEG;IACI,MAAM,eAAe,CAAC,UAAuB,EAAA;QAClD,OAAO,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KACtD;AAED;;AAEG;IACI,MAAM,mBAAmB,CAAC,IAAU,EAAA;QACzC,OAAO,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACpD;AAED;;AAEG;IACI,MAAM,oBAAoB,CAAC,UAAuB,EAAA;QACvD,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KACzD;AAED;;AAEG;IACI,MAAM,iBAAiB,CAAC,KAAa,EAAA;QAC1C,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACnD;AAED;;AAEG;AACI,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,OAAO,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC1C;AAED;;AAEG;AACI,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAC5C;AAED;;AAEG;AACI,IAAA,aAAa,OAAO,CAAyB,IAAS,EAAA;QAC3D,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC7C;AAED;;AAEG;AACI,IAAA,eAAe,CAAC,QAAgB,EAAA;AACrC,QAAA,OAAO,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;KACnE;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cast-password.d.ts","sourceRoot":"","sources":["../../../src/models/casts/cast-password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cast-password.d.ts","sourceRoot":"","sources":["../../../src/models/casts/cast-password.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,OAIpE"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {hash}from'@mongez/password';import {config}from'@warlock.js/core';/**
|
|
2
2
|
* Cast password on model save
|
|
3
3
|
* If the password is not changed, keep it as is
|
|
4
4
|
*/
|
|
5
5
|
function castPassword(value, column, model) {
|
|
6
6
|
return value
|
|
7
|
-
? hash(String(value), config.
|
|
7
|
+
? hash(String(value), config.key("auth.password.salt", 12))
|
|
8
8
|
: model.getInitial(column);
|
|
9
9
|
}export{castPassword};//# sourceMappingURL=cast-password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cast-password.js","sources":["../../../src/models/casts/cast-password.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cast-password.js","sources":["../../../src/models/casts/cast-password.ts"],"sourcesContent":[null],"names":[],"mappings":"0EAIA;;;AAGG;SACa,YAAY,CAAC,KAAU,EAAE,MAAc,EAAE,KAAY,EAAA;AACnE,IAAA,OAAO,KAAK;AACV,UAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AAC3D,UAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/B"}
|
package/esm/models/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/migration.ts"],"names":[],"mappings":";AAGA,wBAeG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Model, type Casts } from "@warlock.js/cascade";
|
|
2
|
+
export declare class RefreshToken extends Model {
|
|
3
|
+
/**
|
|
4
|
+
* {@inheritDoc}
|
|
5
|
+
*/
|
|
6
|
+
static collection: string;
|
|
7
|
+
/**
|
|
8
|
+
* {@inheritDoc}
|
|
9
|
+
*/
|
|
10
|
+
protected casts: Casts;
|
|
11
|
+
/**
|
|
12
|
+
* Check if token is expired
|
|
13
|
+
*/
|
|
14
|
+
get isExpired(): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Check if token is revoked
|
|
17
|
+
*/
|
|
18
|
+
get isRevoked(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Check if token is valid (not expired and not revoked)
|
|
21
|
+
*/
|
|
22
|
+
get isValid(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Revoke this token
|
|
25
|
+
*/
|
|
26
|
+
revoke(): Promise<this>;
|
|
27
|
+
/**
|
|
28
|
+
* Mark token as used (update lastUsedAt)
|
|
29
|
+
*/
|
|
30
|
+
markAsUsed(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=refresh-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,OAAc,UAAU,SAAmB;IAE3C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,CASpB;IAEF;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAI9B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGzC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import {Model}from'@warlock.js/cascade';class RefreshToken extends Model {
|
|
2
|
+
/**
|
|
3
|
+
* {@inheritDoc}
|
|
4
|
+
*/
|
|
5
|
+
static collection = "refreshTokens";
|
|
6
|
+
/**
|
|
7
|
+
* {@inheritDoc}
|
|
8
|
+
*/
|
|
9
|
+
casts = {
|
|
10
|
+
token: "string",
|
|
11
|
+
userId: "int",
|
|
12
|
+
userType: "string",
|
|
13
|
+
familyId: "string",
|
|
14
|
+
expiresAt: "date",
|
|
15
|
+
lastUsedAt: "date",
|
|
16
|
+
revokedAt: "date",
|
|
17
|
+
deviceInfo: "object",
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Check if token is expired
|
|
21
|
+
*/
|
|
22
|
+
get isExpired() {
|
|
23
|
+
const expiresAt = this.get("expiresAt");
|
|
24
|
+
if (!expiresAt)
|
|
25
|
+
return false;
|
|
26
|
+
return new Date() > new Date(expiresAt);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if token is revoked
|
|
30
|
+
*/
|
|
31
|
+
get isRevoked() {
|
|
32
|
+
return !!this.get("revokedAt");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if token is valid (not expired and not revoked)
|
|
36
|
+
*/
|
|
37
|
+
get isValid() {
|
|
38
|
+
return !this.isExpired && !this.isRevoked;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Revoke this token
|
|
42
|
+
*/
|
|
43
|
+
async revoke() {
|
|
44
|
+
return this.save({ revokedAt: new Date() });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Mark token as used (update lastUsedAt)
|
|
48
|
+
*/
|
|
49
|
+
async markAsUsed() {
|
|
50
|
+
this.silentSaving({ lastUsedAt: new Date() });
|
|
51
|
+
}
|
|
52
|
+
}export{RefreshToken};//# sourceMappingURL=refresh-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token.js","sources":["../../../src/models/refresh-token/refresh-token.ts"],"sourcesContent":[null],"names":[],"mappings":"wCAEM,MAAO,YAAa,SAAQ,KAAK,CAAA;AACrC;;AAEG;AACI,IAAA,OAAO,UAAU,GAAG,eAAe,CAAC;AAE3C;;AAEG;AACO,IAAA,KAAK,GAAU;AACvB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,UAAU,EAAE,QAAQ;KACrB,CAAC;AAEF;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;KACzC;AAED;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAChC;AAED;;AAEG;AACH,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;KAC3C;AAED;;AAEG;AACI,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KAC7C;AAED;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;QACrB,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/C;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type EventSubscription } from "@mongez/events";
|
|
2
|
+
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
3
|
+
import type { Auth } from "../models/auth";
|
|
4
|
+
import type { RefreshToken } from "../models/refresh-token";
|
|
5
|
+
/**
|
|
6
|
+
* Auth event payload types
|
|
7
|
+
*/
|
|
8
|
+
export type AuthEventPayloads = {
|
|
9
|
+
"login.success": [user: Auth, tokenPair: TokenPair, deviceInfo?: DeviceInfo];
|
|
10
|
+
"login.failed": [credentials: {
|
|
11
|
+
email?: string;
|
|
12
|
+
username?: string;
|
|
13
|
+
}, reason: string];
|
|
14
|
+
"login.attempt": [credentials: {
|
|
15
|
+
email?: string;
|
|
16
|
+
username?: string;
|
|
17
|
+
}];
|
|
18
|
+
logout: [user: Auth];
|
|
19
|
+
"logout.all": [user: Auth];
|
|
20
|
+
"token.created": [user: Auth, tokenPair: TokenPair];
|
|
21
|
+
"token.refreshed": [user: Auth, newTokenPair: TokenPair, oldRefreshToken: RefreshToken];
|
|
22
|
+
"token.revoked": [user: Auth, token: RefreshToken];
|
|
23
|
+
"token.expired": [token: RefreshToken];
|
|
24
|
+
"token.familyRevoked": [familyId: string, tokens: RefreshToken[]];
|
|
25
|
+
"password.changed": [user: Auth];
|
|
26
|
+
"password.resetRequested": [user: Auth, resetToken: string];
|
|
27
|
+
"password.reset": [user: Auth];
|
|
28
|
+
"session.created": [user: Auth, refreshToken: RefreshToken, deviceInfo?: DeviceInfo];
|
|
29
|
+
"session.destroyed": [user: Auth, refreshToken: RefreshToken];
|
|
30
|
+
"cleanup.completed": [expiredCount: number];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Auth event names
|
|
34
|
+
*/
|
|
35
|
+
export type AuthEventName = keyof AuthEventPayloads;
|
|
36
|
+
/**
|
|
37
|
+
* Callback type for a specific event
|
|
38
|
+
*/
|
|
39
|
+
export type AuthEventCallback<T extends AuthEventName> = (...args: AuthEventPayloads[T]) => void | Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Type-safe auth events manager
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Subscribe to events with full autocomplete
|
|
46
|
+
* authEvents.on("login.success", (user, tokenPair, deviceInfo) => {
|
|
47
|
+
* console.log(`User ${user.id} logged in`);
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* authEvents.on("token.refreshed", (user, newPair, oldToken) => {
|
|
51
|
+
* console.log(`Token refreshed for user ${user.id}`);
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* // Trigger events
|
|
55
|
+
* authEvents.emit("login.success", user, tokenPair, deviceInfo);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare const authEvents: {
|
|
59
|
+
/**
|
|
60
|
+
* Subscribe to an auth event
|
|
61
|
+
*/
|
|
62
|
+
on<T extends keyof AuthEventPayloads>(event: T, callback: AuthEventCallback<T>): EventSubscription;
|
|
63
|
+
/**
|
|
64
|
+
* Subscribe to an auth event (alias for `on`)
|
|
65
|
+
*/
|
|
66
|
+
subscribe<T_1 extends keyof AuthEventPayloads>(event: T_1, callback: AuthEventCallback<T_1>): EventSubscription;
|
|
67
|
+
/**
|
|
68
|
+
* Emit an auth event
|
|
69
|
+
*/
|
|
70
|
+
emit<T_2 extends keyof AuthEventPayloads>(event: T_2, ...args: AuthEventPayloads[T_2]): void;
|
|
71
|
+
/**
|
|
72
|
+
* Emit an auth event (alias for `emit`)
|
|
73
|
+
*/
|
|
74
|
+
trigger<T_3 extends keyof AuthEventPayloads>(event: T_3, ...args: AuthEventPayloads[T_3]): void;
|
|
75
|
+
/**
|
|
76
|
+
* Unsubscribe from all auth events
|
|
77
|
+
*/
|
|
78
|
+
unsubscribeAll(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Unsubscribe from a specific auth event
|
|
81
|
+
*/
|
|
82
|
+
off(event?: AuthEventName): void;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=auth-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-events.d.ts","sourceRoot":"","sources":["../../src/services/auth-events.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAE9B,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,WAAW,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrF,eAAe,EAAE,CAAC,WAAW,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAGtE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAG3B,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IACxF,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACnD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACvC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAGlE,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,yBAAyB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAG/B,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACrF,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAG9D,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI,CACvD,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAO1B;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;qFACoE,iBAAiB;IAIxF;;OAEG;kGAC2E,iBAAiB;IAI/F;;OAEG;4FACqE,IAAI;IAI5E;;OAEG;+FACwE,IAAI;IAI/E;;OAEG;sBACe,IAAI;IAItB;;OAEG;gBACS,aAAa,GAAG,IAAI;CAOjC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import events from'@mongez/events';/**
|
|
2
|
+
* Event namespace prefix for auth events
|
|
3
|
+
*/
|
|
4
|
+
const AUTH_EVENT_PREFIX = "auth.";
|
|
5
|
+
/**
|
|
6
|
+
* Type-safe auth events manager
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Subscribe to events with full autocomplete
|
|
11
|
+
* authEvents.on("login.success", (user, tokenPair, deviceInfo) => {
|
|
12
|
+
* console.log(`User ${user.id} logged in`);
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* authEvents.on("token.refreshed", (user, newPair, oldToken) => {
|
|
16
|
+
* console.log(`Token refreshed for user ${user.id}`);
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // Trigger events
|
|
20
|
+
* authEvents.emit("login.success", user, tokenPair, deviceInfo);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const authEvents = {
|
|
24
|
+
/**
|
|
25
|
+
* Subscribe to an auth event
|
|
26
|
+
*/
|
|
27
|
+
on(event, callback) {
|
|
28
|
+
return events.subscribe(AUTH_EVENT_PREFIX + event, callback);
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Subscribe to an auth event (alias for `on`)
|
|
32
|
+
*/
|
|
33
|
+
subscribe(event, callback) {
|
|
34
|
+
return this.on(event, callback);
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* Emit an auth event
|
|
38
|
+
*/
|
|
39
|
+
emit(event, ...args) {
|
|
40
|
+
events.trigger(AUTH_EVENT_PREFIX + event, ...args);
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* Emit an auth event (alias for `emit`)
|
|
44
|
+
*/
|
|
45
|
+
trigger(event, ...args) {
|
|
46
|
+
this.emit(event, ...args);
|
|
47
|
+
},
|
|
48
|
+
/**
|
|
49
|
+
* Unsubscribe from all auth events
|
|
50
|
+
*/
|
|
51
|
+
unsubscribeAll() {
|
|
52
|
+
events.unsubscribeNamespace(AUTH_EVENT_PREFIX.slice(0, -1));
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* Unsubscribe from a specific auth event
|
|
56
|
+
*/
|
|
57
|
+
off(event) {
|
|
58
|
+
if (event) {
|
|
59
|
+
events.unsubscribe(AUTH_EVENT_PREFIX + event);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.unsubscribeAll();
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};export{authEvents};//# sourceMappingURL=auth-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-events.js","sources":["../../src/services/auth-events.ts"],"sourcesContent":[null],"names":[],"mappings":"mCAkDA;;AAEG;AACH,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;AAiBG;AACU,MAAA,UAAU,GAAG;AACxB;;AAEG;IACH,EAAE,CAA0B,KAAQ,EAAE,QAA8B,EAAA;QAClE,OAAO,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,EAAE,QAAoB,CAAC,CAAC;KAC1E;AAED;;AAEG;IACH,SAAS,CAA0B,KAAQ,EAAE,QAA8B,EAAA;QACzE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,IAAI,CAA0B,KAAQ,EAAE,GAAG,IAA0B,EAAA;QACnE,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KACpD;AAED;;AAEG;AACH,IAAA,OAAO,CAA0B,KAAQ,EAAE,GAAG,IAA0B,EAAA;QACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KAC3B;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D;AAED;;AAEG;AACH,IAAA,GAAG,CAAC,KAAqB,EAAA;AACvB,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,CAAC,WAAW,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { ChildModel } from "@warlock.js/cascade";
|
|
2
|
+
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
3
|
+
import type { Auth } from "../models/auth";
|
|
4
|
+
import { RefreshToken } from "../models/refresh-token";
|
|
5
|
+
declare class AuthService {
|
|
6
|
+
/**
|
|
7
|
+
* Build access token payload from user
|
|
8
|
+
*/
|
|
9
|
+
buildAccessTokenPayload(user: Auth): {
|
|
10
|
+
id: any;
|
|
11
|
+
_id: any;
|
|
12
|
+
userType: string;
|
|
13
|
+
createdAt: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Generate access token for user
|
|
17
|
+
*/
|
|
18
|
+
generateAccessToken(user: Auth, payload?: any): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Create refresh token for user
|
|
21
|
+
*/
|
|
22
|
+
createRefreshToken(user: Auth, deviceInfo?: DeviceInfo): Promise<RefreshToken>;
|
|
23
|
+
/**
|
|
24
|
+
* Create both access and refresh tokens
|
|
25
|
+
*/
|
|
26
|
+
createTokenPair(user: Auth, deviceInfo?: DeviceInfo): Promise<TokenPair>;
|
|
27
|
+
/**
|
|
28
|
+
* Refresh tokens using a refresh token
|
|
29
|
+
*/
|
|
30
|
+
refreshTokens(refreshTokenString: string, deviceInfo?: DeviceInfo): Promise<TokenPair | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Verify password
|
|
33
|
+
*/
|
|
34
|
+
verifyPassword(hashedPassword: string, plainPassword: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Attempt to login user with given credentials
|
|
37
|
+
*/
|
|
38
|
+
attemptLogin<T>(Model: ChildModel<T>, data: any): Promise<T | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Full login flow: validate credentials, create tokens, emit events
|
|
41
|
+
* Returns token pair on success, null on failure
|
|
42
|
+
*/
|
|
43
|
+
login<T extends Auth>(Model: ChildModel<T>, credentials: any, deviceInfo?: DeviceInfo): Promise<{
|
|
44
|
+
user: T;
|
|
45
|
+
tokens: TokenPair;
|
|
46
|
+
} | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Logout user (revoke specific refresh token)
|
|
49
|
+
*/
|
|
50
|
+
logout(user: Auth, refreshToken?: RefreshToken): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Remove specific access token
|
|
53
|
+
*/
|
|
54
|
+
removeAccessToken(user: Auth, token: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Revoke all tokens for a user
|
|
57
|
+
*/
|
|
58
|
+
revokeAllTokens(user: Auth): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Revoke entire token family (for rotation breach detection)
|
|
61
|
+
*/
|
|
62
|
+
revokeTokenFamily(familyId: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Cleanup expired tokens
|
|
65
|
+
*/
|
|
66
|
+
cleanupExpiredTokens(): Promise<number>;
|
|
67
|
+
/**
|
|
68
|
+
* Enforce max refresh tokens per user
|
|
69
|
+
*/
|
|
70
|
+
private enforceMaxRefreshTokens;
|
|
71
|
+
/**
|
|
72
|
+
* Get active sessions for user
|
|
73
|
+
*/
|
|
74
|
+
getActiveSessions(user: Auth): Promise<RefreshToken[]>;
|
|
75
|
+
}
|
|
76
|
+
export declare const authService: AuthService;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=auth.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,cAAM,WAAW;IACf;;OAEG;IACI,uBAAuB,CAAC,IAAI,EAAE,IAAI;;;;;;IASzC;;OAEG;IACU,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB5E;;OAEG;IACU,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAsC3F;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAiBrF;;OAEG;IACU,aAAa,CACxB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoD5B;;OAEG;IACI,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAI7E;;OAEG;IACU,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqBhF;;;OAGG;IACU,KAAK,CAAC,CAAC,SAAS,IAAI,EAC/B,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpB,WAAW,EAAE,GAAG,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IAejD;;OAEG;IACU,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvD;;OAEG;IACU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D;;OAEG;IACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAcpD;;OAEG;YACW,uBAAuB;IAmBrC;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CASpE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|