@starklabs/forge 1.3.3 → 1.3.5

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.
Files changed (72) hide show
  1. package/dist/js/auth/refresh.d.ts +2 -5
  2. package/dist/js/auth/refresh.d.ts.map +1 -1
  3. package/dist/js/auth/refresh.js +27 -14
  4. package/dist/js/auth/refresh.js.map +1 -1
  5. package/dist/js/auth/signup.d.ts.map +1 -1
  6. package/dist/js/auth/signup.js +2 -1
  7. package/dist/js/auth/signup.js.map +1 -1
  8. package/dist/js/auth/utils/UAParser.d.ts +11 -0
  9. package/dist/js/auth/utils/UAParser.d.ts.map +1 -0
  10. package/dist/js/auth/utils/UAParser.js +16 -0
  11. package/dist/js/auth/utils/UAParser.js.map +1 -0
  12. package/dist/js/auth/utils/authenticateUser.d.ts.map +1 -1
  13. package/dist/js/auth/utils/authenticateUser.js +19 -1
  14. package/dist/js/auth/utils/authenticateUser.js.map +1 -1
  15. package/dist/js/auth/utils/createUser.d.ts +3 -2
  16. package/dist/js/auth/utils/createUser.d.ts.map +1 -1
  17. package/dist/js/auth/utils/createUser.js +21 -2
  18. package/dist/js/auth/utils/createUser.js.map +1 -1
  19. package/dist/js/auth/utils/findRefreshToken.d.ts +4 -0
  20. package/dist/js/auth/utils/findRefreshToken.d.ts.map +1 -0
  21. package/dist/js/auth/utils/findRefreshToken.js +29 -0
  22. package/dist/js/auth/utils/findRefreshToken.js.map +1 -0
  23. package/dist/js/auth/utils/findRefreshTokenUser.d.ts +4 -0
  24. package/dist/js/auth/utils/findRefreshTokenUser.d.ts.map +1 -0
  25. package/dist/js/auth/utils/findRefreshTokenUser.js +18 -0
  26. package/dist/js/auth/utils/findRefreshTokenUser.js.map +1 -0
  27. package/dist/js/auth/utils/handleRefreshTokenValidation.d.ts +4 -0
  28. package/dist/js/auth/utils/handleRefreshTokenValidation.d.ts.map +1 -0
  29. package/dist/js/auth/utils/handleRefreshTokenValidation.js +24 -0
  30. package/dist/js/auth/utils/handleRefreshTokenValidation.js.map +1 -0
  31. package/dist/js/auth/utils/handleRotateRefreshToken.d.ts +18 -0
  32. package/dist/js/auth/utils/handleRotateRefreshToken.d.ts.map +1 -0
  33. package/dist/js/auth/utils/handleRotateRefreshToken.js +66 -0
  34. package/dist/js/auth/utils/handleRotateRefreshToken.js.map +1 -0
  35. package/dist/js/auth/utils/modeMap.d.ts +2 -1
  36. package/dist/js/auth/utils/modeMap.d.ts.map +1 -1
  37. package/dist/js/auth/utils/returnRotationToken.d.ts +2 -0
  38. package/dist/js/auth/utils/returnRotationToken.d.ts.map +1 -0
  39. package/dist/js/auth/utils/returnRotationToken.js +3 -0
  40. package/dist/js/auth/utils/returnRotationToken.js.map +1 -0
  41. package/dist/js/auth/utils/rotateRefreshToken.d.ts +16 -0
  42. package/dist/js/auth/utils/rotateRefreshToken.d.ts.map +1 -0
  43. package/dist/js/auth/utils/rotateRefreshToken.js +53 -0
  44. package/dist/js/auth/utils/rotateRefreshToken.js.map +1 -0
  45. package/dist/js/auth/utils/sendCookie.d.ts +10 -6
  46. package/dist/js/auth/utils/sendCookie.d.ts.map +1 -1
  47. package/dist/js/auth/utils/sendCookie.js +27 -15
  48. package/dist/js/auth/utils/sendCookie.js.map +1 -1
  49. package/dist/js/config/duration.d.ts +36 -0
  50. package/dist/js/config/duration.d.ts.map +1 -1
  51. package/dist/js/config/duration.js +40 -4
  52. package/dist/js/config/duration.js.map +1 -1
  53. package/dist/js/config/envs.d.ts.map +1 -1
  54. package/dist/js/config/envs.js +4 -2
  55. package/dist/js/config/envs.js.map +1 -1
  56. package/dist/js/config/refreshModel.d.ts.map +1 -1
  57. package/dist/js/config/refreshModel.js +15 -1
  58. package/dist/js/config/refreshModel.js.map +1 -1
  59. package/dist/js/middleware/auth.middleware.d.ts.map +1 -1
  60. package/dist/js/middleware/auth.middleware.js +14 -13
  61. package/dist/js/middleware/auth.middleware.js.map +1 -1
  62. package/dist/js/types/Constructor.d.ts +8 -5
  63. package/dist/js/types/Constructor.d.ts.map +1 -1
  64. package/dist/js/utils/response.d.ts +1 -1
  65. package/dist/js/utils/response.d.ts.map +1 -1
  66. package/dist/js/utils/response.js +6 -4
  67. package/dist/js/utils/response.js.map +1 -1
  68. package/dist/js/utils/saveRefreshToken.d.ts +8 -4
  69. package/dist/js/utils/saveRefreshToken.d.ts.map +1 -1
  70. package/dist/js/utils/saveRefreshToken.js +9 -19
  71. package/dist/js/utils/saveRefreshToken.js.map +1 -1
  72. package/package.json +1 -1
@@ -1,10 +1,7 @@
1
- import type { Route, ValidationsObj } from "../types/Collection.ts";
1
+ import type { Route } from "../types/Collection.ts";
2
2
  import type { Request, Response } from "express";
3
- declare const refresh: ({ routeObj, }: {
4
- modelName: string;
3
+ declare const refresh: ({ routeObj }: {
5
4
  routeObj: Route;
6
- routeName: string;
7
- validationsObj: ValidationsObj;
8
5
  }) => (req: Request, res: Response) => Promise<void>;
9
6
  export default refresh;
10
7
  //# sourceMappingURL=refresh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/js/auth/refresh.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASjD,QAAA,MAAM,OAAO,GAAI,eAEd;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;CAChC,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAoE1C,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/js/auth/refresh.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAajD,QAAA,MAAM,OAAO,GAAI,cAAc;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,MAClC,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAwF1C,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1,14 +1,19 @@
1
1
  import AppError from "../utils/AppError.js";
2
2
  import getErrorDetail from "../utils/getErrorDetail.js";
3
3
  import { verifyJWT } from "../utils/handleJWT.js";
4
- import { findUser } from "../middleware/auth.middleware.js";
5
4
  import { sendCookie } from "./utils/sendCookie.js";
6
5
  import appResponse from "../utils/response.js";
7
6
  import { getEnvs } from "../config/envs.js";
8
- const refresh = ({ routeObj, }) => {
7
+ import tokenInfo from "./utils/UAParser.js";
8
+ import findRefreshToken from "./utils/findRefreshToken.js";
9
+ import handleRefreshTokenValidation from "./utils/handleRefreshTokenValidation.js";
10
+ import findRefreshTokenUser from "./utils/findRefreshTokenUser.js";
11
+ import handleRotateRefreshToken from "./utils/handleRotateRefreshToken.js";
12
+ const refresh = ({ routeObj }) => {
9
13
  return async (req, res) => {
10
14
  const { authConfigObj, userModelName } = getEnvs();
11
- const token = req.cookies?.[authConfigObj.refreshTokenName];
15
+ const { deviceType, jti, deviceName, os, ipAddress, familyId } = tokenInfo(req);
16
+ let token = req.cookies?.[authConfigObj.refreshTokenName];
12
17
  if (!token)
13
18
  throw new AppError({
14
19
  message: "Refresh token is missing",
@@ -21,7 +26,7 @@ const refresh = ({ routeObj, }) => {
21
26
  token,
22
27
  routeObj,
23
28
  });
24
- if (typeof payload === "string" || !payload.sub)
29
+ if (typeof payload === "string" || !payload.sub || !payload.jti)
25
30
  throw new AppError({
26
31
  message: "Refresh token payload is invalid",
27
32
  code: "REFRESH_TOKEN_PAYLOAD_INVALID",
@@ -29,27 +34,35 @@ const refresh = ({ routeObj, }) => {
29
34
  hint: "Sign in again to obtain a valid refresh token.",
30
35
  details: getErrorDetail(routeObj),
31
36
  });
32
- const user = await findUser(payload.sub, routeObj, userModelName);
33
- if (!user)
34
- throw new AppError({
35
- message: "User associated with the refresh token was not found",
36
- code: "REFRESH_USER_NOT_FOUND",
37
- statusCode: 401,
38
- hint: "Sign in again with an existing account.",
39
- details: getErrorDetail(routeObj),
40
- });
37
+ const foundRefreshToken = await findRefreshToken(payload.sub, payload.jti, routeObj);
38
+ await handleRefreshTokenValidation(token, foundRefreshToken.refreshTokenHash, routeObj, payload.owner, payload.jti);
39
+ await findRefreshTokenUser(payload.sub, routeObj);
41
40
  const { accessToken } = sendCookie({
42
41
  res,
43
42
  accessTokenName: authConfigObj.accessTokenName,
43
+ routeObj,
44
44
  accessTokenPayload: {
45
45
  sub: payload.sub,
46
46
  },
47
+ });
48
+ await handleRotateRefreshToken({
49
+ deviceName: deviceName,
50
+ deviceType,
51
+ familyId,
52
+ ipAddress: ipAddress,
53
+ currentTokenJTI: payload.jti,
54
+ rotateTokenJTI: jti,
55
+ os,
56
+ owner: payload.sub,
57
+ res,
47
58
  routeObj,
59
+ iat: payload.iat,
48
60
  });
49
61
  appResponse({
50
62
  res,
51
- message: "Access token renewed successfully!",
63
+ message: "Access token refreshed successfully",
52
64
  accessToken: authConfigObj?.returnAccessToken ? accessToken : undefined,
65
+ refreshToken: authConfigObj?.returnRefreshToken ? token : undefined,
53
66
  });
54
67
  };
55
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/js/auth/refresh.tsx"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,OAAO,GAAG,CAAC,EACf,QAAQ,GAMT,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;QAGnD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,gBAAiB,CAAC,CAAC;QAK7D,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,0BAA0B;gBACnC,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,uDAAuD;gBAC7D,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QAGL,MAAM,OAAO,GAAG,SAAS,CAAC;YACxB,KAAK;YACL,QAAQ;SACT,CAAC,CAAC;QAGH,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG;YAC7C,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,+BAA+B;gBACrC,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,gDAAgD;gBACtD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAGL,MAAM,IAAI,GAAG,MAAM,QAAQ,CACzB,OAAO,CAAC,GAAa,EACrB,QAAQ,EACR,aAAuB,CACxB,CAAC;QAGF,IAAI,CAAC,IAAI;YACP,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,sDAAsD;gBAC/D,IAAI,EAAE,wBAAwB;gBAC9B,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,yCAAyC;gBAC/C,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAGL,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;YACjC,GAAG;YACH,eAAe,EAAE,aAAa,CAAC,eAAgB;YAC/C,kBAAkB,EAAE;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB;YACD,QAAQ;SACT,CAAC,CAAC;QAGH,WAAW,CAAC;YACV,GAAG;YACH,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/js/auth/refresh.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../src/js/auth/signup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASpE,QAAA,MAAM,MAAM,GAAI,qDAKb;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;CAChC,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAsC1C,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../src/js/auth/signup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASpE,QAAA,MAAM,MAAM,GAAI,qDAKb;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;CAChC,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAuC1C,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -30,7 +30,8 @@ const signup = ({ modelName, routeObj, routeName, validationsObj, }) => {
30
30
  routeName,
31
31
  modelName,
32
32
  purpose: "signup",
33
- routeObj
33
+ routeObj,
34
+ req
34
35
  });
35
36
  };
36
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/js/auth/signup.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,cAAc,MAAM,4BAA4B,CAAC;AAGxD,MAAM,MAAM,GAAG,CAAC,EACd,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,GAMf,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAE3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAGjE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAGzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;YACvC,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,kCAAkC;gBAC3C,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,iDAAiD;gBACvD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAGL,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAE,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5D,IAAI,QAAQ;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,mEAAmE;gBACzE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAEL,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAK,CAAC,CAAC;YACnC,IAAI;YACJ,GAAG;YACH,SAAS;YACT,SAAS;YACT,OAAO,EAAE,QAAQ;YACjB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/js/auth/signup.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,cAAc,MAAM,4BAA4B,CAAC;AAGxD,MAAM,MAAM,GAAG,CAAC,EACd,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,GAMf,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAE3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAGjE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAGzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;YACvC,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,kCAAkC;gBAC3C,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,iDAAiD;gBACvD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAGL,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAE,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5D,IAAI,QAAQ;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,mEAAmE;gBACzE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAEL,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAK,CAAC,CAAC;YACnC,IAAI;YACJ,GAAG;YACH,SAAS;YACT,SAAS;YACT,OAAO,EAAE,QAAQ;YACjB,QAAQ;YACR,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Request } from "express";
2
+ declare const tokenInfo: (req: Request) => {
3
+ deviceType: import("ua-parser-js").DeviceTypes;
4
+ deviceName: string | undefined;
5
+ ipAddress: string | undefined;
6
+ os: string;
7
+ jti: string;
8
+ familyId: string;
9
+ };
10
+ export default tokenInfo;
11
+ //# sourceMappingURL=UAParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UAParser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/UAParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,QAAA,MAAM,SAAS,GAAI,KAAK,OAAO;;;;;;;CAY9B,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { UAParser } from "ua-parser-js";
2
+ import crypto from "crypto";
3
+ const tokenInfo = (req) => {
4
+ const parser = new UAParser(req.get("user-agent"));
5
+ const result = parser.getResult();
6
+ return {
7
+ deviceType: result.device.type || "desktop",
8
+ deviceName: result.device.model || undefined,
9
+ ipAddress: req.ip || undefined,
10
+ os: `${result.os.name} ${result.os.version || ""}`,
11
+ jti: crypto.randomBytes(16).toString("hex"),
12
+ familyId: crypto.randomBytes(16).toString("hex"),
13
+ };
14
+ };
15
+ export default tokenInfo;
16
+ //# sourceMappingURL=UAParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UAParser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/UAParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,SAAS,GAAG,CAAC,GAAY,EAAE,EAAE;IACjC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAElC,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS;QAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;QAC5C,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS;QAC9B,EAAE,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,EAAE;QAClD,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC3C,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACjD,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"authenticateUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,gBAAgB,GAAU,qDAO7B;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,kBAuEA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"authenticateUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAOvD,QAAA,MAAM,gBAAgB,GAAU,qDAO7B;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,kBA0FA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -9,8 +9,11 @@ import { sendCookie } from "./sendCookie.js";
9
9
  import getErrorDetail from "../../utils/getErrorDetail.js";
10
10
  import { getEnvs } from "../../config/envs.js";
11
11
  import saveRefreshToken from "../../utils/saveRefreshToken.js";
12
+ import tokenInfo from "./UAParser.js";
13
+ import { hash } from "../../utils/libsodium.js";
12
14
  const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj, }) => {
13
15
  const OTPModel = getOTPModel(routeObj);
16
+ const { deviceType, familyId, jti, deviceName, ipAddress, os } = tokenInfo(req);
14
17
  const { authConfigObj } = getEnvs();
15
18
  let isVerified = false;
16
19
  let isOTPUser = null;
@@ -49,8 +52,23 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
49
52
  accessTokenPayload: { sub: _id },
50
53
  refreshTokenPayload: { sub: _id },
51
54
  routeObj,
55
+ deviceType,
56
+ familyId,
57
+ jti,
58
+ });
59
+ const hashedToken = await hash(refreshToken);
60
+ await saveRefreshToken({
61
+ hashedToken,
62
+ refreshTokenAge,
63
+ _id,
64
+ routeObj,
65
+ jti: jti,
66
+ familyId,
67
+ deviceName,
68
+ deviceType,
69
+ ipAddress,
70
+ os,
52
71
  });
53
- await saveRefreshToken({ req, refreshToken: refreshToken, refreshTokenAge, _id, routeObj });
54
72
  appResponse({
55
73
  res,
56
74
  message: "Authenticated successfully!",
@@ -1 +1 @@
1
- {"version":3,"file":"authenticateUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAE/D,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,IAAI,EACJ,SAAS,EACT,GAAG,EACH,GAAG,EACH,SAAS,EACT,QAAQ,GAQT,EAAE,EAAE;IAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAGvC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAGpC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,SAAS,GAAQ,IAAI,CAAC;IAE1B,IAAI,YAAY,IAAI,IAAI;QACtB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,OAAO,EAAE,OAAO;YAChB,QAAQ;SACT,CAAC,CAAC,CAAC;IAGN,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;QACzB,SAAS;QACT,SAAS;QACT,KAAK,EAAE,IAAI,CAAC,KAAe;QAC3B,YAAY,EAAE,IAAI;QAClB,QAAQ;KACT,CAAC,CAAC;IAGH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzE,IAAI,CAAC,OAAO;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,mBAAmB;gBAC5B,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;IAGD,IAAI,UAAU;QACZ,MAAM,QAAS,CAAC,SAAS,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IAEL,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAGhC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;QAChE,GAAG;QACH,eAAe,EAAE,aAAa,CAAC,eAAgB;QAC/C,gBAAgB,EAAE,aAAa,CAAC,gBAAiB;QACjD,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;QAChC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;QACjC,QAAQ;KACT,CAAC,CAAC;IAGH,MAAM,gBAAgB,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,YAAa,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAG7F,WAAW,CAAC;QACV,GAAG;QACH,OAAO,EAAE,6BAA6B;QACtC,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;QAC5C,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACvE,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,YAAa,CAAC,CAAC,CAAC,SAAS;QAC3E,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"authenticateUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- import type { Response } from "express";
1
+ import type { Response, Request } from "express";
2
2
  import type { Route } from "../../types/Collection.js";
3
- declare const createUser: ({ body, modelName, res, routeName, routeObj, }: {
3
+ declare const createUser: ({ body, modelName, res, routeName, routeObj, req, }: {
4
4
  body: any;
5
5
  modelName: string;
6
6
  res: Response;
7
7
  routeName: string;
8
8
  routeObj: Route;
9
+ req: Request;
9
10
  }) => Promise<void>;
10
11
  export default createUser;
11
12
  //# sourceMappingURL=createUser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,UAAU,GAAU,gDAMvB;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,kBAwDA,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"createUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AASjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,UAAU,GAAU,qDAOvB;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd,kBA+EA,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -7,9 +7,12 @@ import getOTPModel from "./getOTPModel.js";
7
7
  import handleIsVerified from "./handleIsVerified.js";
8
8
  import { sendCookie } from "./sendCookie.js";
9
9
  import { getEnvs } from "../../config/envs.js";
10
- const createUser = async ({ body, modelName, res, routeName, routeObj, }) => {
10
+ import tokenInfo from "./UAParser.js";
11
+ import saveRefreshToken from "../../utils/saveRefreshToken.js";
12
+ const createUser = async ({ body, modelName, res, routeName, routeObj, req, }) => {
11
13
  const Model = getModel({ modelName, routeName, routeObj });
12
14
  const OTPModel = getOTPModel(routeObj);
15
+ const { deviceType, familyId, jti, deviceName, ipAddress, os } = tokenInfo(req);
13
16
  const { authConfigObj } = getEnvs();
14
17
  let isVerified = false;
15
18
  let isOTPUser = null;
@@ -32,13 +35,29 @@ const createUser = async ({ body, modelName, res, routeName, routeObj, }) => {
32
35
  if (isVerified)
33
36
  await OTPModel.deleteOne({ _id: isOTPUser._id });
34
37
  const { _id } = newUser.toObject();
35
- const { accessToken, refreshToken } = sendCookie({
38
+ const { accessToken, refreshToken, refreshTokenAge } = sendCookie({
36
39
  res,
37
40
  accessTokenName: authConfigObj.accessTokenName,
38
41
  refreshTokenName: authConfigObj.refreshTokenName,
39
42
  accessTokenPayload: { sub: _id },
40
43
  refreshTokenPayload: { sub: _id },
41
44
  routeObj,
45
+ deviceType,
46
+ familyId,
47
+ jti,
48
+ });
49
+ const hashedToken = await hash(refreshToken);
50
+ await saveRefreshToken({
51
+ hashedToken,
52
+ refreshTokenAge,
53
+ _id,
54
+ routeObj,
55
+ jti: jti,
56
+ familyId,
57
+ deviceName,
58
+ deviceType,
59
+ os,
60
+ ipAddress,
42
61
  });
43
62
  appResponse({
44
63
  res,
@@ -1 +1 @@
1
- {"version":3,"file":"createUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,UAAU,GAAG,KAAK,EAAE,EACxB,IAAI,EACJ,SAAS,EACT,GAAG,EACH,SAAS,EACT,QAAQ,GAOT,EAAE,EAAE;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAGvC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAGpC,IAAI,UAAU,GAAY,KAAK,CAAC;IAChC,IAAI,SAAS,GAAQ,IAAI,CAAC;IAC1B,IAAI,YAAY,IAAI,IAAI;QACtB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,KAAe;YAC3B,OAAO,EAAE,QAAQ;YACjB,QAAQ;SACT,CAAC,CAAC,CAAC;IAGN,IAAI,IAAI,YAAY,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,CAAC;IAGD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAGzC,IAAI,UAAU;QAAE,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAEjE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAGnC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;QAC/C,GAAG;QACH,eAAe,EAAE,aAAa,CAAC,eAAgB;QAC/C,gBAAgB,EAAE,aAAa,CAAC,gBAAiB;QACjD,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;QAChC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;QACjC,QAAQ;KACT,CAAC,CAAC;IAGH,WAAW,CAAC;QACV,GAAG;QACH,OAAO,EAAE,6CAA6C;QACtD,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;QAC/C,WAAW,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACvE,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,YAAa,CAAC,CAAC,CAAC,SAAS;QAC3E,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"createUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Route } from "../../types/Collection.js";
2
+ declare const findRefreshToken: (owner: string, jti: string, routeObj: Route) => Promise<any>;
3
+ export default findRefreshToken;
4
+ //# sourceMappingURL=findRefreshToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findRefreshToken.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/findRefreshToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,gBAAgB,GACpB,OAAO,MAAM,EACb,KAAK,MAAM,EACX,UAAU,KAAK,iBAgChB,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import getModel from "../../utils/getModel.js";
2
+ import AppError from "../../utils/AppError.js";
3
+ import getErrorDetail from "../../utils/getErrorDetail.js";
4
+ const findRefreshToken = async (owner, jti, routeObj) => {
5
+ const RefreshToken = getModel({ modelName: "RefreshToken", routeObj });
6
+ const foundRefreshToken = await RefreshToken.findOne({
7
+ owner,
8
+ jti,
9
+ });
10
+ if (!foundRefreshToken)
11
+ throw new AppError({
12
+ message: "Refresh token session was not found",
13
+ code: "REFRESH_TOKEN_NOT_FOUND",
14
+ hint: "Sign in again to create a new authentication session.",
15
+ details: getErrorDetail(routeObj),
16
+ statusCode: 401,
17
+ });
18
+ if (foundRefreshToken.revoked)
19
+ throw new AppError({
20
+ message: "Refresh token has been revoked",
21
+ code: "REFRESH_TOKEN_REVOKED",
22
+ statusCode: 401,
23
+ hint: "Sign in again to create a new authentication session.",
24
+ details: getErrorDetail(routeObj),
25
+ });
26
+ return foundRefreshToken;
27
+ };
28
+ export default findRefreshToken;
29
+ //# sourceMappingURL=findRefreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findRefreshToken.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/findRefreshToken.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,gBAAgB,GAAG,KAAK,EAC5B,KAAa,EACb,GAAW,EACX,QAAe,EACf,EAAE;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;IAGvE,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;QACnD,KAAK;QACL,GAAG;KACJ,CAAC,CAAC;IAGH,IAAI,CAAC,iBAAiB;QACpB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,qCAAqC;YAC9C,IAAI,EAAE,yBAAyB;YAC/B,IAAI,EAAE,uDAAuD;YAC7D,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IAGL,IAAI,iBAAiB,CAAC,OAAO;QAC3B,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,gCAAgC;YACzC,IAAI,EAAE,uBAAuB;YAC7B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uDAAuD;YAC7D,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IAEL,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AACF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Route } from "../../types/Collection.js";
2
+ declare const findRefreshTokenUser: (id: string, routeObj: Route) => Promise<void>;
3
+ export default findRefreshTokenUser;
4
+ //# sourceMappingURL=findRefreshTokenUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findRefreshTokenUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/findRefreshTokenUser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,oBAAoB,GAAU,IAAI,MAAM,EAAE,UAAU,KAAK,kBAc9D,CAAC;AACF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { findUser } from "../../middleware/auth.middleware.js";
2
+ import { getEnvs } from "../../config/envs.js";
3
+ import AppError from "../../utils/AppError.js";
4
+ import getErrorDetail from "../../utils/getErrorDetail.js";
5
+ const findRefreshTokenUser = async (id, routeObj) => {
6
+ const { userModelName } = getEnvs();
7
+ const user = await findUser(id, routeObj, userModelName);
8
+ if (!user)
9
+ throw new AppError({
10
+ message: "User associated with the refresh token was not found",
11
+ code: "REFRESH_USER_NOT_FOUND",
12
+ statusCode: 401,
13
+ hint: "Sign in again with an existing account.",
14
+ details: getErrorDetail(routeObj),
15
+ });
16
+ };
17
+ export default findRefreshTokenUser;
18
+ //# sourceMappingURL=findRefreshTokenUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findRefreshTokenUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/findRefreshTokenUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAU,EAAE,QAAe,EAAE,EAAE;IACjE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAuB,CAAC,CAAC;IAGnE,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,wBAAwB;YAC9B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,yCAAyC;YAC/C,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;AACP,CAAC,CAAC;AACF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Route } from "../../types/Collection.js";
2
+ declare const handleRefreshTokenValidation: (token: string, hash: string, routeObj: Route, owner: string, jti: string) => Promise<void>;
3
+ export default handleRefreshTokenValidation;
4
+ //# sourceMappingURL=handleRefreshTokenValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleRefreshTokenValidation.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleRefreshTokenValidation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,4BAA4B,GAChC,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,UAAU,KAAK,EACf,OAAO,MAAM,EACb,KAAK,MAAM,kBAuBZ,CAAC;AACF,eAAe,4BAA4B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { verifyHash } from "../../utils/libsodium.js";
2
+ import AppError from "../../utils/AppError.js";
3
+ import getModel from "../../utils/getModel.js";
4
+ import getErrorDetail from "../../utils/getErrorDetail.js";
5
+ const handleRefreshTokenValidation = async (token, hash, routeObj, owner, jti) => {
6
+ const RefreshToken = getModel({ modelName: "RefreshToken", routeObj });
7
+ const isValid = await verifyHash(token, hash, routeObj);
8
+ if (!isValid) {
9
+ await RefreshToken.updateOne({
10
+ owner,
11
+ jti,
12
+ revoked: false,
13
+ }, { $set: { revoked: true } });
14
+ throw new AppError({
15
+ message: "Refresh token is invalid",
16
+ code: "REFRESH_TOKEN_INVALID",
17
+ statusCode: 401,
18
+ hint: "Sign in again to create a new authentication session.",
19
+ details: getErrorDetail(routeObj),
20
+ });
21
+ }
22
+ };
23
+ export default handleRefreshTokenValidation;
24
+ //# sourceMappingURL=handleRefreshTokenValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleRefreshTokenValidation.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleRefreshTokenValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,4BAA4B,GAAG,KAAK,EACxC,KAAa,EACb,IAAY,EACZ,QAAe,EACf,KAAa,EACb,GAAW,EACX,EAAE;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,YAAY,CAAC,SAAS,CAC1B;YACE,KAAK;YACL,GAAG;YACH,OAAO,EAAE,KAAK;SACf,EACD,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAC5B,CAAC;QACF,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,uBAAuB;YAC7B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uDAAuD;YAC7D,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AACF,eAAe,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Response } from "express";
2
+ import type { Route } from "../../types/Collection.js";
3
+ export interface ROTATE_REFRESH_TOKEN {
4
+ owner: string;
5
+ currentTokenJTI: string;
6
+ rotateTokenJTI: string;
7
+ deviceType: string;
8
+ familyId: string;
9
+ res: Response;
10
+ routeObj: Route;
11
+ deviceName: string;
12
+ ipAddress: string;
13
+ os: string;
14
+ iat: number;
15
+ }
16
+ declare const handleRotateRefreshToken: ({ owner, currentTokenJTI, rotateTokenJTI, deviceType, familyId, res, routeObj, deviceName, ipAddress, os, iat, }: ROTATE_REFRESH_TOKEN) => Promise<string | null | undefined>;
17
+ export default handleRotateRefreshToken;
18
+ //# sourceMappingURL=handleRotateRefreshToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleRotateRefreshToken.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleRotateRefreshToken.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,QAAA,MAAM,wBAAwB,GAAU,kHAYrC,oBAAoB,uCAoFtB,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import getModel from "../../utils/getModel.js";
2
+ import { sendCookie } from "./sendCookie.js";
3
+ import { getEnvs } from "../../config/envs.js";
4
+ import { hash } from "../../utils/libsodium.js";
5
+ import saveRefreshToken from "../../utils/saveRefreshToken.js";
6
+ import getDuration from "../../config/duration.js";
7
+ const handleRotateRefreshToken = async ({ owner, currentTokenJTI, rotateTokenJTI, deviceType, familyId, res, routeObj, deviceName, ipAddress, os, iat, }) => {
8
+ const RefreshToken = getModel({ modelName: "RefreshToken" });
9
+ const { authConfigObj } = getEnvs();
10
+ const { refreshTokenName, rotateRefreshToken, refreshTokenRotationInterval } = authConfigObj;
11
+ let REFRESH_TOKEN = null;
12
+ const updateLastUsed = async () => {
13
+ await RefreshToken.updateOne({
14
+ owner,
15
+ jti: currentTokenJTI,
16
+ revoked: false,
17
+ }, { $set: { lastUsedAt: Date.now() } });
18
+ };
19
+ if (!rotateRefreshToken) {
20
+ await updateLastUsed();
21
+ }
22
+ else {
23
+ const rotationInterval = getDuration(refreshTokenRotationInterval, routeObj);
24
+ if (!!rotationInterval) {
25
+ const timeLeft = iat * 1000 + rotationInterval;
26
+ if (timeLeft > Date.now()) {
27
+ await updateLastUsed();
28
+ return;
29
+ }
30
+ }
31
+ const { refreshToken, refreshTokenAge } = sendCookie({
32
+ deviceType,
33
+ refreshTokenName: refreshTokenName,
34
+ jti: rotateTokenJTI,
35
+ familyId,
36
+ refreshTokenPayload: {
37
+ sub: owner,
38
+ },
39
+ res,
40
+ routeObj,
41
+ });
42
+ REFRESH_TOKEN = refreshToken;
43
+ const hashedToken = await hash(refreshToken);
44
+ await RefreshToken.updateMany({
45
+ owner,
46
+ refreshTokenHash: { $ne: hashedToken },
47
+ familyId,
48
+ revoked: false,
49
+ }, { $set: { revoked: true } });
50
+ await saveRefreshToken({
51
+ _id: owner,
52
+ familyId,
53
+ jti: rotateTokenJTI,
54
+ hashedToken,
55
+ refreshTokenAge,
56
+ routeObj,
57
+ deviceName,
58
+ deviceType,
59
+ ipAddress,
60
+ os,
61
+ });
62
+ }
63
+ return REFRESH_TOKEN;
64
+ };
65
+ export default handleRotateRefreshToken;
66
+ //# sourceMappingURL=handleRotateRefreshToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleRotateRefreshToken.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleRotateRefreshToken.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAgBnD,MAAM,wBAAwB,GAAG,KAAK,EAAE,EACtC,KAAK,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,QAAQ,EACR,GAAG,EACH,QAAQ,EACR,UAAU,EACV,SAAS,EACT,EAAE,EACF,GAAG,GACkB,EAAE,EAAE;IACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,GAC1E,aAAa,CAAC;IAEhB,IAAI,aAAa,GAAG,IAAI,CAAC;IAGzB,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,YAAY,CAAC,SAAS,CAC1B;YACE,KAAK;YACL,GAAG,EAAE,eAAe;YACpB,OAAO,EAAE,KAAK;SACf,EACD,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CACrC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAExB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;SAAM,CAAC;QAEN,MAAM,gBAAgB,GAAG,WAAW,CAClC,4BAA6B,EAC7B,QAAQ,CACT,CAAC;QAEF,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,gBAAgB,CAAC;YAE/C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAC1B,MAAM,cAAc,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;QACH,CAAC;QAGD,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;YACnD,UAAU;YACV,gBAAgB,EAAE,gBAAiB;YACnC,GAAG,EAAE,cAAc;YACnB,QAAQ;YACR,mBAAmB,EAAE;gBACnB,GAAG,EAAE,KAAK;aACX;YACD,GAAG;YACH,QAAQ;SACT,CAAC,CAAC;QAEH,aAAa,GAAG,YAAY,CAAC;QAG7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAa,CAAC,CAAC;QAG9C,MAAM,YAAY,CAAC,UAAU,CAC3B;YACE,KAAK;YACL,gBAAgB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE;YACtC,QAAQ;YACR,OAAO,EAAE,KAAK;SACf,EACD,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAC5B,CAAC;QAEF,MAAM,gBAAgB,CAAC;YACrB,GAAG,EAAE,KAAK;YACV,QAAQ;YACR,GAAG,EAAE,cAAc;YACnB,WAAW;YACX,eAAe;YACf,QAAQ;YACR,UAAU;YACV,UAAU;YACV,SAAS;YACT,EAAE;SACH,CAAC,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -8,12 +8,13 @@ declare const modeMap: {
8
8
  modelName: string;
9
9
  routeObj: import("../../types/Collection.js").Route;
10
10
  }) => Promise<void>;
11
- credentials: ({ body, modelName, res, routeName, routeObj, }: {
11
+ credentials: ({ body, modelName, res, routeName, routeObj, req, }: {
12
12
  body: any;
13
13
  modelName: string;
14
14
  res: import("express").Response;
15
15
  routeName: string;
16
16
  routeObj: import("../../types/Collection.js").Route;
17
+ req: import("express").Request;
17
18
  }) => Promise<void>;
18
19
  };
19
20
  login: {
@@ -1 +1 @@
1
- {"version":3,"file":"modeMap.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/modeMap.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"modeMap.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/modeMap.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=returnRotationToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"returnRotationToken.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/returnRotationToken.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ const ;
2
+ export {};
3
+ //# sourceMappingURL=returnRotationToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"returnRotationToken.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/returnRotationToken.ts"],"names":[],"mappings":"AAAA,MAAK,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { Response } from "express";
2
+ import type { Route } from "../../types/Collection.js";
3
+ export interface ROTATE_REFRESH_TOKEN {
4
+ owner: string;
5
+ jti: string;
6
+ deviceType: string;
7
+ familyId: string;
8
+ res: Response;
9
+ routeObj: Route;
10
+ deviceName: string;
11
+ ipAddress: string;
12
+ os: string;
13
+ }
14
+ declare const handleRotateRefreshToken: ({ owner, jti, deviceType, familyId, res, routeObj, deviceName, ipAddress, os, }: ROTATE_REFRESH_TOKEN) => Promise<string | null>;
15
+ export default handleRotateRefreshToken;
16
+ //# sourceMappingURL=rotateRefreshToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotateRefreshToken.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/rotateRefreshToken.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,QAAA,MAAM,wBAAwB,GAAU,iFAUrC,oBAAoB,2BA6DtB,CAAC;AAEF,eAAe,wBAAwB,CAAC"}