@warlock.js/auth 4.0.134 → 4.0.136
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/esm/contracts/types.d.ts +12 -6
- package/esm/contracts/types.d.ts.map +1 -1
- package/esm/middleware/auth.middleware.js +2 -2
- package/esm/middleware/auth.middleware.js.map +1 -1
- package/esm/models/access-token/access-token.model.d.ts.map +1 -1
- package/esm/models/access-token/access-token.model.js +5 -9
- package/esm/models/access-token/access-token.model.js.map +1 -1
- package/esm/models/access-token/migration.d.ts.map +1 -1
- package/esm/models/access-token/migration.js +7 -6
- package/esm/models/access-token/migration.js.map +1 -1
- package/esm/models/auth.model.d.ts +12 -8
- package/esm/models/auth.model.d.ts.map +1 -1
- package/esm/models/auth.model.js +13 -1
- package/esm/models/auth.model.js.map +1 -1
- package/esm/models/index.js +1 -1
- package/esm/models/index.js.map +1 -1
- package/esm/models/refresh-token/migration.js +9 -9
- package/esm/models/refresh-token/migration.js.map +1 -1
- package/esm/models/refresh-token/refresh-token.model.d.ts +1 -1
- package/esm/models/refresh-token/refresh-token.model.d.ts.map +1 -1
- package/esm/models/refresh-token/refresh-token.model.js +13 -13
- package/esm/models/refresh-token/refresh-token.model.js.map +1 -1
- package/esm/services/auth.service.d.ts +18 -11
- package/esm/services/auth.service.d.ts.map +1 -1
- package/esm/services/auth.service.js +62 -47
- package/esm/services/auth.service.js.map +1 -1
- package/esm/services/jwt.d.ts.map +1 -1
- package/esm/services/jwt.js +3 -2
- package/esm/services/jwt.js.map +1 -1
- package/package.json +5 -5
- package/esm/models/access-token/access-token.d.ts +0 -9
- package/esm/models/access-token/access-token.d.ts.map +0 -1
- package/esm/models/auth.d.ts +0 -46
- package/esm/models/auth.d.ts.map +0 -1
- package/esm/models/refresh-token/refresh-token.d.ts +0 -32
- package/esm/models/refresh-token/refresh-token.d.ts.map +0 -1
package/esm/contracts/types.d.ts
CHANGED
|
@@ -111,6 +111,16 @@ export type AuthConfigurations = {
|
|
|
111
111
|
salt?: number;
|
|
112
112
|
};
|
|
113
113
|
};
|
|
114
|
+
export type AccessTokenOutput = {
|
|
115
|
+
/**
|
|
116
|
+
* JWT Token
|
|
117
|
+
*/
|
|
118
|
+
token: string;
|
|
119
|
+
/**
|
|
120
|
+
* Exprie time in ISO format UTC time
|
|
121
|
+
*/
|
|
122
|
+
expiresAt: string;
|
|
123
|
+
};
|
|
114
124
|
/**
|
|
115
125
|
* Token pair returned after login or token refresh
|
|
116
126
|
*/
|
|
@@ -118,15 +128,11 @@ export type TokenPair = {
|
|
|
118
128
|
/**
|
|
119
129
|
* JWT access token (short-lived)
|
|
120
130
|
*/
|
|
121
|
-
accessToken:
|
|
131
|
+
accessToken: AccessTokenOutput;
|
|
122
132
|
/**
|
|
123
133
|
* JWT refresh token (long-lived)
|
|
124
134
|
*/
|
|
125
|
-
refreshToken:
|
|
126
|
-
/**
|
|
127
|
-
* Access token expiration time in seconds or time string
|
|
128
|
-
*/
|
|
129
|
-
expiresIn: number | string;
|
|
135
|
+
refreshToken: AccessTokenOutput;
|
|
130
136
|
};
|
|
131
137
|
/**
|
|
132
138
|
* Device information for session tracking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,QAAQ,EAAE;QACR,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;KACtC,CAAC;IACF;;OAEG;IACH,GAAG,EAAE;QACH;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB;;;;;WAKG;QACH,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB;;WAEG;QACH,OAAO,CAAC,EAAE;YACR;;;eAGG;YACH,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB;;;;;eAKG;YACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;YACvC;;;;eAIG;YACH,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB;;;;eAIG;YACH,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;;;;eAKG;YACH,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;SACjD,CAAC;KACH,CAAC;IACF;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,eAA0B,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,OAAO,CAAC;AAEhE,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,QAAQ,EAAE;QACR,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;KACtC,CAAC;IACF;;OAEG;IACH,GAAG,EAAE;QACH;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;QACf;;;WAGG;QACH,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB;;;;;WAKG;QACH,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB;;WAEG;QACH,OAAO,CAAC,EAAE;YACR;;;eAGG;YACH,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB;;;;;eAKG;YACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;YACvC;;;;eAIG;YACH,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB;;;;eAIG;YACH,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;;;;eAKG;YACH,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;SACjD,CAAC;KACH,CAAC;IACF;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;OAEG;IACH,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,CAAC"}
|
|
@@ -53,8 +53,8 @@ import {t,config}from'@warlock.js/core';import {log}from'@warlock.js/logger';imp
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
// update last access
|
|
56
|
-
accessToken.set("lastAccess", new Date());
|
|
57
|
-
await accessToken.save({ skipEvents: true });
|
|
56
|
+
// accessToken.set("lastAccess", new Date());
|
|
57
|
+
// await accessToken.save({ skipEvents: true });
|
|
58
58
|
// set current user
|
|
59
59
|
request.user = currentUser;
|
|
60
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.middleware.js","sources":["../../src/middleware/auth.middleware.ts"],"sourcesContent":[null],"names":[],"mappings":"mPAMM,SAAU,cAAc,CAAC,eAAmC,EAAA;IAChE,MAAM,YAAY,GAAG,CAAC,eAAe;AACnC,UAAE,EAAE;AACJ,UAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC9B,cAAE,eAAe;AACjB,cAAE,CAAC,eAAe,CAAC,CAAC;IAExB,MAAM,IAAI,GAAe,OAAO,OAAgB,EAAE,QAAkB,KAAI;QACtE,IAAI;AACF,YAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAEtD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAExD,IAAI,CAAC,kBAAkB,EAAE;gBACvB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;;YAGD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;;AAGlD,YAAA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;;AAElC,YAAA,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC;AAC1C,gBAAA,KAAK,EAAE,kBAAkB;AAC1B,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;YAG9D,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC3D,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,0BAA0B,CAAC;oBACpC,SAAS,EAAE,cAAc,CAAC,YAAY;AACvC,iBAAA,CAAC,CAAC;AACJ,aAAA;;YAGD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAiB,cAAA,EAAA,QAAQ,CAAE,CAAA,CAAC,CAAC;YAE1D,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAA,iBAAA,CAAmB,CAAC,CAAC;AAC3D,aAAA;;YAGD,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElD,IAAI,CAAC,WAAW,EAAE;gBAChB,WAAW,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA
|
|
1
|
+
{"version":3,"file":"auth.middleware.js","sources":["../../src/middleware/auth.middleware.ts"],"sourcesContent":[null],"names":[],"mappings":"mPAMM,SAAU,cAAc,CAAC,eAAmC,EAAA;IAChE,MAAM,YAAY,GAAG,CAAC,eAAe;AACnC,UAAE,EAAE;AACJ,UAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC9B,cAAE,eAAe;AACjB,cAAE,CAAC,eAAe,CAAC,CAAC;IAExB,MAAM,IAAI,GAAe,OAAO,OAAgB,EAAE,QAAkB,KAAI;QACtE,IAAI;AACF,YAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAEtD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAExD,IAAI,CAAC,kBAAkB,EAAE;gBACvB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;;YAGD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;;AAGlD,YAAA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;;AAElC,YAAA,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC;AAC1C,gBAAA,KAAK,EAAE,kBAAkB;AAC1B,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;YAG9D,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC3D,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,0BAA0B,CAAC;oBACpC,SAAS,EAAE,cAAc,CAAC,YAAY;AACvC,iBAAA,CAAC,CAAC;AACJ,aAAA;;YAGD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAiB,cAAA,EAAA,QAAQ,CAAE,CAAA,CAAC,CAAC;YAE1D,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAA,iBAAA,CAAmB,CAAC,CAAC;AAC3D,aAAA;;YAGD,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElD,IAAI,CAAC,WAAW,EAAE;gBAChB,WAAW,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;oBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,iBAAA,CAAC,CAAC;AACJ,aAAA;;;;;AAOD,YAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;AAC5B,SAAA;AAAC,QAAA,OAAO,GAAQ,EAAE;YACjB,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;;YAG/B,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAE3B,OAAO,QAAQ,CAAC,YAAY,CAAC;AAC3B,gBAAA,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC;gBAC1C,SAAS,EAAE,cAAc,CAAC,kBAAkB;AAC7C,aAAA,CAAC,CAAC;AACJ,SAAA;AACH,KAAC,CAAC;AAEF,IAAA,OAAO,IAAI,CAAC;AACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-token.model.d.ts","sourceRoot":"","sources":["../../../src/models/access-token/access-token.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"access-token.model.d.ts","sourceRoot":"","sources":["../../../src/models/access-token/access-token.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAW5C,qBAAa,WAAY,SAAQ,KAAK;IACpC;;OAEG;IACH,OAAc,KAAK,SAAmB;IAEtC,OAAc,MAAM,MAAqB;CAC1C"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import {Model}from'@warlock.js/cascade';import {v}from'@warlock.js/seal';const accessTokenSchema = v.object({
|
|
2
2
|
token: v.string().required(),
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
userType: v.string(),
|
|
8
|
-
})
|
|
9
|
-
.allowUnknown()
|
|
10
|
-
.required(),
|
|
3
|
+
last_access: v.date().default(() => new Date()),
|
|
4
|
+
user_id: v.scalar().required(),
|
|
5
|
+
user_type: v.string().required(),
|
|
6
|
+
is_active: v.boolean().default(true),
|
|
11
7
|
});
|
|
12
8
|
class AccessToken extends Model {
|
|
13
9
|
/**
|
|
14
10
|
* {@inheritDoc}
|
|
15
11
|
*/
|
|
16
|
-
static table = "
|
|
12
|
+
static table = "access_tokens";
|
|
17
13
|
static schema = accessTokenSchema;
|
|
18
14
|
}export{AccessToken};//# sourceMappingURL=access-token.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-token.model.js","sources":["../../../src/models/access-token/access-token.model.ts"],"sourcesContent":[null],"names":[],"mappings":"yEAGA,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;AACjC,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,
|
|
1
|
+
{"version":3,"file":"access-token.model.js","sources":["../../../src/models/access-token/access-token.model.ts"],"sourcesContent":[null],"names":[],"mappings":"yEAGA,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;AACjC,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AAC/C,IAAA,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,CAAA,CAAC,CAAC;AAEG,MAAO,WAAY,SAAQ,KAAK,CAAA;AACpC;;AAEG;AACI,IAAA,OAAO,KAAK,GAAG,eAAe,CAAC;AAE/B,IAAA,OAAO,MAAM,GAAG,iBAAiB,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/models/access-token/migration.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/models/access-token/migration.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,KA0B/B,CAAC"}
|
|
@@ -4,14 +4,15 @@ import {migrate}from'@warlock.js/cascade';import {AccessToken}from'./access-toke
|
|
|
4
4
|
// Create table
|
|
5
5
|
this.createTableIfNotExists();
|
|
6
6
|
// Primary key
|
|
7
|
-
this.
|
|
7
|
+
this.primaryUuid();
|
|
8
8
|
// Token field
|
|
9
|
-
this.
|
|
10
|
-
this.timestamp("
|
|
11
|
-
//
|
|
12
|
-
this.
|
|
9
|
+
this.text("token").unique();
|
|
10
|
+
this.timestamp("last_access").nullable();
|
|
11
|
+
// User reference (flat columns for cross-driver compatibility)
|
|
12
|
+
this.uuid("user_id").index();
|
|
13
|
+
this.string("user_type", 50);
|
|
13
14
|
// Status (for token revocation)
|
|
14
|
-
this.boolean("
|
|
15
|
+
this.boolean("is_active");
|
|
15
16
|
// Timestamps
|
|
16
17
|
this.timestamps();
|
|
17
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sources":["../../../src/models/access-token/migration.ts"],"sourcesContent":[null],"names":[],"mappings":"4FAGa,MAAA,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE;AACvD,IAAA,IAAI,EAAE,aAAa;IACnB,EAAE,GAAA;;QAEA,IAAI,CAAC,sBAAsB,EAAE,CAAC;;QAG9B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migration.js","sources":["../../../src/models/access-token/migration.ts"],"sourcesContent":[null],"names":[],"mappings":"4FAGa,MAAA,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE;AACvD,IAAA,IAAI,EAAE,aAAa;IACnB,EAAE,GAAA;;QAEA,IAAI,CAAC,sBAAsB,EAAE,CAAC;;QAG9B,IAAI,CAAC,WAAW,EAAE,CAAC;;QAGnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;;QAGzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;;AAG7B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;;QAG1B,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IACD,IAAI,GAAA;QACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AACF,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ChildModel, Model, type ModelSchema } from "@warlock.js/cascade";
|
|
2
|
-
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
2
|
+
import type { AccessTokenOutput, DeviceInfo, TokenPair } from "../contracts/types";
|
|
3
3
|
import type { RefreshToken } from "./refresh-token/refresh-token.model";
|
|
4
4
|
export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> extends Model<Schema> {
|
|
5
5
|
/**
|
|
@@ -11,12 +11,8 @@ export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> ext
|
|
|
11
11
|
*/
|
|
12
12
|
accessTokenPayload(): {
|
|
13
13
|
id: any;
|
|
14
|
-
_id: any;
|
|
15
14
|
userType: string;
|
|
16
|
-
|
|
17
|
-
* Generate access token
|
|
18
|
-
*/
|
|
19
|
-
createdAt: number;
|
|
15
|
+
created_at: number;
|
|
20
16
|
};
|
|
21
17
|
/**
|
|
22
18
|
* Create both access and refresh tokens
|
|
@@ -25,7 +21,7 @@ export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> ext
|
|
|
25
21
|
/**
|
|
26
22
|
* Generate access token
|
|
27
23
|
*/
|
|
28
|
-
generateAccessToken(data?: any): Promise<
|
|
24
|
+
generateAccessToken(data?: any): Promise<AccessTokenOutput>;
|
|
29
25
|
/**
|
|
30
26
|
* Generate refresh token
|
|
31
27
|
*/
|
|
@@ -34,6 +30,14 @@ export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> ext
|
|
|
34
30
|
* Remove current access token
|
|
35
31
|
*/
|
|
36
32
|
removeAccessToken(token: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Remove refresh token
|
|
35
|
+
*/
|
|
36
|
+
removeRefreshToken(token: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Remove all access tokens
|
|
39
|
+
*/
|
|
40
|
+
removeAllAccessTokens(): Promise<void>;
|
|
37
41
|
/**
|
|
38
42
|
* Revoke all tokens (logout from all devices)
|
|
39
43
|
*/
|
|
@@ -49,6 +53,6 @@ export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> ext
|
|
|
49
53
|
/**
|
|
50
54
|
* Confirm password
|
|
51
55
|
*/
|
|
52
|
-
confirmPassword(password: string): boolean
|
|
56
|
+
confirmPassword(password: string): Promise<boolean>;
|
|
53
57
|
}
|
|
54
58
|
//# sourceMappingURL=auth.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.model.d.ts","sourceRoot":"","sources":["../../src/models/auth.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.model.d.ts","sourceRoot":"","sources":["../../src/models/auth.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,8BAAsB,IAAI,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,KAAK,CAAC,MAAM,CAAC;IACxF;;OAEG;IACH,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;OAEG;IACI,kBAAkB;;;;;IAIzB;;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,iBAAiB,CAAC;IAIxE;;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,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;OAEG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAItD;;OAEG;WACiB,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIpF;;OAEG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGjE"}
|
package/esm/models/auth.model.js
CHANGED
|
@@ -29,6 +29,18 @@ import {Model}from'@warlock.js/cascade';import'@mongez/events';import {authServi
|
|
|
29
29
|
async removeAccessToken(token) {
|
|
30
30
|
return authService.removeAccessToken(this, token);
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Remove refresh token
|
|
34
|
+
*/
|
|
35
|
+
async removeRefreshToken(token) {
|
|
36
|
+
return authService.removeRefreshToken(this, token);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Remove all access tokens
|
|
40
|
+
*/
|
|
41
|
+
async removeAllAccessTokens() {
|
|
42
|
+
return authService.removeAllAccessTokens(this);
|
|
43
|
+
}
|
|
32
44
|
/**
|
|
33
45
|
* Revoke all tokens (logout from all devices)
|
|
34
46
|
*/
|
|
@@ -50,7 +62,7 @@ import {Model}from'@warlock.js/cascade';import'@mongez/events';import {authServi
|
|
|
50
62
|
/**
|
|
51
63
|
* Confirm password
|
|
52
64
|
*/
|
|
53
|
-
confirmPassword(password) {
|
|
65
|
+
async confirmPassword(password) {
|
|
54
66
|
return authService.verifyPassword(this.string("password"), password);
|
|
55
67
|
}
|
|
56
68
|
}export{Auth};//# sourceMappingURL=auth.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.model.js","sources":["../../src/models/auth.model.ts"],"sourcesContent":[null],"names":[],"mappings":"4OAKM,MAAgB,IAA+C,SAAQ,KAAa,CAAA;AAMxF;;AAEG;IACI,kBAAkB,GAAA;AACvB,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;
|
|
1
|
+
{"version":3,"file":"auth.model.js","sources":["../../src/models/auth.model.ts"],"sourcesContent":[null],"names":[],"mappings":"4OAKM,MAAgB,IAA+C,SAAQ,KAAa,CAAA;AAMxF;;AAEG;IACI,kBAAkB,GAAA;AACvB,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;IACI,MAAM,kBAAkB,CAAC,KAAa,EAAA;QAC3C,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACpD;AAED;;AAEG;AACI,IAAA,MAAM,qBAAqB,GAAA;AAChC,QAAA,OAAO,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAChD;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;IACI,MAAM,eAAe,CAAC,QAAgB,EAAA;AAC3C,QAAA,OAAO,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAE,EAAE,QAAQ,CAAC,CAAC;KACvE;AACF"}
|
package/esm/models/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {AccessTokenMigration}from'./access-token/migration.js';import {RefreshTokenMigration}from'./refresh-token/migration.js';export{AccessToken}from'./access-token/access-token.model.js';import'@warlock.js/cascade';import'@mongez/events';import'@mongez/
|
|
1
|
+
import {AccessTokenMigration}from'./access-token/migration.js';import {RefreshTokenMigration}from'./refresh-token/migration.js';export{AccessToken}from'./access-token/access-token.model.js';import'@warlock.js/cascade';import'@mongez/events';import'@mongez/reinforcements';import'@warlock.js/core';export{RefreshToken}from'./refresh-token/refresh-token.model.js';import'fast-jwt';import'@mongez/fs';import'@warlock.js/logger';const authMigrations = [AccessTokenMigration, RefreshTokenMigration];export{authMigrations};//# sourceMappingURL=index.js.map
|
package/esm/models/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/models/index.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/models/index.ts"],"sourcesContent":[null],"names":[],"mappings":"+aAOa,cAAc,GAAG,CAAC,oBAAoB,EAAE,qBAAqB"}
|
|
@@ -4,16 +4,16 @@ import {migrate}from'@warlock.js/cascade';import {RefreshToken}from'./refresh-to
|
|
|
4
4
|
// Create table
|
|
5
5
|
this.createTableIfNotExists();
|
|
6
6
|
// Primary key
|
|
7
|
-
this.
|
|
7
|
+
this.primaryUuid();
|
|
8
8
|
// Token fields
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.string("
|
|
12
|
-
this.
|
|
13
|
-
this.timestamp("
|
|
14
|
-
this.timestamp("
|
|
15
|
-
this.timestamp("
|
|
16
|
-
this.json("
|
|
9
|
+
this.text("token").unique();
|
|
10
|
+
this.uuid("user_id").index();
|
|
11
|
+
this.string("user_type", 50);
|
|
12
|
+
this.text("family_id").index();
|
|
13
|
+
this.timestamp("expires_at").index();
|
|
14
|
+
this.timestamp("last_used_at").nullable();
|
|
15
|
+
this.timestamp("revoked_at").nullable();
|
|
16
|
+
this.json("device_info").nullable();
|
|
17
17
|
// Timestamps
|
|
18
18
|
this.timestamps();
|
|
19
19
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sources":["../../../src/models/refresh-token/migration.ts"],"sourcesContent":[null],"names":[],"mappings":"8FAGa,MAAA,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE;AACzD,IAAA,IAAI,EAAE,cAAc;IACpB,EAAE,GAAA;;QAEA,IAAI,CAAC,sBAAsB,EAAE,CAAC;;QAG9B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migration.js","sources":["../../../src/models/refresh-token/migration.ts"],"sourcesContent":[null],"names":[],"mappings":"8FAGa,MAAA,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE;AACzD,IAAA,IAAI,EAAE,cAAc;IACpB,EAAE,GAAA;;QAEA,IAAI,CAAC,sBAAsB,EAAE,CAAC;;QAG9B,IAAI,CAAC,WAAW,EAAE,CAAC;;QAGnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;;QAGpC,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IACD,IAAI,GAAA;QACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-token.model.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/refresh-token.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAc5C,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,OAAc,KAAK,
|
|
1
|
+
{"version":3,"file":"refresh-token.model.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/refresh-token.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAc5C,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,OAAc,KAAK,SAAoB;IAEvC;;OAEG;IACH,OAAc,MAAM,MAAsB;IAE1C;;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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {Model}from'@warlock.js/cascade';import {v}from'@warlock.js/seal';const refreshTokenSchema = v.object({
|
|
2
2
|
token: v.string().required(),
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
user_id: v.scalar().required(),
|
|
4
|
+
user_type: v.string().required(),
|
|
5
|
+
family_id: v.string().required(),
|
|
6
|
+
expires_at: v.date().required(),
|
|
7
|
+
last_used_at: v.date().default(() => new Date()),
|
|
8
|
+
revoked_at: v.date(),
|
|
9
|
+
device_info: v.record(v.any()),
|
|
10
10
|
});
|
|
11
11
|
class RefreshToken extends Model {
|
|
12
12
|
/**
|
|
13
13
|
* {@inheritDoc}
|
|
14
14
|
*/
|
|
15
|
-
static table = "
|
|
15
|
+
static table = "refresh_tokens";
|
|
16
16
|
/**
|
|
17
17
|
* {@inheritDoc}
|
|
18
18
|
*/
|
|
@@ -21,7 +21,7 @@ class RefreshToken extends Model {
|
|
|
21
21
|
* Check if token is expired
|
|
22
22
|
*/
|
|
23
23
|
get isExpired() {
|
|
24
|
-
const expiresAt = this.get("
|
|
24
|
+
const expiresAt = this.get("expires_at");
|
|
25
25
|
if (!expiresAt)
|
|
26
26
|
return false;
|
|
27
27
|
return new Date() > new Date(expiresAt);
|
|
@@ -30,7 +30,7 @@ class RefreshToken extends Model {
|
|
|
30
30
|
* Check if token is revoked
|
|
31
31
|
*/
|
|
32
32
|
get isRevoked() {
|
|
33
|
-
return !!this.get("
|
|
33
|
+
return !!this.get("revoked_at");
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Check if token is valid (not expired and not revoked)
|
|
@@ -42,12 +42,12 @@ class RefreshToken extends Model {
|
|
|
42
42
|
* Revoke this token
|
|
43
43
|
*/
|
|
44
44
|
async revoke() {
|
|
45
|
-
return this.merge({
|
|
45
|
+
return this.merge({ revoked_at: new Date() }).save();
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
-
* Mark token as used (update
|
|
48
|
+
* Mark token as used (update last_used_at)
|
|
49
49
|
*/
|
|
50
50
|
async markAsUsed() {
|
|
51
|
-
await this.merge({
|
|
51
|
+
await this.merge({ last_used_at: new Date() }).save();
|
|
52
52
|
}
|
|
53
53
|
}export{RefreshToken};//# sourceMappingURL=refresh-token.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-token.model.js","sources":["../../../src/models/refresh-token/refresh-token.model.ts"],"sourcesContent":[null],"names":[],"mappings":"yEAGA,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;AAClC,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,
|
|
1
|
+
{"version":3,"file":"refresh-token.model.js","sources":["../../../src/models/refresh-token/refresh-token.model.ts"],"sourcesContent":[null],"names":[],"mappings":"yEAGA,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;AAClC,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAChC,IAAA,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAChC,IAAA,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AAC/B,IAAA,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AAChD,IAAA,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE;IACpB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC/B,CAAA,CAAC,CAAC;AAEG,MAAO,YAAa,SAAQ,KAAK,CAAA;AACrC;;AAEG;AACI,IAAA,OAAO,KAAK,GAAG,gBAAgB,CAAC;AAEvC;;AAEG;AACI,IAAA,OAAO,MAAM,GAAG,kBAAkB,CAAC;AAE1C;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACzC,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,YAAY,CAAC,CAAC;KACjC;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,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACtD;AAED;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;AACrB,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;KACvD;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ChildModel } from "@warlock.js/cascade";
|
|
2
|
-
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
2
|
+
import type { AccessTokenOutput, DeviceInfo, TokenPair } from "../contracts/types";
|
|
3
3
|
import type { Auth } from "../models/auth.model";
|
|
4
4
|
import { RefreshToken } from "../models/refresh-token";
|
|
5
5
|
declare class AuthService {
|
|
@@ -8,14 +8,13 @@ declare class AuthService {
|
|
|
8
8
|
*/
|
|
9
9
|
buildAccessTokenPayload(user: Auth): {
|
|
10
10
|
id: any;
|
|
11
|
-
_id: any;
|
|
12
11
|
userType: string;
|
|
13
|
-
|
|
12
|
+
created_at: number;
|
|
14
13
|
};
|
|
15
14
|
/**
|
|
16
15
|
* Generate access token for user
|
|
17
16
|
*/
|
|
18
|
-
generateAccessToken(user: Auth, payload?: any): Promise<
|
|
17
|
+
generateAccessToken(user: Auth, payload?: any): Promise<AccessTokenOutput>;
|
|
19
18
|
/**
|
|
20
19
|
* Create refresh token for user
|
|
21
20
|
*/
|
|
@@ -31,25 +30,25 @@ declare class AuthService {
|
|
|
31
30
|
/**
|
|
32
31
|
* Verify password
|
|
33
32
|
*/
|
|
34
|
-
verifyPassword(
|
|
33
|
+
verifyPassword(plainPassword: string, hashedPassword: string): Promise<boolean>;
|
|
35
34
|
/**
|
|
36
35
|
* Hash password
|
|
37
36
|
*/
|
|
38
|
-
hashPassword(password: string): string
|
|
37
|
+
hashPassword(password: string): Promise<string>;
|
|
39
38
|
/**
|
|
40
39
|
* Attempt to login user with given credentials
|
|
41
40
|
*/
|
|
42
|
-
attemptLogin(Model: ChildModel<
|
|
41
|
+
attemptLogin<T extends Auth>(Model: ChildModel<T>, data: any): Promise<T | null>;
|
|
43
42
|
/**
|
|
44
43
|
* Full login flow: validate credentials, create tokens, emit events
|
|
45
44
|
* Returns token pair on success, null on failure
|
|
46
45
|
*/
|
|
47
|
-
login(Model: ChildModel<
|
|
48
|
-
user:
|
|
46
|
+
login<T extends Auth>(Model: ChildModel<T>, credentials: any, deviceInfo?: DeviceInfo): Promise<{
|
|
47
|
+
user: T;
|
|
49
48
|
tokens: TokenPair;
|
|
50
49
|
} | null | {
|
|
51
|
-
user:
|
|
52
|
-
accessToken:
|
|
50
|
+
user: T;
|
|
51
|
+
accessToken: AccessTokenOutput;
|
|
53
52
|
}>;
|
|
54
53
|
/**
|
|
55
54
|
* Logout user
|
|
@@ -65,6 +64,14 @@ declare class AuthService {
|
|
|
65
64
|
* Remove specific access token
|
|
66
65
|
*/
|
|
67
66
|
removeAccessToken(user: Auth, token: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Remove all access tokens for a user
|
|
69
|
+
*/
|
|
70
|
+
removeAllAccessTokens(user: Auth): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Remove specific refresh token
|
|
73
|
+
*/
|
|
74
|
+
removeRefreshToken(user: Auth, token: string): Promise<void>;
|
|
68
75
|
/**
|
|
69
76
|
* Revoke all tokens for a user
|
|
70
77
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,cAAM,WAAW;IACf;;OAEG;IACI,uBAAuB,CAAC,IAAI,EAAE,IAAI;;;;;IAQzC;;OAEG;IACU,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoBvF;;OAEG;IACU,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAoC3F;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAmBrF;;OAEG;IACU,aAAa,CACxB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoD5B;;OAEG;IACU,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5F;;OAEG;IACU,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D;;OAEG;IACU,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqB7F;;;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,GAAG;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,WAAW,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAqB/F;;;;;;;;OAQG;IACU,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC3F;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE;;OAEG;IACU,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7D;;OAEG;IACU,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvD;;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;IAqBrC;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAWpE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {Random}from'@mongez/reinforcements';import {config,verifyPassword,hashPassword}from'@warlock.js/core';import {AccessToken}from'../models/access-token/access-token.model.js';import {RefreshToken}from'../models/refresh-token/refresh-token.model.js';import {toJwtExpiresIn}from'../utils/duration.js';import {authEvents}from'./auth-events.js';import {jwt}from'./jwt.js';class AuthService {
|
|
2
2
|
/**
|
|
3
3
|
* Build access token payload from user
|
|
4
4
|
*/
|
|
5
5
|
buildAccessTokenPayload(user) {
|
|
6
6
|
return {
|
|
7
7
|
id: user.id,
|
|
8
|
-
_id: user.get("_id"),
|
|
9
8
|
userType: user.userType,
|
|
10
|
-
|
|
9
|
+
created_at: Date.now(),
|
|
11
10
|
};
|
|
12
11
|
}
|
|
13
12
|
/**
|
|
@@ -16,43 +15,42 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
16
15
|
async generateAccessToken(user, payload) {
|
|
17
16
|
const data = payload || this.buildAccessTokenPayload(user);
|
|
18
17
|
const expiresInConfig = config.key("auth.jwt.expiresIn");
|
|
19
|
-
const expiresIn = toJwtExpiresIn(expiresInConfig,
|
|
18
|
+
const expiresIn = toJwtExpiresIn(expiresInConfig, 3_600); // default 1 hour
|
|
20
19
|
// If expiresIn is undefined, token never expires
|
|
21
|
-
const token =
|
|
20
|
+
const token = await jwt.generate(data, { expiresIn });
|
|
21
|
+
const decoed = await jwt.verify(token);
|
|
22
22
|
// Store in database
|
|
23
23
|
await AccessToken.create({
|
|
24
24
|
token,
|
|
25
|
-
|
|
25
|
+
user_id: user.id,
|
|
26
|
+
user_type: user.userType,
|
|
26
27
|
});
|
|
27
|
-
return token;
|
|
28
|
+
return { token, expiresAt: new Date(decoed.exp * 1_000).toISOString() };
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
31
|
* Create refresh token for user
|
|
31
32
|
*/
|
|
32
33
|
async createRefreshToken(user, deviceInfo) {
|
|
33
34
|
const familyId = deviceInfo?.familyId || Random.string(32);
|
|
34
|
-
const expiresInConfig = config.key("auth.jwt.refresh.expiresIn");
|
|
35
|
-
const expiresInMs = parseExpirationToMs(expiresInConfig, 7 * 24 * 60 * 60 * 1000); // default 7 days
|
|
36
35
|
const payload = {
|
|
37
36
|
userId: user.id,
|
|
38
37
|
userType: user.userType,
|
|
39
38
|
familyId,
|
|
40
39
|
};
|
|
41
40
|
const token = await jwt.generateRefreshToken(payload);
|
|
41
|
+
const decoed = await jwt.verifyRefreshToken(token);
|
|
42
|
+
// Calculate expiration date (undefined means never expires, but we still set a far future date)
|
|
43
|
+
const expiresAt = new Date(decoed.exp * 1_000).toISOString();
|
|
42
44
|
// Enforce max tokens per user
|
|
43
45
|
await this.enforceMaxRefreshTokens(user);
|
|
44
|
-
// Calculate expiration date (undefined means never expires, but we still set a far future date)
|
|
45
|
-
const expiresAt = expiresInMs
|
|
46
|
-
? new Date(Date.now() + expiresInMs)
|
|
47
|
-
: new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
|
|
48
46
|
// Store in database
|
|
49
47
|
return RefreshToken.create({
|
|
50
48
|
token,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
familyId,
|
|
54
|
-
expiresAt,
|
|
55
|
-
|
|
49
|
+
user_id: user.id,
|
|
50
|
+
user_type: user.userType,
|
|
51
|
+
family_id: familyId,
|
|
52
|
+
expires_at: expiresAt,
|
|
53
|
+
device_info: deviceInfo
|
|
56
54
|
? {
|
|
57
55
|
userAgent: deviceInfo.userAgent,
|
|
58
56
|
ip: deviceInfo.ip,
|
|
@@ -69,8 +67,10 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
69
67
|
const refreshToken = await this.createRefreshToken(user, deviceInfo);
|
|
70
68
|
const tokenPair = {
|
|
71
69
|
accessToken,
|
|
72
|
-
refreshToken:
|
|
73
|
-
|
|
70
|
+
refreshToken: {
|
|
71
|
+
token: refreshToken.get("token"),
|
|
72
|
+
expiresAt: refreshToken.get("expires_at"),
|
|
73
|
+
},
|
|
74
74
|
};
|
|
75
75
|
// Emit events
|
|
76
76
|
authEvents.emit("token.created", user, tokenPair);
|
|
@@ -91,7 +91,7 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
91
91
|
if (!refreshToken?.isValid) {
|
|
92
92
|
// If token was already used (rotation detection), revoke entire family
|
|
93
93
|
if (refreshToken) {
|
|
94
|
-
await this.revokeTokenFamily(refreshToken.get("
|
|
94
|
+
await this.revokeTokenFamily(refreshToken.get("family_id"));
|
|
95
95
|
}
|
|
96
96
|
return null;
|
|
97
97
|
}
|
|
@@ -113,7 +113,7 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
113
113
|
// 5. Generate new token pair (keep same family)
|
|
114
114
|
const newTokenPair = await this.createTokenPair(user, {
|
|
115
115
|
...deviceInfo,
|
|
116
|
-
familyId: refreshToken.get("
|
|
116
|
+
familyId: refreshToken.get("family_id"),
|
|
117
117
|
});
|
|
118
118
|
// Emit token refreshed event
|
|
119
119
|
authEvents.emit("token.refreshed", user, newTokenPair, refreshToken);
|
|
@@ -126,14 +126,14 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
126
126
|
/**
|
|
127
127
|
* Verify password
|
|
128
128
|
*/
|
|
129
|
-
verifyPassword(
|
|
130
|
-
return
|
|
129
|
+
async verifyPassword(plainPassword, hashedPassword) {
|
|
130
|
+
return verifyPassword(plainPassword, hashedPassword);
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Hash password
|
|
134
134
|
*/
|
|
135
|
-
hashPassword(password) {
|
|
136
|
-
return
|
|
135
|
+
async hashPassword(password) {
|
|
136
|
+
return hashPassword(password);
|
|
137
137
|
}
|
|
138
138
|
/**
|
|
139
139
|
* Attempt to login user with given credentials
|
|
@@ -147,7 +147,7 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
147
147
|
authEvents.emit("login.failed", otherData, "User not found");
|
|
148
148
|
return null;
|
|
149
149
|
}
|
|
150
|
-
if (!this.verifyPassword(user.string("password")
|
|
150
|
+
if (!(await this.verifyPassword(password, user.string("password")))) {
|
|
151
151
|
authEvents.emit("login.failed", otherData, "Invalid password");
|
|
152
152
|
return null;
|
|
153
153
|
}
|
|
@@ -216,7 +216,25 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
216
216
|
async removeAccessToken(user, token) {
|
|
217
217
|
AccessToken.delete({
|
|
218
218
|
token,
|
|
219
|
-
|
|
219
|
+
userId: user.id,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Remove all access tokens for a user
|
|
224
|
+
*/
|
|
225
|
+
async removeAllAccessTokens(user) {
|
|
226
|
+
// Delete access token
|
|
227
|
+
AccessToken.delete({
|
|
228
|
+
user_id: user.id,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Remove specific refresh token
|
|
233
|
+
*/
|
|
234
|
+
async removeRefreshToken(user, token) {
|
|
235
|
+
RefreshToken.delete({
|
|
236
|
+
token,
|
|
237
|
+
userId: user.id,
|
|
220
238
|
});
|
|
221
239
|
}
|
|
222
240
|
/**
|
|
@@ -225,19 +243,16 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
225
243
|
async revokeAllTokens(user) {
|
|
226
244
|
// Revoke all refresh tokens
|
|
227
245
|
const refreshTokens = await RefreshToken.query()
|
|
228
|
-
.where("
|
|
229
|
-
.where("
|
|
230
|
-
.where("
|
|
246
|
+
.where("user_id", user.id)
|
|
247
|
+
.where("user_type", user.userType)
|
|
248
|
+
.where("revoked_at", null)
|
|
231
249
|
.get();
|
|
232
250
|
for (const token of refreshTokens) {
|
|
233
251
|
await token.revoke();
|
|
234
252
|
authEvents.emit("token.revoked", user, token);
|
|
235
253
|
}
|
|
236
254
|
// Delete all access tokens
|
|
237
|
-
await
|
|
238
|
-
"user.id": user.id,
|
|
239
|
-
"user.userType": user.userType,
|
|
240
|
-
});
|
|
255
|
+
await this.removeAllAccessTokens(user);
|
|
241
256
|
// Emit logout all event
|
|
242
257
|
authEvents.emit("logout.all", user);
|
|
243
258
|
}
|
|
@@ -246,8 +261,8 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
246
261
|
*/
|
|
247
262
|
async revokeTokenFamily(familyId) {
|
|
248
263
|
const tokens = await RefreshToken.query()
|
|
249
|
-
.where("
|
|
250
|
-
.where("
|
|
264
|
+
.where("family_id", familyId)
|
|
265
|
+
.where("revoked_at", null)
|
|
251
266
|
.get();
|
|
252
267
|
for (const token of tokens) {
|
|
253
268
|
await token.revoke();
|
|
@@ -259,7 +274,7 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
259
274
|
* Cleanup expired tokens
|
|
260
275
|
*/
|
|
261
276
|
async cleanupExpiredTokens() {
|
|
262
|
-
const expiredTokens = await RefreshToken.query().where("
|
|
277
|
+
const expiredTokens = await RefreshToken.query().where("expires_at", "<", new Date()).get();
|
|
263
278
|
for (const token of expiredTokens) {
|
|
264
279
|
authEvents.emit("token.expired", token);
|
|
265
280
|
await token.destroy();
|
|
@@ -275,11 +290,11 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
275
290
|
const maxPerUser = config.key("auth.jwt.refresh.maxPerUser", 5);
|
|
276
291
|
const activeTokens = await RefreshToken.query()
|
|
277
292
|
.where({
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
293
|
+
user_id: user.id,
|
|
294
|
+
user_type: user.userType,
|
|
295
|
+
revoked_at: null,
|
|
281
296
|
})
|
|
282
|
-
.orderBy("
|
|
297
|
+
.orderBy("created_at", "asc")
|
|
283
298
|
.get();
|
|
284
299
|
// Revoke oldest tokens if exceeding limit
|
|
285
300
|
if (activeTokens.length >= maxPerUser) {
|
|
@@ -295,12 +310,12 @@ import {verify,hash}from'@mongez/password';import {Random}from'@mongez/reinforce
|
|
|
295
310
|
async getActiveSessions(user) {
|
|
296
311
|
return RefreshToken.query()
|
|
297
312
|
.where({
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
313
|
+
user_id: user.id,
|
|
314
|
+
user_type: user.userType,
|
|
315
|
+
revoked_at: null,
|
|
301
316
|
})
|
|
302
|
-
.where("
|
|
303
|
-
.orderBy("
|
|
317
|
+
.where("expires_at", ">", new Date())
|
|
318
|
+
.orderBy("created_at", "desc")
|
|
304
319
|
.get();
|
|
305
320
|
}
|
|
306
321
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sources":["../../src/services/auth.service.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.service.js","sources":["../../src/services/auth.service.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/services/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AASlB,eAAO,MAAM,GAAG;IACd;;;OAGG;sBAEQ,GAAG,yCAMX,QAAQ,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/services/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AASlB,eAAO,MAAM,GAAG;IACd;;;OAGG;sBAEQ,GAAG,yCAMX,QAAQ,MAAM,CAAC;IAQlB;;;;OAIG;2BAEM,MAAM;IAYf;;OAEG;kCAEQ,GAAG,oDAOX,QAAQ,MAAM,CAAC;IAKlB;;OAEG;yCAEM,MAAM;CAUhB,CAAC"}
|
package/esm/services/jwt.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {config}from'@warlock.js/core';import {createSigner,createVerifier}from'fast-jwt';const getSecretKey = () => config.key("auth.jwt.secret");
|
|
2
|
-
const getAlgorithm = () => config.key("auth.jwt.algorithm");
|
|
2
|
+
const getAlgorithm = () => config.key("auth.jwt.algorithm", "HS256");
|
|
3
3
|
const getRefreshSecretKey = () => config.key("auth.jwt.refresh.secret");
|
|
4
4
|
// Assuming there's a separate config for refresh token validity, for example, '7d' for 7 days
|
|
5
5
|
const getRefreshTokenValidity = () => config.key("auth.jwt.refresh.expiresIn");
|
|
@@ -11,7 +11,8 @@ const jwt = {
|
|
|
11
11
|
async generate(payload, { key = getSecretKey(), algorithm = getAlgorithm(), ...options } = {}) {
|
|
12
12
|
// Create a signer function with predefined options
|
|
13
13
|
const sign = createSigner({ key, ...options, algorithm });
|
|
14
|
-
|
|
14
|
+
const token = await sign({ ...payload });
|
|
15
|
+
return token;
|
|
15
16
|
},
|
|
16
17
|
/**
|
|
17
18
|
* Verify the given token.
|
package/esm/services/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sources":["../../src/services/jwt.ts"],"sourcesContent":[null],"names":[],"mappings":"yFASA,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;AACnE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.js","sources":["../../src/services/jwt.ts"],"sourcesContent":[null],"names":[],"mappings":"yFASA,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;AACnE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAc,CAAC;AAElF,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAW,CAAC;AAClF;AACA,MAAM,uBAAuB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAoB,CAAC;AAErF,MAAA,GAAG,GAAG;AACjB;;;AAGG;AACH,IAAA,MAAM,QAAQ,CACZ,OAAY,EACZ,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,KAC0B,EAAE,EAAA;;AAGxC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACzC,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;AAIG;AACH,IAAA,MAAM,MAAM,CACV,KAAa,EACb,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,UAAU,GAAG,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,EAC1D,GAAG,OAAO,KAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAE/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAe,CAAC,CAAC;KACtC;AAED;;AAEG;IACH,MAAM,oBAAoB,CACxB,OAAY,EACZ,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,SAAS,GAAG,uBAAuB,EAAE,EACrC,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,EAAA,GAC0B,EAAE,EAAA;AAExC,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACrE,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7B;AAED;;AAEG;IACH,MAAM,kBAAkB,CACtB,KAAa,EACb,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,UAAU,GAAG,CAAC,YAAY,EAAE,CAAC,EAC7B,GAAG,OAAO,EAAA,GAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warlock.js/auth",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.136",
|
|
4
4
|
"description": "Authentication system for Warlock.js applications",
|
|
5
5
|
"main": "./esm/index.js",
|
|
6
6
|
"dependencies": {
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"@mongez/events": "^2.1.0",
|
|
13
13
|
"@mongez/fs": "^3.0.5",
|
|
14
14
|
"@mongez/reinforcements": "^2.3.17",
|
|
15
|
-
"@warlock.js/cascade": "4.0.
|
|
16
|
-
"@warlock.js/core": "4.0.
|
|
17
|
-
"@warlock.js/logger": "4.0.
|
|
18
|
-
"@warlock.js/seal": "4.0.
|
|
15
|
+
"@warlock.js/cascade": "4.0.136",
|
|
16
|
+
"@warlock.js/core": "4.0.136",
|
|
17
|
+
"@warlock.js/logger": "4.0.136",
|
|
18
|
+
"@warlock.js/seal": "4.0.136"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|
|
21
21
|
"type": "git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access-token.d.ts","sourceRoot":"","sources":["../../../src/models/access-token/access-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAe5C,qBAAa,WAAY,SAAQ,KAAK;IACpC;;OAEG;IACH,OAAc,KAAK,SAAkB;IAErC,OAAc,MAAM,MAAqB;CAC1C"}
|
package/esm/models/auth.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { type ChildModel, Model, type ModelSchema } from "@warlock.js/cascade";
|
|
2
|
-
import type { DeviceInfo, TokenPair } from "../contracts/types";
|
|
3
|
-
import type { RefreshToken } from "./refresh-token/refresh-token";
|
|
4
|
-
export declare abstract class Auth<Schema extends ModelSchema = ModelSchema> extends Model<Schema> {
|
|
5
|
-
/**
|
|
6
|
-
* Get user type
|
|
7
|
-
*/
|
|
8
|
-
abstract get userType(): string;
|
|
9
|
-
/**
|
|
10
|
-
* Get access token payload
|
|
11
|
-
*/
|
|
12
|
-
accessTokenPayload(): any;
|
|
13
|
-
/**
|
|
14
|
-
* Create both access and refresh tokens
|
|
15
|
-
*/
|
|
16
|
-
createTokenPair(deviceInfo?: DeviceInfo): Promise<TokenPair>;
|
|
17
|
-
/**
|
|
18
|
-
* Generate access token
|
|
19
|
-
*/
|
|
20
|
-
generateAccessToken(data?: any): Promise<string>;
|
|
21
|
-
/**
|
|
22
|
-
* Generate refresh token
|
|
23
|
-
*/
|
|
24
|
-
generateRefreshToken(deviceInfo?: DeviceInfo): Promise<RefreshToken>;
|
|
25
|
-
/**
|
|
26
|
-
* Remove current access token
|
|
27
|
-
*/
|
|
28
|
-
removeAccessToken(token: string): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Revoke all tokens (logout from all devices)
|
|
31
|
-
*/
|
|
32
|
-
revokeAllTokens(): Promise<void>;
|
|
33
|
-
/**
|
|
34
|
-
* Get active sessions
|
|
35
|
-
*/
|
|
36
|
-
activeSessions(): Promise<RefreshToken[]>;
|
|
37
|
-
/**
|
|
38
|
-
* Attempt to login the user
|
|
39
|
-
*/
|
|
40
|
-
static attempt(this: ChildModel<Auth>, data: any): Promise<Auth | null>;
|
|
41
|
-
/**
|
|
42
|
-
* Confirm password
|
|
43
|
-
*/
|
|
44
|
-
confirmPassword(password: string): boolean;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=auth.d.ts.map
|
package/esm/models/auth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/models/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,8BAAsB,IAAI,CAAC,MAAM,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,KAAK,CAAC,MAAM,CAAC;IACxF;;OAEG;IACH,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;OAEG;IACI,kBAAkB;IAIzB;;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,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIpF;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGlD"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Model } from "@warlock.js/cascade";
|
|
2
|
-
export declare class RefreshToken extends Model {
|
|
3
|
-
/**
|
|
4
|
-
* {@inheritDoc}
|
|
5
|
-
*/
|
|
6
|
-
static table: string;
|
|
7
|
-
/**
|
|
8
|
-
* {@inheritDoc}
|
|
9
|
-
*/
|
|
10
|
-
static schema: any;
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-token.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAc5C,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,OAAc,KAAK,SAAmB;IAEtC;;OAEG;IACH,OAAc,MAAM,MAAsB;IAE1C;;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"}
|