@starklabs/forge 1.3.22 → 1.3.24-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/js/account/index.d.ts +1 -1
- package/dist/js/account/index.d.ts.map +1 -1
- package/dist/js/account/index.js +14 -7
- package/dist/js/account/index.js.map +1 -1
- package/dist/js/account/me.delete.d.ts +2 -2
- package/dist/js/account/me.delete.d.ts.map +1 -1
- package/dist/js/account/me.delete.js +15 -6
- package/dist/js/account/me.delete.js.map +1 -1
- package/dist/js/account/me.update.d.ts +3 -3
- package/dist/js/account/me.update.d.ts.map +1 -1
- package/dist/js/account/me.update.js +20 -7
- package/dist/js/account/me.update.js.map +1 -1
- package/dist/js/app.js +21 -8
- package/dist/js/app.js.map +1 -1
- package/dist/js/auth/builtin/auth.collection.js +11 -11
- package/dist/js/auth/builtin/auth.collection.js.map +1 -1
- package/dist/js/auth/forgotPassword.d.ts +4 -4
- package/dist/js/auth/forgotPassword.d.ts.map +1 -1
- package/dist/js/auth/forgotPassword.js +12 -6
- package/dist/js/auth/forgotPassword.js.map +1 -1
- package/dist/js/auth/index.d.ts +1 -1
- package/dist/js/auth/index.d.ts.map +1 -1
- package/dist/js/auth/index.js +16 -8
- package/dist/js/auth/index.js.map +1 -1
- package/dist/js/auth/login.d.ts +4 -4
- package/dist/js/auth/login.d.ts.map +1 -1
- package/dist/js/auth/login.js +8 -4
- package/dist/js/auth/login.js.map +1 -1
- package/dist/js/auth/logout.js +6 -1
- package/dist/js/auth/logout.js.map +1 -1
- package/dist/js/auth/refresh.js +9 -0
- package/dist/js/auth/refresh.js.map +1 -1
- package/dist/js/auth/resendOTP.d.ts +4 -4
- package/dist/js/auth/resendOTP.d.ts.map +1 -1
- package/dist/js/auth/resendOTP.js +14 -4
- package/dist/js/auth/resendOTP.js.map +1 -1
- package/dist/js/auth/resetPassword.d.ts +4 -4
- package/dist/js/auth/resetPassword.d.ts.map +1 -1
- package/dist/js/auth/resetPassword.js +14 -4
- package/dist/js/auth/resetPassword.js.map +1 -1
- package/dist/js/auth/signup.d.ts +4 -4
- package/dist/js/auth/signup.d.ts.map +1 -1
- package/dist/js/auth/signup.js +10 -5
- package/dist/js/auth/signup.js.map +1 -1
- package/dist/js/auth/utils/authenticateUser.d.ts +3 -3
- package/dist/js/auth/utils/authenticateUser.d.ts.map +1 -1
- package/dist/js/auth/utils/authenticateUser.js +13 -3
- package/dist/js/auth/utils/authenticateUser.js.map +1 -1
- package/dist/js/auth/utils/createOTPModel.d.ts +1 -1
- package/dist/js/auth/utils/createOTPModel.d.ts.map +1 -1
- package/dist/js/auth/utils/createOTPModel.js +8 -3
- package/dist/js/auth/utils/createOTPModel.js.map +1 -1
- package/dist/js/auth/utils/createOTPUser.d.ts +3 -3
- package/dist/js/auth/utils/createOTPUser.d.ts.map +1 -1
- package/dist/js/auth/utils/createOTPUser.js +11 -3
- package/dist/js/auth/utils/createOTPUser.js.map +1 -1
- package/dist/js/auth/utils/createUser.d.ts +3 -3
- package/dist/js/auth/utils/createUser.d.ts.map +1 -1
- package/dist/js/auth/utils/createUser.js +12 -2
- package/dist/js/auth/utils/createUser.js.map +1 -1
- package/dist/js/auth/utils/findRefreshToken.js +5 -1
- package/dist/js/auth/utils/findRefreshToken.js.map +1 -1
- package/dist/js/auth/utils/findRefreshTokenUser.js +1 -0
- package/dist/js/auth/utils/findRefreshTokenUser.js.map +1 -1
- package/dist/js/auth/utils/getOTPUser.js +3 -0
- package/dist/js/auth/utils/getOTPUser.js.map +1 -1
- package/dist/js/auth/utils/getUser.d.ts +3 -3
- package/dist/js/auth/utils/getUser.d.ts.map +1 -1
- package/dist/js/auth/utils/getUser.js +6 -2
- package/dist/js/auth/utils/getUser.js.map +1 -1
- package/dist/js/auth/utils/handleRefreshTokenValidation.js +7 -1
- package/dist/js/auth/utils/handleRefreshTokenValidation.js.map +1 -1
- package/dist/js/auth/utils/handleRotateRefreshToken.js +7 -1
- package/dist/js/auth/utils/handleRotateRefreshToken.js.map +1 -1
- package/dist/js/auth/utils/modeMap.d.ts +12 -12
- package/dist/js/auth/utils/otpVerifiedResponse.js +1 -0
- package/dist/js/auth/utils/otpVerifiedResponse.js.map +1 -1
- package/dist/js/auth/utils/sendCookie.js +10 -0
- package/dist/js/auth/utils/sendCookie.js.map +1 -1
- package/dist/js/auth/utils/verifyCredentials.d.ts +3 -3
- package/dist/js/auth/utils/verifyCredentials.d.ts.map +1 -1
- package/dist/js/auth/utils/verifyCredentials.js +8 -6
- package/dist/js/auth/utils/verifyCredentials.js.map +1 -1
- package/dist/js/auth/verifyOTP.d.ts +4 -4
- package/dist/js/auth/verifyOTP.d.ts.map +1 -1
- package/dist/js/auth/verifyOTP.js +18 -5
- package/dist/js/auth/verifyOTP.js.map +1 -1
- package/dist/js/config/cloudinary.js +1 -0
- package/dist/js/config/cloudinary.js.map +1 -1
- package/dist/js/config/duration.js +7 -0
- package/dist/js/config/duration.js.map +1 -1
- package/dist/js/config/envs.js +23 -3
- package/dist/js/config/envs.js.map +1 -1
- package/dist/js/config/handleReqType.d.ts +1 -1
- package/dist/js/config/handleReqType.d.ts.map +1 -1
- package/dist/js/config/handleReqType.js +4 -3
- package/dist/js/config/handleReqType.js.map +1 -1
- package/dist/js/config/handlerMap.js +4 -0
- package/dist/js/config/handlerMap.js.map +1 -1
- package/dist/js/config/refreshModel.js +1 -0
- package/dist/js/config/refreshModel.js.map +1 -1
- package/dist/js/config/sendEmail.js +1 -0
- package/dist/js/config/sendEmail.js.map +1 -1
- package/dist/js/crud/bunch.crud.js +2 -0
- package/dist/js/crud/bunch.crud.js.map +1 -1
- package/dist/js/crud/create.d.ts +4 -4
- package/dist/js/crud/create.d.ts.map +1 -1
- package/dist/js/crud/create.js +23 -8
- package/dist/js/crud/create.js.map +1 -1
- package/dist/js/crud/createBulk.d.ts +4 -4
- package/dist/js/crud/createBulk.d.ts.map +1 -1
- package/dist/js/crud/createBulk.js +8 -3
- package/dist/js/crud/createBulk.js.map +1 -1
- package/dist/js/crud/email/index.d.ts +2 -0
- package/dist/js/crud/email/index.d.ts.map +1 -0
- package/dist/js/crud/email/index.js +2 -0
- package/dist/js/crud/email/index.js.map +1 -0
- package/dist/js/crud/encryption/handleDecryption.js +8 -3
- package/dist/js/crud/encryption/handleDecryption.js.map +1 -1
- package/dist/js/crud/encryption/handleEncryption.js +7 -3
- package/dist/js/crud/encryption/handleEncryption.js.map +1 -1
- package/dist/js/crud/handleUploads/file.add.d.ts +4 -4
- package/dist/js/crud/handleUploads/file.add.d.ts.map +1 -1
- package/dist/js/crud/handleUploads/file.add.js +16 -9
- package/dist/js/crud/handleUploads/file.add.js.map +1 -1
- package/dist/js/crud/handleUploads/file.delete.d.ts +4 -4
- package/dist/js/crud/handleUploads/file.delete.d.ts.map +1 -1
- package/dist/js/crud/handleUploads/file.delete.js +14 -5
- package/dist/js/crud/handleUploads/file.delete.js.map +1 -1
- package/dist/js/crud/handleUploads/file.update.d.ts +4 -4
- package/dist/js/crud/handleUploads/file.update.d.ts.map +1 -1
- package/dist/js/crud/handleUploads/file.update.js +15 -5
- package/dist/js/crud/handleUploads/file.update.js.map +1 -1
- package/dist/js/crud/index.d.ts +1 -1
- package/dist/js/crud/index.d.ts.map +1 -1
- package/dist/js/crud/index.js +18 -11
- package/dist/js/crud/index.js.map +1 -1
- package/dist/js/crud/read.d.ts +4 -4
- package/dist/js/crud/read.d.ts.map +1 -1
- package/dist/js/crud/read.js +18 -9
- package/dist/js/crud/read.js.map +1 -1
- package/dist/js/crud/readAll.d.ts +3 -3
- package/dist/js/crud/readAll.d.ts.map +1 -1
- package/dist/js/crud/readAll.js +16 -8
- package/dist/js/crud/readAll.js.map +1 -1
- package/dist/js/crud/remove.d.ts +3 -3
- package/dist/js/crud/remove.d.ts.map +1 -1
- package/dist/js/crud/remove.js +19 -8
- package/dist/js/crud/remove.js.map +1 -1
- package/dist/js/crud/removeAll.d.ts +3 -3
- package/dist/js/crud/removeAll.d.ts.map +1 -1
- package/dist/js/crud/removeAll.js +13 -5
- package/dist/js/crud/removeAll.js.map +1 -1
- package/dist/js/crud/removeMultiple.d.ts +4 -4
- package/dist/js/crud/removeMultiple.d.ts.map +1 -1
- package/dist/js/crud/removeMultiple.js +18 -7
- package/dist/js/crud/removeMultiple.js.map +1 -1
- package/dist/js/crud/security/handleDecryption.js +8 -3
- package/dist/js/crud/security/handleDecryption.js.map +1 -1
- package/dist/js/crud/security/handleEncryption.js +7 -3
- package/dist/js/crud/security/handleEncryption.js.map +1 -1
- package/dist/js/crud/security/handleHashing.js +8 -3
- package/dist/js/crud/security/handleHashing.js.map +1 -1
- package/dist/js/crud/update.d.ts +4 -4
- package/dist/js/crud/update.d.ts.map +1 -1
- package/dist/js/crud/update.js +24 -9
- package/dist/js/crud/update.js.map +1 -1
- package/dist/js/crud/utils/authorizeAccess.d.ts +2 -2
- package/dist/js/crud/utils/authorizeAccess.d.ts.map +1 -1
- package/dist/js/crud/utils/authorizeAccess.js +19 -13
- package/dist/js/crud/utils/authorizeAccess.js.map +1 -1
- package/dist/js/crud/utils/getItem.d.ts +3 -3
- package/dist/js/crud/utils/getItem.d.ts.map +1 -1
- package/dist/js/crud/utils/getItem.js +18 -9
- package/dist/js/crud/utils/getItem.js.map +1 -1
- package/dist/js/health/health.collection.js +11 -11
- package/dist/js/health/health.collection.js.map +1 -1
- package/dist/js/health/index.d.ts +1 -1
- package/dist/js/health/index.d.ts.map +1 -1
- package/dist/js/health/index.js +2 -2
- package/dist/js/health/index.js.map +1 -1
- package/dist/js/lib/OAuthProviders.js +1 -1
- package/dist/js/lib/OAuthProviders.js.map +1 -1
- package/dist/js/lib/db.js +1 -0
- package/dist/js/lib/db.js.map +1 -1
- package/dist/js/lib/model.factory.d.ts +10 -1
- package/dist/js/lib/model.factory.d.ts.map +1 -1
- package/dist/js/lib/model.factory.js +18 -4
- package/dist/js/lib/model.factory.js.map +1 -1
- package/dist/js/lib/model.registry.js +1 -0
- package/dist/js/lib/model.registry.js.map +1 -1
- package/dist/js/lib/mongoose.fields.js +20 -0
- package/dist/js/lib/mongoose.fields.js.map +1 -1
- package/dist/js/lib/schema.builder.js +3 -0
- package/dist/js/lib/schema.builder.js.map +1 -1
- package/dist/js/lib/unified.fields.d.ts +5 -0
- package/dist/js/lib/unified.fields.d.ts.map +1 -1
- package/dist/js/lib/unified.fields.js +58 -2
- package/dist/js/lib/unified.fields.js.map +1 -1
- package/dist/js/lib/unified.types.d.ts +3 -0
- package/dist/js/lib/unified.types.d.ts.map +1 -1
- package/dist/js/lib/zod.factory.d.ts +13 -0
- package/dist/js/lib/zod.factory.d.ts.map +1 -1
- package/dist/js/lib/zod.factory.js +14 -0
- package/dist/js/lib/zod.factory.js.map +1 -1
- package/dist/js/lib/zod.fields.d.ts +55 -0
- package/dist/js/lib/zod.fields.d.ts.map +1 -1
- package/dist/js/lib/zod.fields.js +56 -0
- package/dist/js/lib/zod.fields.js.map +1 -1
- package/dist/js/middleware/error.middleware.js +1 -0
- package/dist/js/middleware/error.middleware.js.map +1 -1
- package/dist/js/middleware/multer.middleware.d.ts +1 -1
- package/dist/js/middleware/multer.middleware.d.ts.map +1 -1
- package/dist/js/middleware/multer.middleware.js +22 -7
- package/dist/js/middleware/multer.middleware.js.map +1 -1
- package/dist/js/terminal/appInfo.js +11 -11
- package/dist/js/terminal/appInfo.js.map +1 -1
- package/dist/js/terminal/logger.js +1 -1
- package/dist/js/terminal/logger.js.map +1 -1
- package/dist/js/types/ActionHandler.d.ts +86 -11
- package/dist/js/types/ActionHandler.d.ts.map +1 -1
- package/dist/js/types/Collection.d.ts +104 -15
- package/dist/js/types/Collection.d.ts.map +1 -1
- package/dist/js/types/Constructor.d.ts +1 -1
- package/dist/js/types/Constructor.d.ts.map +1 -1
- package/dist/js/types/Route.d.ts +131 -14
- package/dist/js/types/Route.d.ts.map +1 -1
- package/dist/js/types/Routepath.js +15 -0
- package/dist/js/types/Routepath.js.map +1 -1
- package/dist/js/types/email.js +13 -0
- package/dist/js/types/email.js.map +1 -1
- package/dist/js/types/upload.d.ts +57 -5
- package/dist/js/types/upload.d.ts.map +1 -1
- package/dist/js/upload/create.js +9 -6
- package/dist/js/upload/create.js.map +1 -1
- package/dist/js/upload/delete.js +21 -21
- package/dist/js/upload/delete.js.map +1 -1
- package/dist/js/upload/update.js +21 -21
- package/dist/js/upload/update.js.map +1 -1
- package/dist/js/utils/getErrorDetail.d.ts +2 -2
- package/dist/js/utils/getErrorDetail.d.ts.map +1 -1
- package/dist/js/utils/getErrorDetail.js +2 -2
- package/dist/js/utils/getErrorDetail.js.map +1 -1
- package/dist/js/utils/getModel.d.ts +3 -3
- package/dist/js/utils/getModel.d.ts.map +1 -1
- package/dist/js/utils/getModel.js +6 -6
- package/dist/js/utils/getModel.js.map +1 -1
- package/dist/js/utils/libsodium.js +6 -0
- package/dist/js/utils/libsodium.js.map +1 -1
- package/dist/js/utils/otpPurposes.js +38 -0
- package/dist/js/utils/otpPurposes.js.map +1 -1
- package/dist/js/utils/sanitize.js +23 -2
- package/dist/js/utils/sanitize.js.map +1 -1
- package/dist/js/utils/saveRefreshToken.js +2 -1
- package/dist/js/utils/saveRefreshToken.js.map +1 -1
- package/dist/js/utils/validate.js +5 -3
- package/dist/js/utils/validate.js.map +1 -1
- package/dist/js/utils/validationKeyError.d.ts +1 -1
- package/dist/js/utils/validationKeyError.d.ts.map +1 -1
- package/dist/js/utils/validationKeyError.js +13 -8
- package/dist/js/utils/validationKeyError.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +29 -29
package/dist/js/auth/logout.js
CHANGED
|
@@ -11,10 +11,12 @@ const logout = (routeObj) => {
|
|
|
11
11
|
const { authConfigObj } = getEnvs();
|
|
12
12
|
return async (req, res) => {
|
|
13
13
|
const token = getToken({ req, routeObj, type: "refreshTokenName" });
|
|
14
|
+
// payload
|
|
14
15
|
const payload = verifyJWT({
|
|
15
16
|
token,
|
|
16
17
|
routeObj,
|
|
17
18
|
});
|
|
19
|
+
// if payload is not as string or sub isn't found in it
|
|
18
20
|
if (typeof payload === "string" || !payload.sub || !payload.jti)
|
|
19
21
|
throw new AppError({
|
|
20
22
|
message: "Refresh token payload is invalid",
|
|
@@ -23,8 +25,11 @@ const logout = (routeObj) => {
|
|
|
23
25
|
hint: "Log in again to obtain a valid refresh token.",
|
|
24
26
|
details: getErrorDetail(routeObj),
|
|
25
27
|
});
|
|
26
|
-
|
|
28
|
+
// refreshToken model
|
|
29
|
+
const RefreshToken = getModel({ model: "RefreshToken", routeObj });
|
|
30
|
+
// handleRefreshTokenValidation
|
|
27
31
|
await handleRefreshTokenValidation(token, routeObj, payload.sub, payload.jti);
|
|
32
|
+
// revoke all of the same family
|
|
28
33
|
await RefreshToken.updateMany({ familyId: payload.familyId }, { $set: { revoked: true } });
|
|
29
34
|
clearCookie({ res, cookieName: authConfigObj.refreshTokenName, routeObj });
|
|
30
35
|
clearCookie({ res, cookieName: authConfigObj.accessTokenName, routeObj });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/js/auth/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AAEnF,MAAM,MAAM,GAAG,CAAC,QAAe,EAAE,EAAE;IACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/js/auth/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AAEnF,MAAM,MAAM,GAAG,CAAC,QAAe,EAAE,EAAE;IACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAEpE,UAAU;QACV,MAAM,OAAO,GAAG,SAAS,CAAC;YACxB,KAAK;YACL,QAAQ;SACT,CAAC,CAAC;QAEH,uDAAuD;QACvD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;YAC7D,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,+BAA+B;gBACrC,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,+CAA+C;gBACrD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAEL,qBAAqB;QACrB,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,+BAA+B;QAC/B,MAAM,4BAA4B,CAChC,KAAK,EACL,QAAQ,EACR,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,GAAG,CACZ,CAAC;QAEF,gCAAgC;QAChC,MAAM,YAAY,CAAC,UAAU,CAC3B,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAC9B,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAC5B,CAAC;QAEF,WAAW,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,CAAC,gBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,WAAW,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,CAAC,eAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE3E,WAAW,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,MAAM,CAAC"}
|
package/dist/js/auth/refresh.js
CHANGED
|
@@ -13,16 +13,20 @@ import getRefreshToken from "./utils/handleGetToken.js";
|
|
|
13
13
|
const refresh = ({ routeObj }) => {
|
|
14
14
|
return async (req, res) => {
|
|
15
15
|
const { authConfigObj } = getEnvs();
|
|
16
|
+
// token info
|
|
16
17
|
const { deviceType, jti, deviceName, os, ipAddress, familyId } = tokenInfo(req);
|
|
18
|
+
// refreshToken
|
|
17
19
|
let token = getRefreshToken({
|
|
18
20
|
req,
|
|
19
21
|
routeObj,
|
|
20
22
|
type: "refreshTokenName",
|
|
21
23
|
});
|
|
24
|
+
// payload
|
|
22
25
|
const payload = verifyJWT({
|
|
23
26
|
token,
|
|
24
27
|
routeObj,
|
|
25
28
|
});
|
|
29
|
+
// if payload is not as string or sub isn't found in it
|
|
26
30
|
if (typeof payload === "string" || !payload.sub || !payload.jti)
|
|
27
31
|
throw new AppError({
|
|
28
32
|
message: "Refresh token payload is invalid",
|
|
@@ -31,8 +35,11 @@ const refresh = ({ routeObj }) => {
|
|
|
31
35
|
hint: "Log in again to obtain a valid refresh token.",
|
|
32
36
|
details: getErrorDetail(routeObj),
|
|
33
37
|
});
|
|
38
|
+
// check if valid token
|
|
34
39
|
await handleRefreshTokenValidation(token, routeObj, payload.sub, payload.jti);
|
|
40
|
+
// find user - if exists
|
|
35
41
|
await findRefreshTokenUser(payload.sub, routeObj);
|
|
42
|
+
// send access cookie
|
|
36
43
|
const { accessToken } = sendCookie({
|
|
37
44
|
res,
|
|
38
45
|
accessTokenName: authConfigObj.accessTokenName,
|
|
@@ -41,6 +48,7 @@ const refresh = ({ routeObj }) => {
|
|
|
41
48
|
sub: payload.sub,
|
|
42
49
|
},
|
|
43
50
|
});
|
|
51
|
+
// rotateRefreshToken or update last used
|
|
44
52
|
await handleRotateRefreshToken({
|
|
45
53
|
deviceName: deviceName,
|
|
46
54
|
deviceType,
|
|
@@ -54,6 +62,7 @@ const refresh = ({ routeObj }) => {
|
|
|
54
62
|
routeObj,
|
|
55
63
|
iat: payload.iat,
|
|
56
64
|
});
|
|
65
|
+
// response
|
|
57
66
|
appResponse({
|
|
58
67
|
res,
|
|
59
68
|
message: "Access token refreshed successfully",
|
|
@@ -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,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,4BAA4B,MAAM,yCAAyC,CAAC;AACnF,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,wBAAwB,MAAM,qCAAqC,CAAC;AAC3E,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAuB,EAAE,EAAE;IACpD,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/js/auth/refresh.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
2
|
import type { Route, ValidationsObj } from "../types/Collection.ts";
|
|
3
|
-
declare const resendOTP: ({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
declare const resendOTP: ({ model, route, validations, routeObj, }: {
|
|
4
|
+
model: string;
|
|
5
|
+
route: string;
|
|
6
|
+
validations: ValidationsObj;
|
|
7
7
|
routeObj: Route;
|
|
8
8
|
}) => (req: Request, res: Response) => Promise<void>;
|
|
9
9
|
export default resendOTP;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resendOTP.d.ts","sourceRoot":"","sources":["../../../src/js/auth/resendOTP.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;AAYpE,QAAA,MAAM,SAAS,GAAI,
|
|
1
|
+
{"version":3,"file":"resendOTP.d.ts","sourceRoot":"","sources":["../../../src/js/auth/resendOTP.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;AAYpE,QAAA,MAAM,SAAS,GAAI,0CAKhB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC;CACjB,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBAgF1C,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -8,16 +8,20 @@ import getUser from "./utils/getUser.js";
|
|
|
8
8
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
9
9
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
10
10
|
import { getEnvs } from "../config/envs.js";
|
|
11
|
-
const resendOTP = ({
|
|
11
|
+
const resendOTP = ({ model, route, validations, routeObj, }) => {
|
|
12
12
|
return async (req, res) => {
|
|
13
|
+
// get dynamic auth field keys
|
|
13
14
|
const { authConfigObj } = getEnvs();
|
|
14
15
|
const { fieldsObj } = authConfigObj;
|
|
15
16
|
const emailKey = fieldsObj?.email;
|
|
16
17
|
const passwordKey = fieldsObj?.password;
|
|
17
18
|
const otpKey = fieldsObj?.otp;
|
|
18
19
|
const purposeKey = fieldsObj?.purpose;
|
|
19
|
-
|
|
20
|
+
// validationObj
|
|
21
|
+
const validationObj = getValidationKey(routeObj, validations);
|
|
22
|
+
// validate
|
|
20
23
|
const body = validate(validationObj, req.body, routeObj);
|
|
24
|
+
// if required fields not found
|
|
21
25
|
if (!req.body?.[emailKey] ||
|
|
22
26
|
!req.body?.[otpKey] ||
|
|
23
27
|
!req.body?.[purposeKey])
|
|
@@ -27,17 +31,20 @@ const resendOTP = ({ modelName, routeName, validationsObj, routeObj, }) => {
|
|
|
27
31
|
hint: `Provide ${emailKey}, ${otpKey}, and ${purposeKey} in the request body.`,
|
|
28
32
|
details: getErrorDetail(routeObj),
|
|
29
33
|
});
|
|
34
|
+
// if user not found
|
|
30
35
|
await getUser({
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
model,
|
|
37
|
+
route,
|
|
33
38
|
email: body[emailKey],
|
|
34
39
|
routeObj,
|
|
35
40
|
});
|
|
41
|
+
// get otp user
|
|
36
42
|
const OTPUser = await getOTPUser({
|
|
37
43
|
email: body[emailKey],
|
|
38
44
|
purpose: body[purposeKey],
|
|
39
45
|
routeObj,
|
|
40
46
|
});
|
|
47
|
+
// if otp already verified
|
|
41
48
|
if (OTPUser.isVerified) {
|
|
42
49
|
appResponse({
|
|
43
50
|
res,
|
|
@@ -46,13 +53,16 @@ const resendOTP = ({ modelName, routeName, validationsObj, routeObj, }) => {
|
|
|
46
53
|
});
|
|
47
54
|
return;
|
|
48
55
|
}
|
|
56
|
+
// send OTP
|
|
49
57
|
const { OTP, otpExpiry } = await sendOTP(body[emailKey], routeObj);
|
|
50
58
|
const hashedOTP = await hash(OTP, routeObj);
|
|
51
59
|
OTPUser.otpCount = 0;
|
|
52
60
|
OTPUser[otpKey] = hashedOTP;
|
|
53
61
|
OTPUser.otpExpiry = otpExpiry;
|
|
54
62
|
OTPUser.isVerified = false;
|
|
63
|
+
// save updated otp
|
|
55
64
|
await OTPUser.save();
|
|
65
|
+
// send response
|
|
56
66
|
appResponse({
|
|
57
67
|
res,
|
|
58
68
|
message: "OTP resent successfully!",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resendOTP.js","sourceRoot":"","sources":["../../../src/js/auth/resendOTP.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,SAAS,GAAG,CAAC,EACjB,
|
|
1
|
+
{"version":3,"file":"resendOTP.js","sourceRoot":"","sources":["../../../src/js/auth/resendOTP.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
2
|
import type { Route, ValidationsObj } from "../types/Collection.ts";
|
|
3
|
-
declare const resetPassword: ({
|
|
4
|
-
|
|
3
|
+
declare const resetPassword: ({ model, routeObj, route, validations, }: {
|
|
4
|
+
model: string;
|
|
5
5
|
routeObj: Route;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
route: string;
|
|
7
|
+
validations: ValidationsObj;
|
|
8
8
|
}) => (req: Request, res: Response) => Promise<void>;
|
|
9
9
|
export default resetPassword;
|
|
10
10
|
//# sourceMappingURL=resetPassword.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../../src/js/auth/resetPassword.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;AAapE,QAAA,MAAM,aAAa,GAAI,
|
|
1
|
+
{"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../../src/js/auth/resetPassword.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;AAapE,QAAA,MAAM,aAAa,GAAI,0CAKpB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,CAAC;CAC7B,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBA2E1C,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -9,16 +9,20 @@ import appResponse from "../utils/response.js";
|
|
|
9
9
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
10
10
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
11
11
|
import { getEnvs } from "../config/envs.js";
|
|
12
|
-
const resetPassword = ({
|
|
12
|
+
const resetPassword = ({ model, routeObj, route, validations, }) => {
|
|
13
13
|
return async (req, res) => {
|
|
14
|
+
// get dynamic auth field keys
|
|
14
15
|
const { authConfigObj } = getEnvs();
|
|
15
16
|
const { fieldsObj } = authConfigObj;
|
|
16
17
|
const emailKey = fieldsObj?.email;
|
|
17
18
|
const passwordKey = fieldsObj?.password;
|
|
18
19
|
const otpKey = fieldsObj?.otp;
|
|
19
20
|
const purposeKey = fieldsObj?.purpose;
|
|
20
|
-
|
|
21
|
+
// validationObj
|
|
22
|
+
const validationObj = getValidationKey(routeObj, validations);
|
|
23
|
+
// validate
|
|
21
24
|
const body = validate(validationObj, req.body, routeObj);
|
|
25
|
+
// if no email or password in request
|
|
22
26
|
if (!req.body?.[emailKey] || !req.body?.[passwordKey])
|
|
23
27
|
throw new AppError({
|
|
24
28
|
message: `${emailKey} and ${passwordKey} are required.`,
|
|
@@ -26,24 +30,30 @@ const resetPassword = ({ modelName, routeObj, routeName, validationsObj, }) => {
|
|
|
26
30
|
hint: `Provide ${emailKey} and ${passwordKey} in the request body.`,
|
|
27
31
|
details: getErrorDetail(routeObj),
|
|
28
32
|
});
|
|
33
|
+
// password reset purpose
|
|
29
34
|
const purpose = "password_reset";
|
|
35
|
+
// OTPUser
|
|
30
36
|
await getOTPUser({
|
|
31
37
|
email: body[emailKey],
|
|
32
38
|
purpose,
|
|
33
39
|
routeObj,
|
|
34
40
|
});
|
|
41
|
+
// handle is verified or not
|
|
35
42
|
const { isVerified } = await handleIsVerified({
|
|
36
43
|
email: body[emailKey],
|
|
37
44
|
purpose,
|
|
38
45
|
routeObj,
|
|
39
46
|
});
|
|
47
|
+
// user
|
|
40
48
|
const user = await getUser({
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
model,
|
|
50
|
+
route,
|
|
43
51
|
email: body[emailKey],
|
|
44
52
|
routeObj,
|
|
45
53
|
});
|
|
54
|
+
// update password
|
|
46
55
|
user[passwordKey] = await hash(body[passwordKey], routeObj);
|
|
56
|
+
// save user
|
|
47
57
|
await user.save();
|
|
48
58
|
const OTPModel = getOTPModel(routeObj);
|
|
49
59
|
if (isVerified)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../../src/js/auth/resetPassword.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,aAAa,GAAG,CAAC,EACrB,
|
|
1
|
+
{"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../../src/js/auth/resetPassword.ts"],"names":[],"mappings":"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"}
|
package/dist/js/auth/signup.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
2
|
import type { Route, ValidationsObj } from "../types/Collection.ts";
|
|
3
|
-
declare const signup: ({
|
|
4
|
-
|
|
3
|
+
declare const signup: ({ model, routeObj, route, validations, }: {
|
|
4
|
+
model: string;
|
|
5
5
|
routeObj: Route;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
route: string;
|
|
7
|
+
validations: ValidationsObj;
|
|
8
8
|
}) => (req: Request, res: Response) => Promise<void>;
|
|
9
9
|
export default signup;
|
|
10
10
|
//# sourceMappingURL=signup.d.ts.map
|
|
@@ -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,
|
|
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,0CAKb;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,CAAC;CAC7B,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBA+C1C,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/js/auth/signup.js
CHANGED
|
@@ -5,14 +5,18 @@ import getModel from "../utils/getModel.js";
|
|
|
5
5
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
6
6
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
7
7
|
import { getEnvs } from "../config/envs.js";
|
|
8
|
-
const signup = ({
|
|
8
|
+
const signup = ({ model, routeObj, route, validations, }) => {
|
|
9
9
|
return async (req, res) => {
|
|
10
|
+
// get dynamic email and password
|
|
10
11
|
const { authConfigObj } = getEnvs();
|
|
11
12
|
const { fieldsObj } = authConfigObj;
|
|
12
13
|
const emailKey = fieldsObj?.email;
|
|
13
14
|
const passwordKey = fieldsObj?.password;
|
|
14
|
-
|
|
15
|
+
// validationObj
|
|
16
|
+
const validationObj = getValidationKey(routeObj, validations);
|
|
17
|
+
// validation
|
|
15
18
|
const body = validate(validationObj, req.body, routeObj);
|
|
19
|
+
// if no email or password
|
|
16
20
|
if (!req.body[emailKey] || !req.body[passwordKey])
|
|
17
21
|
throw new AppError({
|
|
18
22
|
message: `${emailKey} and ${passwordKey} are required.`,
|
|
@@ -20,7 +24,8 @@ const signup = ({ modelName, routeObj, routeName, validationsObj, }) => {
|
|
|
20
24
|
hint: `Provide ${emailKey} and ${passwordKey} in the request body.`,
|
|
21
25
|
details: getErrorDetail(routeObj),
|
|
22
26
|
});
|
|
23
|
-
|
|
27
|
+
// if existing user
|
|
28
|
+
const Model = getModel({ model, route, routeObj });
|
|
24
29
|
const existing = await Model.findOne({
|
|
25
30
|
[emailKey]: body[emailKey],
|
|
26
31
|
});
|
|
@@ -34,8 +39,8 @@ const signup = ({ modelName, routeObj, routeName, validationsObj, }) => {
|
|
|
34
39
|
await modeMap.signup[routeObj.mode]({
|
|
35
40
|
body,
|
|
36
41
|
res,
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
route,
|
|
43
|
+
model,
|
|
39
44
|
purpose: "signup",
|
|
40
45
|
routeObj,
|
|
41
46
|
req,
|
|
@@ -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;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,MAAM,GAAG,CAAC,EACd,
|
|
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;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,MAAM,GAAG,CAAC,EACd,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,GAMZ,EAAE,EAAE;IACH,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QAC3C,iCAAiC;QACjC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;QACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QACpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;QAClC,MAAM,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC;QAExC,gBAAgB;QAChB,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE9D,aAAa;QACb,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEzD,0BAA0B;QAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAY,CAAC;YACjD,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,GAAG,QAAQ,QAAQ,WAAW,gBAAgB;gBACvD,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,WAAW,QAAQ,QAAQ,WAAW,uBAAuB;gBACnE,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QAEL,mBAAmB;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAE,CAAC;QAEpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACnC,CAAC,QAAS,CAAC,EAAE,IAAI,CAAC,QAAS,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,QAAQ;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,kBAAkB,QAAQ,kBAAkB;gBACrD,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,sDAAsD,QAAQ,GAAG;gBACvE,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,KAAK;YACL,KAAK;YACL,OAAO,EAAE,QAAQ;YACjB,QAAQ;YACR,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Request, Response } from "express";
|
|
2
2
|
import type { Route } from "../../types/Collection.js";
|
|
3
|
-
declare const authenticateUser: ({ body,
|
|
3
|
+
declare const authenticateUser: ({ body, model, res, req, route, routeObj, }: {
|
|
4
4
|
body: any;
|
|
5
|
-
|
|
5
|
+
model: string;
|
|
6
6
|
res: Response;
|
|
7
7
|
req: Request;
|
|
8
|
-
|
|
8
|
+
route: string;
|
|
9
9
|
routeObj: Route;
|
|
10
10
|
}) => Promise<void>;
|
|
11
11
|
export default authenticateUser;
|
|
@@ -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;AAOvD,QAAA,MAAM,gBAAgB,GAAU,
|
|
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,6CAO7B;IACD,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;CACjB,kBAqGA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -11,15 +11,19 @@ import { getEnvs } from "../../config/envs.js";
|
|
|
11
11
|
import saveRefreshToken from "../../utils/saveRefreshToken.js";
|
|
12
12
|
import tokenInfo from "./UAParser.js";
|
|
13
13
|
import { hash } from "../../utils/libsodium.js";
|
|
14
|
-
const authenticateUser = async ({ body,
|
|
14
|
+
const authenticateUser = async ({ body, model, res, req, route, routeObj, }) => {
|
|
15
|
+
// get dynamic auth field keys
|
|
15
16
|
const { authConfigObj } = getEnvs();
|
|
16
17
|
const { fieldsObj } = authConfigObj;
|
|
17
18
|
const emailKey = fieldsObj?.email;
|
|
18
19
|
const passwordKey = fieldsObj?.password;
|
|
19
20
|
const otpKey = fieldsObj?.otp;
|
|
20
21
|
const purposeKey = fieldsObj?.purpose;
|
|
22
|
+
// otp model
|
|
21
23
|
const OTPModel = getOTPModel(routeObj);
|
|
24
|
+
// token info
|
|
22
25
|
const { deviceType, familyId, jti, deviceName, ipAddress, os } = tokenInfo(req);
|
|
26
|
+
// handle is verified
|
|
23
27
|
let isVerified = false;
|
|
24
28
|
let isOTPUser = null;
|
|
25
29
|
if ("isVerified" in body)
|
|
@@ -28,13 +32,15 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
|
|
|
28
32
|
purpose: "login",
|
|
29
33
|
routeObj,
|
|
30
34
|
}));
|
|
35
|
+
// user
|
|
31
36
|
const user = await getUser({
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
model,
|
|
38
|
+
route,
|
|
34
39
|
email: body[emailKey],
|
|
35
40
|
needPassword: true,
|
|
36
41
|
routeObj,
|
|
37
42
|
});
|
|
43
|
+
// invalid password - credentials mode
|
|
38
44
|
if (!isOTPUser) {
|
|
39
45
|
const isValid = await verifyHash(body[passwordKey], user.password, routeObj);
|
|
40
46
|
if (!isValid)
|
|
@@ -45,11 +51,13 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
|
|
|
45
51
|
details: getErrorDetail(routeObj),
|
|
46
52
|
});
|
|
47
53
|
}
|
|
54
|
+
// remove from otp model
|
|
48
55
|
if (isVerified)
|
|
49
56
|
await OTPModel.deleteOne({
|
|
50
57
|
_id: body._id,
|
|
51
58
|
});
|
|
52
59
|
const { _id } = user.toObject();
|
|
60
|
+
// send cookie
|
|
53
61
|
const { accessToken, refreshToken, refreshTokenAge } = sendCookie({
|
|
54
62
|
res,
|
|
55
63
|
accessTokenName: authConfigObj.accessTokenName,
|
|
@@ -61,6 +69,7 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
|
|
|
61
69
|
familyId,
|
|
62
70
|
jti,
|
|
63
71
|
});
|
|
72
|
+
// save refreshToken
|
|
64
73
|
const hashedToken = await hash(refreshToken);
|
|
65
74
|
await saveRefreshToken({
|
|
66
75
|
hashedToken,
|
|
@@ -74,6 +83,7 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
|
|
|
74
83
|
ipAddress,
|
|
75
84
|
os,
|
|
76
85
|
});
|
|
86
|
+
// send response
|
|
77
87
|
appResponse({
|
|
78
88
|
res,
|
|
79
89
|
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;AAC/D,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,IAAI,EACJ,
|
|
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;AAC/D,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,IAAI,EACJ,KAAK,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,QAAQ,GAQT,EAAE,EAAE;IACH,8BAA8B;IAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC;IACxC,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC;IAEtC,YAAY;IACZ,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,aAAa;IACb,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,GAC5D,SAAS,CAAC,GAAG,CAAC,CAAC;IAEjB,qBAAqB;IACrB,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,QAAS,CAAW;YAChC,OAAO,EAAE,OAAO;YAChB,QAAQ;SACT,CAAC,CAAC,CAAC;IAEN,OAAO;IACP,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;QACzB,KAAK;QACL,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,QAAS,CAAW;QAChC,YAAY,EAAE,IAAI;QAClB,QAAQ;KACT,CAAC,CAAC;IAEH,sCAAsC;IACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,IAAI,CAAC,WAAY,CAAC,EAClB,IAAI,CAAC,QAAQ,EACb,QAAQ,CACT,CAAC;QAEF,IAAI,CAAC,OAAO;YACV,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,mBAAmB;gBAC5B,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,eAAe,WAAW,iBAAiB;gBACjD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;IACP,CAAC;IAED,wBAAwB;IACxB,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;IAEhC,cAAc;IACd,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;QACR,UAAU;QACV,QAAQ;QACR,GAAG;KACJ,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAa,CAAC,CAAC;IAE9C,MAAM,gBAAgB,CAAC;QACrB,WAAW;QACX,eAAe;QACf,GAAG;QACH,QAAQ;QACR,GAAG,EAAE,GAAa;QAClB,QAAQ;QACR,UAAU;QACV,UAAU;QACV,SAAS;QACT,EAAE;KACH,CAAC,CAAC;IAEH,gBAAgB;IAChB,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,WAAY,CAAC,CAAC,CAAC,SAAS;QACxE,YAAY,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,YAAa,CAAC,CAAC,CAAC,SAAS;QAC3E,OAAO,EAAE,IAAI,CAAC,UAAW,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { OTPSchema } from "../../types/MongooseOTPSchemaObj.js";
|
|
2
|
-
declare const createOTPModel: (
|
|
2
|
+
declare const createOTPModel: (route: string, schema: OTPSchema) => any;
|
|
3
3
|
export default createOTPModel;
|
|
4
4
|
//# sourceMappingURL=createOTPModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPModel.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIrE,QAAA,MAAM,cAAc,GAAI,
|
|
1
|
+
{"version":3,"file":"createOTPModel.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIrE,QAAA,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,QAAQ,SAAS,QAwDvD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import createModel from "../../lib/model.factory.js";
|
|
2
2
|
import otpPurposes from "../../utils/otpPurposes.js";
|
|
3
3
|
import { getEnvs } from "../../config/envs.js";
|
|
4
|
-
const createOTPModel = (
|
|
4
|
+
const createOTPModel = (route, schema) => {
|
|
5
|
+
// get dynamic auth field keys
|
|
5
6
|
const { authConfigObj } = getEnvs();
|
|
6
7
|
const { fieldsObj } = authConfigObj;
|
|
7
8
|
const emailKey = fieldsObj?.email;
|
|
8
9
|
const otpKey = fieldsObj?.otp;
|
|
9
10
|
const purposeKey = fieldsObj?.purpose;
|
|
11
|
+
// Make all fields from the original schema optional
|
|
10
12
|
const makeOptional = (field) => {
|
|
13
|
+
// Array schema
|
|
11
14
|
if (Array.isArray(field)) {
|
|
12
15
|
return field.map(makeOptional);
|
|
13
16
|
}
|
|
17
|
+
// Nested object that contains `type`
|
|
14
18
|
if (field && typeof field === "object" && "type" in field) {
|
|
15
19
|
return {
|
|
16
20
|
...field,
|
|
@@ -18,12 +22,13 @@ const createOTPModel = (routeName, mongooseSchemaObj) => {
|
|
|
18
22
|
unique: false,
|
|
19
23
|
};
|
|
20
24
|
}
|
|
25
|
+
// Nested schema object
|
|
21
26
|
if (field && typeof field === "object") {
|
|
22
27
|
return Object.fromEntries(Object.entries(field).map(([k, v]) => [k, makeOptional(v)]));
|
|
23
28
|
}
|
|
24
29
|
return field;
|
|
25
30
|
};
|
|
26
|
-
const optionalSchema = makeOptional(
|
|
31
|
+
const optionalSchema = makeOptional(schema);
|
|
27
32
|
return createModel("otpUser", {
|
|
28
33
|
...optionalSchema,
|
|
29
34
|
otpCount: { type: Number, default: 0 },
|
|
@@ -37,7 +42,7 @@ const createOTPModel = (routeName, mongooseSchemaObj) => {
|
|
|
37
42
|
enum: otpPurposes,
|
|
38
43
|
required: true,
|
|
39
44
|
},
|
|
40
|
-
},
|
|
45
|
+
}, route);
|
|
41
46
|
};
|
|
42
47
|
export default createOTPModel;
|
|
43
48
|
//# sourceMappingURL=createOTPModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPModel.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,4BAA4B,CAAC;AAErD,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,cAAc,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"createOTPModel.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,4BAA4B,CAAC;AAErD,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,MAAiB,EAAE,EAAE;IAC1D,8BAA8B;IAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC;IAEtC,oDAAoD;IACpD,MAAM,YAAY,GAAG,CAAC,KAAU,EAAO,EAAE;QACvC,eAAe;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC1D,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,WAAW,CAChB,SAAS,EACT;QACE,GAAG,cAAc;QAEjB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QACtC,CAAC,MAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QACzB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;QAChE,CAAC,UAAW,CAAC,EAAE;YACb,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;SACf;KACF,EACD,KAAK,CACN,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { Response } from "express";
|
|
2
2
|
import type { Route } from "../../types/Collection.js";
|
|
3
|
-
declare const createOTPUser: ({ body, res, purpose,
|
|
3
|
+
declare const createOTPUser: ({ body, res, purpose, route, model, routeObj, }: {
|
|
4
4
|
body: any;
|
|
5
5
|
res: Response;
|
|
6
6
|
purpose: string;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
route: string;
|
|
8
|
+
model: string;
|
|
9
9
|
routeObj: Route;
|
|
10
10
|
}) => Promise<void>;
|
|
11
11
|
export default createOTPUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,aAAa,GAAU,
|
|
1
|
+
{"version":3,"file":"createOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,aAAa,GAAU,iDAO1B;IACD,IAAI,EAAE,GAAG,CAAC;IACV,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;CACjB,kBA8EA,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -6,14 +6,17 @@ import getOTPModel from "./getOTPModel.js";
|
|
|
6
6
|
import verifyCredentials from "./verifyCredentials.js";
|
|
7
7
|
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
8
8
|
import { getEnvs } from "../../config/envs.js";
|
|
9
|
-
const createOTPUser = async ({ body, res, purpose,
|
|
9
|
+
const createOTPUser = async ({ body, res, purpose, route, model, routeObj, }) => {
|
|
10
|
+
// get dynamic auth field keys
|
|
10
11
|
const { authConfigObj } = getEnvs();
|
|
11
12
|
const { fieldsObj } = authConfigObj;
|
|
12
13
|
const emailKey = fieldsObj?.email;
|
|
13
14
|
const passwordKey = fieldsObj?.password;
|
|
14
15
|
const otpKey = fieldsObj?.otp;
|
|
15
16
|
const purposeKey = fieldsObj?.purpose;
|
|
17
|
+
// otp model
|
|
16
18
|
const OTPModel = getOTPModel(routeObj);
|
|
19
|
+
// if no purpose
|
|
17
20
|
if (!purpose)
|
|
18
21
|
throw new AppError({
|
|
19
22
|
message: `${purposeKey} is required.`,
|
|
@@ -25,6 +28,7 @@ const createOTPUser = async ({ body, res, purpose, routeName, modelName, routeOb
|
|
|
25
28
|
path: routeObj.path,
|
|
26
29
|
},
|
|
27
30
|
});
|
|
31
|
+
// if already requested otp
|
|
28
32
|
const existingOTPs = await OTPModel.find({
|
|
29
33
|
[emailKey]: body[emailKey],
|
|
30
34
|
});
|
|
@@ -37,23 +41,27 @@ const createOTPUser = async ({ body, res, purpose, routeName, modelName, routeOb
|
|
|
37
41
|
details: getErrorDetail(routeObj),
|
|
38
42
|
});
|
|
39
43
|
}
|
|
44
|
+
// if login - mode: otp
|
|
40
45
|
if (purpose === "login")
|
|
41
46
|
await verifyCredentials({
|
|
42
|
-
|
|
47
|
+
model,
|
|
43
48
|
body,
|
|
44
|
-
|
|
49
|
+
route,
|
|
45
50
|
routeObj,
|
|
46
51
|
});
|
|
52
|
+
// send otp + handle hashing
|
|
47
53
|
const { OTP, otpExpiry } = await sendOTP(body[emailKey], routeObj);
|
|
48
54
|
const hashedOTP = await hash(OTP, routeObj);
|
|
49
55
|
if (body?.[passwordKey])
|
|
50
56
|
body[passwordKey] = await hash(body[passwordKey], routeObj);
|
|
57
|
+
// create otp
|
|
51
58
|
await OTPModel.create({
|
|
52
59
|
...body,
|
|
53
60
|
[otpKey]: hashedOTP,
|
|
54
61
|
otpExpiry,
|
|
55
62
|
[purposeKey]: purpose,
|
|
56
63
|
});
|
|
64
|
+
// send response
|
|
57
65
|
appResponse({
|
|
58
66
|
res,
|
|
59
67
|
message: "OTP sent successfully!",
|