storemw-core-api 1.0.138 → 1.0.140

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 (57) hide show
  1. package/dist/app.js +1 -1
  2. package/dist/app.js.map +1 -1
  3. package/dist/controllers/index.d.ts +1 -2
  4. package/dist/controllers/index.js +5 -4
  5. package/dist/controllers/index.js.map +1 -1
  6. package/dist/controllers/user/userMeController.d.ts +3 -0
  7. package/dist/controllers/user/userMeController.js +52 -361
  8. package/dist/controllers/user/userMeController.js.map +1 -1
  9. package/dist/controllers/utils/unuse/changePasswordUtilController.d.ts +1 -0
  10. package/dist/controllers/utils/unuse/changePasswordUtilController.js +55 -0
  11. package/dist/controllers/utils/unuse/changePasswordUtilController.js.map +1 -0
  12. package/dist/middlewares/route/index.d.ts +1 -1
  13. package/dist/middlewares/route/index.js +4 -2
  14. package/dist/middlewares/route/index.js.map +1 -1
  15. package/dist/middlewares/route/validateUserMe.d.ts +2 -0
  16. package/dist/middlewares/route/validateUserMe.js +9 -1
  17. package/dist/middlewares/route/validateUserMe.js.map +1 -1
  18. package/dist/routes/index.d.ts +0 -1
  19. package/dist/routes/index.js +2 -3
  20. package/dist/routes/index.js.map +1 -1
  21. package/dist/routes/user/userMeRoutes.js +4 -0
  22. package/dist/routes/user/userMeRoutes.js.map +1 -1
  23. package/dist/routes/utils/unuse/changePasswordUtilRoutes.d.ts +1 -0
  24. package/dist/routes/utils/unuse/changePasswordUtilRoutes.js +10 -0
  25. package/dist/routes/utils/unuse/changePasswordUtilRoutes.js.map +1 -0
  26. package/dist/schema/payload/index.d.ts +2 -2
  27. package/dist/schema/payload/index.js +7 -4
  28. package/dist/schema/payload/index.js.map +1 -1
  29. package/dist/schema/payload/user/schemaUserMe.d.ts +31 -0
  30. package/dist/schema/payload/user/schemaUserMe.js +17 -0
  31. package/dist/schema/payload/user/schemaUserMe.js.map +1 -0
  32. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.d.ts +53 -0
  33. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.js +18 -0
  34. package/dist/schema/payload/utils/unuse/schemaChangePasswordUtil.js.map +1 -0
  35. package/dist/services/auth/AuthService.js +7 -4
  36. package/dist/services/auth/AuthService.js.map +1 -1
  37. package/dist/services/index.d.ts +1 -3
  38. package/dist/services/index.js +3 -3
  39. package/dist/services/index.js.map +1 -1
  40. package/dist/services/user/UserMeService.d.ts +30 -7
  41. package/dist/services/user/UserMeService.js +71 -3
  42. package/dist/services/user/UserMeService.js.map +1 -1
  43. package/dist/services/user/UserService.d.ts +22 -1
  44. package/dist/services/user/UserService.js +21 -22
  45. package/dist/services/user/UserService.js.map +1 -1
  46. package/dist/services/utils/ChangePasswordUtilService.js +1 -1
  47. package/dist/services/utils/ChangePasswordUtilService.js.map +1 -1
  48. package/dist/services/utils/unuse/ChangePasswordUtilService.d.ts +13 -0
  49. package/dist/services/utils/unuse/ChangePasswordUtilService.js +78 -0
  50. package/dist/services/utils/unuse/ChangePasswordUtilService.js.map +1 -0
  51. package/dist/utils/index.d.ts +1 -1
  52. package/dist/utils/index.js +3 -1
  53. package/dist/utils/index.js.map +1 -1
  54. package/dist/utils/passwordUtils.d.ts +3 -0
  55. package/dist/utils/passwordUtils.js +22 -0
  56. package/dist/utils/passwordUtils.js.map +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangePasswordUtilService = void 0;
4
+ const utils_1 = require("../../../utils");
5
+ const services_1 = require("../../../services");
6
+ // import { config } from "../../../configs/config";
7
+ const utils_2 = require("../../../utils");
8
+ const ChangePasswordUtilService = (props) => {
9
+ const { secretKey, ...rest } = props;
10
+ const changePassword = async ({ authToken, currentPassword, confirmPassword, newPassword }) => {
11
+ // retrive core configuration
12
+ const coreConfig = (0, utils_1.getCoreConfiguration)();
13
+ // const authSecretKey = config.AUTH_SECRET_KEY
14
+ const authSecretKey = coreConfig.authSecretKey;
15
+ // validate the token
16
+ const jwtData = (0, utils_2.verifyAuthToken)(authToken, authSecretKey);
17
+ const accountId = jwtData?.account?.account_id ?? "";
18
+ const userId = jwtData?.user?.user_id ?? "";
19
+ const userType = jwtData?.user?.user_type ?? "";
20
+ if (!accountId && userType !== "operator") { // operator token do not have account id
21
+ (0, utils_1.throwError)(`Invalid or missing account id in auth token`);
22
+ }
23
+ if (!userId) {
24
+ (0, utils_1.throwError)(`Missing user id in auth token`);
25
+ }
26
+ if (!userType) {
27
+ (0, utils_1.throwError)(`Missing user type in auth token`);
28
+ }
29
+ const userService = (0, services_1.UserService)({ userType, ...rest });
30
+ const accountService = (0, services_1.AccountService)({ ...rest, isOperator: true });
31
+ const user = await userService.getUser({ id: Number(userId), datatypes: [], includePassword: true });
32
+ const account = await accountService.getAccount({ id: Number(accountId), datatypes: [] });
33
+ // console.log('jwtData', jwtData)
34
+ // console.log('user', user)
35
+ // console.log('account', account)
36
+ // const a = await hashPassword(user?.password)
37
+ // check the accountId / userId is valid
38
+ if (!user?.user_id) {
39
+ (0, utils_1.throwError)(`Invalid user id in auth token`);
40
+ }
41
+ if (Object.keys(account).length <= 0) { // must have account id record
42
+ (0, utils_1.throwError)(`Invalid account id in auth token`);
43
+ }
44
+ // new password cannot same with current password
45
+ if (newPassword === currentPassword) {
46
+ (0, utils_1.throwError)(`New and current password cannot be same`);
47
+ }
48
+ // new password must same with confirm
49
+ if (newPassword !== confirmPassword) {
50
+ (0, utils_1.throwError)(`New and confirm password not matched`);
51
+ }
52
+ // check the current password
53
+ try {
54
+ const decryptedPass = await (0, utils_2.verifyPassword)(currentPassword, user?.password);
55
+ // console.log('decryptedPass', decryptedPass)
56
+ if (!decryptedPass) {
57
+ throw Error(`Invalid current password`);
58
+ }
59
+ }
60
+ catch (error) {
61
+ (0, utils_1.throwError)(`Auth Token: ${error?.message}`);
62
+ }
63
+ // perform update credential
64
+ const responseUser = await userService.replacePassword({
65
+ id: Number(userId),
66
+ data: {
67
+ unhashLoginPassword: newPassword
68
+ },
69
+ isOperator: Boolean(userType === "operator")
70
+ });
71
+ return responseUser;
72
+ };
73
+ return {
74
+ changePassword
75
+ };
76
+ };
77
+ exports.ChangePasswordUtilService = ChangePasswordUtilService;
78
+ //# sourceMappingURL=ChangePasswordUtilService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangePasswordUtilService.js","sourceRoot":"","sources":["../../../../src/services/utils/unuse/ChangePasswordUtilService.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultServiceProps, getCoreConfiguration, throwError } from \"@/utils\";\nimport {\n UserService,\n AccountService,\n} from \"@/services\";\n\n// import { config } from \"@/configs/config\";\n\nimport { verifyPassword, verifyAuthToken, hashPassword } from \"@/utils\"\n\nexport type ChangePasswordUtilServiceProps = DefaultServiceProps & {\n secretKey: string,\n};\n\nexport type ChangePasswordUtilChangeProps = {\n authToken: string,\n currentPassword: string\n newPassword: string\n confirmPassword: string\n};\n\nexport const ChangePasswordUtilService = (props: ChangePasswordUtilServiceProps) => {\n\n const {\n secretKey,\n ...rest\n } = props\n\n const changePassword = async ({ authToken, currentPassword, confirmPassword, newPassword }: ChangePasswordUtilChangeProps) => {\n\n // retrive core configuration\n const coreConfig = getCoreConfiguration()\n\n // const authSecretKey = config.AUTH_SECRET_KEY\n const authSecretKey = coreConfig.authSecretKey\n\n // validate the token\n const jwtData = verifyAuthToken(authToken, authSecretKey);\n\n const accountId = jwtData?.account?.account_id ?? \"\";\n const userId = jwtData?.user?.user_id ?? \"\";\n const userType = jwtData?.user?.user_type ?? \"\";\n\n if (!accountId && userType !== \"operator\") { // operator token do not have account id\n throwError(`Invalid or missing account id in auth token`)\n }\n\n if (!userId) {\n throwError(`Missing user id in auth token`)\n }\n\n if (!userType) {\n throwError(`Missing user type in auth token`)\n }\n\n const userService = UserService({ userType, ...rest })\n const accountService = AccountService({ ...rest, isOperator: true })\n\n const user = await userService.getUser({ id: Number(userId), datatypes: [], includePassword: true })\n const account = await accountService.getAccount({ id: Number(accountId), datatypes: [] })\n\n // console.log('jwtData', jwtData)\n // console.log('user', user)\n // console.log('account', account)\n\n // const a = await hashPassword(user?.password)\n\n // check the accountId / userId is valid\n if (!user?.user_id) {\n throwError(`Invalid user id in auth token`)\n }\n\n if (Object.keys(account).length <= 0) { // must have account id record\n throwError(`Invalid account id in auth token`)\n }\n\n // new password cannot same with current password\n if (newPassword === currentPassword) {\n throwError(`New and current password cannot be same`)\n }\n\n // new password must same with confirm\n if (newPassword !== confirmPassword) {\n throwError(`New and confirm password not matched`)\n }\n\n // check the current password\n try {\n const decryptedPass = await verifyPassword(currentPassword, user?.password)\n // console.log('decryptedPass', decryptedPass)\n\n if (!decryptedPass) {\n throw Error(`Invalid current password`)\n }\n\n } catch (error: any) {\n throwError(`Auth Token: ${error?.message}`)\n }\n\n // perform update credential\n const responseUser = await userService.replacePassword({\n id: Number(userId),\n data: {\n unhashLoginPassword: newPassword\n },\n isOperator: Boolean(userType === \"operator\")\n })\n\n return responseUser\n\n }\n\n return {\n changePassword\n }\n\n}\n\n"]}
@@ -12,6 +12,6 @@ export { getDefaultServiceProps, generateServiceProps } from "./serviceUtils";
12
12
  export { buildFullFieldName, groupPayloadInjectionFields } from "./injectionFieldUtils";
13
13
  export { generateAuthToken, verifyAuthToken } from "./authUtils";
14
14
  export { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encryptAccessKeySecret, decryptAccessKeySecret } from "./accessKeyUtils";
15
- export { hashPassword, verifyPassword } from "./passwordUtils";
15
+ export { loginPasswordFormatSchema, validateLoginPasswordFormat, hashPassword, verifyPassword } from "./passwordUtils";
16
16
  export { generateFileThumbnailBuffer } from "./fileThumbnail";
17
17
  export { validateFormatEmailAddress, validateFormatMobileNumber } from "./validateFormatUtils";
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateFormatMobileNumber = exports.validateFormatEmailAddress = exports.generateFileThumbnailBuffer = exports.verifyPassword = exports.hashPassword = exports.decryptAccessKeySecret = exports.encryptAccessKeySecret = exports.hashAccessKeySecret = exports.generateAccessKeySecret = exports.generateAccessKeyId = exports.verifyAuthToken = exports.generateAuthToken = exports.groupPayloadInjectionFields = exports.buildFullFieldName = exports.generateServiceProps = exports.getDefaultServiceProps = exports.buildCommonStatusSchema = exports.getFormattedZodErrorsIntoString = exports.getFormattedZodErrors = exports.logError = exports.throwError = exports.logger = exports.normalizePublicScopeFromBody = exports.createPublicScopeSchema = exports.validateModelFieldsWithData = exports.convertPayloadByTableSchema = exports.validateMultipleSchemas = exports.validateWithSchema = exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports.sendSuccess = exports.sendError = exports.HTTP_STATUS = exports.sharp = exports._ = exports.getCoreConfiguration = void 0;
6
+ exports.validateFormatMobileNumber = exports.validateFormatEmailAddress = exports.generateFileThumbnailBuffer = exports.verifyPassword = exports.hashPassword = exports.validateLoginPasswordFormat = exports.loginPasswordFormatSchema = exports.decryptAccessKeySecret = exports.encryptAccessKeySecret = exports.hashAccessKeySecret = exports.generateAccessKeySecret = exports.generateAccessKeyId = exports.verifyAuthToken = exports.generateAuthToken = exports.groupPayloadInjectionFields = exports.buildFullFieldName = exports.generateServiceProps = exports.getDefaultServiceProps = exports.buildCommonStatusSchema = exports.getFormattedZodErrorsIntoString = exports.getFormattedZodErrors = exports.logError = exports.throwError = exports.logger = exports.normalizePublicScopeFromBody = exports.createPublicScopeSchema = exports.validateModelFieldsWithData = exports.convertPayloadByTableSchema = exports.validateMultipleSchemas = exports.validateWithSchema = exports.formatDisplayDateTime = exports.getCurrentDateTimeISO = exports.getCurrentDateTime = exports.dayjs = exports.sendSuccess = exports.sendError = exports.HTTP_STATUS = exports.sharp = exports._ = exports.getCoreConfiguration = void 0;
7
7
  var coreConfigUtils_1 = require("./coreConfigUtils");
8
8
  Object.defineProperty(exports, "getCoreConfiguration", { enumerable: true, get: function () { return coreConfigUtils_1.getCoreConfiguration; } });
9
9
  var lodash_1 = require("lodash");
@@ -55,6 +55,8 @@ Object.defineProperty(exports, "hashAccessKeySecret", { enumerable: true, get: f
55
55
  Object.defineProperty(exports, "encryptAccessKeySecret", { enumerable: true, get: function () { return accessKeyUtils_1.encryptAccessKeySecret; } });
56
56
  Object.defineProperty(exports, "decryptAccessKeySecret", { enumerable: true, get: function () { return accessKeyUtils_1.decryptAccessKeySecret; } });
57
57
  var passwordUtils_1 = require("./passwordUtils");
58
+ Object.defineProperty(exports, "loginPasswordFormatSchema", { enumerable: true, get: function () { return passwordUtils_1.loginPasswordFormatSchema; } });
59
+ Object.defineProperty(exports, "validateLoginPasswordFormat", { enumerable: true, get: function () { return passwordUtils_1.validateLoginPasswordFormat; } });
58
60
  Object.defineProperty(exports, "hashPassword", { enumerable: true, get: function () { return passwordUtils_1.hashPassword; } });
59
61
  Object.defineProperty(exports, "verifyPassword", { enumerable: true, get: function () { return passwordUtils_1.verifyPassword; } });
60
62
  var fileThumbnail_1 = require("./fileThumbnail");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB,+BAAyC;AAAhC,+GAAA,OAAO,OAAS;AACzB,iDAAsE;AAA7D,4GAAA,WAAW,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAC5C,yCAAsG;AAA7F,kGAAA,KAAK,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAChF,6CAA6L;AAApL,iHAAA,kBAAkB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,2HAAA,4BAA4B,OAAA;AACrK,uCAA+C;AAAtC,mHAAA,OAAO,OAAU;AAC1B,mDAAwD;AAA/C,4GAAA,UAAU,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC7B,2CAA2C;AAC3C,wFAAwF;AACxF,mEAAmE;AACnE,mDAAmD;AACnD,uCAA4G;AAAnG,iHAAA,qBAAqB,OAAA;AAAE,2HAAA,+BAA+B,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAExF,+CAA6E;AAApE,sHAAA,sBAAsB,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AACrD,6DAAuF;AAA9E,yHAAA,kBAAkB,OAAA;AAAE,kIAAA,2BAA2B,OAAA;AACxD,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC3C,mDAAoJ;AAA3I,qHAAA,mBAAmB,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAC1H,iDAA8D;AAArD,6GAAA,YAAY,OAAA;AAAE,+GAAA,cAAc,OAAA;AACrC,iDAA6D;AAApD,4HAAA,2BAA2B,OAAA;AACpC,6DAA8F;AAArF,iIAAA,0BAA0B,OAAA;AAAE,iIAAA,0BAA0B,OAAA","sourcesContent":["export { getCoreConfiguration } from \"./coreConfigUtils\";\nexport { default as _ } from \"lodash\";\nexport { default as sharp } from \"sharp\";\nexport { HTTP_STATUS, sendError, sendSuccess } from \"./responseUtils\";\nexport { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from \"./dateUtils\";\nexport { validateWithSchema, validateMultipleSchemas, convertPayloadByTableSchema, validateModelFieldsWithData, createPublicScopeSchema, normalizePublicScopeFromBody } from \"./schemaUtils\";\nexport { default as logger } from \"./logUtils\";\nexport { throwError, logError } from \"./exceptionUtils\";\n// export { getSwmAuth } from \"./smwUtils\";\n// export { getRequestHeaderLocCode, checkRequestContentIsEmpty } from \"./requestUtils\";\n// export { storeJwtInMemory, getJwtFromMemory } from \"./jwtUtils\";\n// export { resizeImageBuffer } from \"./shapeUtils\"\nexport { getFormattedZodErrors, getFormattedZodErrorsIntoString, buildCommonStatusSchema } from \"./zodUtils\"\nexport type { DefaultServiceProps } from \"./serviceUtils\"\nexport { getDefaultServiceProps, generateServiceProps } from \"./serviceUtils\"\nexport { buildFullFieldName, groupPayloadInjectionFields } from \"./injectionFieldUtils\"\nexport { generateAuthToken, verifyAuthToken } from \"./authUtils\"\nexport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encryptAccessKeySecret, decryptAccessKeySecret } from \"./accessKeyUtils\"\nexport { hashPassword, verifyPassword } from \"./passwordUtils\"\nexport { generateFileThumbnailBuffer } from \"./fileThumbnail\"\nexport { validateFormatEmailAddress, validateFormatMobileNumber } from \"./validateFormatUtils\""]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAC7B,iCAAsC;AAA7B,4GAAA,OAAO,OAAK;AACrB,+BAAyC;AAAhC,+GAAA,OAAO,OAAS;AACzB,iDAAsE;AAA7D,4GAAA,WAAW,OAAA;AAAE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAC5C,yCAAsG;AAA7F,kGAAA,KAAK,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAChF,6CAA6L;AAApL,iHAAA,kBAAkB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,2HAAA,4BAA4B,OAAA;AACrK,uCAA+C;AAAtC,mHAAA,OAAO,OAAU;AAC1B,mDAAwD;AAA/C,4GAAA,UAAU,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC7B,2CAA2C;AAC3C,wFAAwF;AACxF,mEAAmE;AACnE,mDAAmD;AACnD,uCAA4G;AAAnG,iHAAA,qBAAqB,OAAA;AAAE,2HAAA,+BAA+B,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAExF,+CAA6E;AAApE,sHAAA,sBAAsB,OAAA;AAAE,oHAAA,oBAAoB,OAAA;AACrD,6DAAuF;AAA9E,yHAAA,kBAAkB,OAAA;AAAE,kIAAA,2BAA2B,OAAA;AACxD,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC3C,mDAAoJ;AAA3I,qHAAA,mBAAmB,OAAA;AAAE,yHAAA,uBAAuB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAAE,wHAAA,sBAAsB,OAAA;AAC1H,iDAAsH;AAA7G,0HAAA,yBAAyB,OAAA;AAAE,4HAAA,2BAA2B,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,+GAAA,cAAc,OAAA;AAC7F,iDAA6D;AAApD,4HAAA,2BAA2B,OAAA;AACpC,6DAA8F;AAArF,iIAAA,0BAA0B,OAAA;AAAE,iIAAA,0BAA0B,OAAA","sourcesContent":["export { getCoreConfiguration } from \"./coreConfigUtils\";\nexport { default as _ } from \"lodash\";\nexport { default as sharp } from \"sharp\";\nexport { HTTP_STATUS, sendError, sendSuccess } from \"./responseUtils\";\nexport { dayjs, getCurrentDateTime, getCurrentDateTimeISO, formatDisplayDateTime } from \"./dateUtils\";\nexport { validateWithSchema, validateMultipleSchemas, convertPayloadByTableSchema, validateModelFieldsWithData, createPublicScopeSchema, normalizePublicScopeFromBody } from \"./schemaUtils\";\nexport { default as logger } from \"./logUtils\";\nexport { throwError, logError } from \"./exceptionUtils\";\n// export { getSwmAuth } from \"./smwUtils\";\n// export { getRequestHeaderLocCode, checkRequestContentIsEmpty } from \"./requestUtils\";\n// export { storeJwtInMemory, getJwtFromMemory } from \"./jwtUtils\";\n// export { resizeImageBuffer } from \"./shapeUtils\"\nexport { getFormattedZodErrors, getFormattedZodErrorsIntoString, buildCommonStatusSchema } from \"./zodUtils\"\nexport type { DefaultServiceProps } from \"./serviceUtils\"\nexport { getDefaultServiceProps, generateServiceProps } from \"./serviceUtils\"\nexport { buildFullFieldName, groupPayloadInjectionFields } from \"./injectionFieldUtils\"\nexport { generateAuthToken, verifyAuthToken } from \"./authUtils\"\nexport { generateAccessKeyId, generateAccessKeySecret, hashAccessKeySecret, encryptAccessKeySecret, decryptAccessKeySecret } from \"./accessKeyUtils\"\nexport { loginPasswordFormatSchema, validateLoginPasswordFormat, hashPassword, verifyPassword } from \"./passwordUtils\"\nexport { generateFileThumbnailBuffer } from \"./fileThumbnail\"\nexport { validateFormatEmailAddress, validateFormatMobileNumber } from \"./validateFormatUtils\""]}
@@ -1,2 +1,5 @@
1
+ import z from "zod";
2
+ export declare const loginPasswordFormatSchema: z.ZodString;
3
+ export declare const validateLoginPasswordFormat: (loginPassword: string) => string;
1
4
  export declare function hashPassword(password: string): Promise<string>;
2
5
  export declare function verifyPassword(password: string, hash: string): Promise<boolean>;
@@ -3,9 +3,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateLoginPasswordFormat = exports.loginPasswordFormatSchema = void 0;
6
7
  exports.hashPassword = hashPassword;
7
8
  exports.verifyPassword = verifyPassword;
8
9
  const bcrypt_1 = __importDefault(require("bcrypt"));
10
+ const zod_1 = __importDefault(require("zod"));
11
+ // Zod schema for password format
12
+ exports.loginPasswordFormatSchema = zod_1.default
13
+ .string()
14
+ .min(8, { message: "Password must be at least 8 characters" })
15
+ .max(64, { message: "Password must be at most 64 characters" })
16
+ .regex(/[a-zA-Z]/, "Password must include at least one letter")
17
+ .regex(/[0-9!@#$%^&*()_\-+=]/, "Password must include at least one number or special character");
18
+ const validateLoginPasswordFormat = (loginPassword) => {
19
+ try {
20
+ return exports.loginPasswordFormatSchema.parse(loginPassword); // throws if invalid
21
+ }
22
+ catch (err) {
23
+ if (err instanceof zod_1.default.ZodError) {
24
+ throw new Error(`Invalid login password criteria: "${loginPassword}". ` +
25
+ err.errors.map((e) => e.message).join("; "));
26
+ }
27
+ throw err;
28
+ }
29
+ };
30
+ exports.validateLoginPasswordFormat = validateLoginPasswordFormat;
9
31
  // Hash a password
10
32
  async function hashPassword(password) {
11
33
  const saltRounds = 12; // Adjust for security vs performance
@@ -1 +1 @@
1
- {"version":3,"file":"passwordUtils.js","sourceRoot":"","sources":["../../src/utils/passwordUtils.ts"],"names":[],"mappings":";;;;;AAGA,oCAIC;AAGD,wCAMC;AAhBD,oDAA4B;AAE5B,kBAAkB;AACX,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,qCAAqC;IAC5D,MAAM,IAAI,GAAG,MAAM,gBAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,kBAAkB;AACX,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY;IAC/D,IAAI,CAAC;QACD,OAAO,MAAM,gBAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;AACL,CAAC","sourcesContent":["import bcrypt from \"bcrypt\";\n\n// Hash a password\nexport async function hashPassword(password: string): Promise<string> {\n const saltRounds = 12; // Adjust for security vs performance\n const hash = await bcrypt.hash(password, saltRounds);\n return hash;\n}\n\n// Verify password\nexport async function verifyPassword(password: string, hash: string): Promise<boolean> {\n try {\n return await bcrypt.compare(password, hash);\n } catch (error) {\n throw Error(`Failed to verify password: ${password}`)\n }\n}"]}
1
+ {"version":3,"file":"passwordUtils.js","sourceRoot":"","sources":["../../src/utils/passwordUtils.ts"],"names":[],"mappings":";;;;;;AA2BA,oCAIC;AAGD,wCAMC;AAxCD,oDAA4B;AAE5B,8CAAoB;AAEpB,iCAAiC;AACpB,QAAA,yBAAyB,GAAG,aAAC;KACrC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;KAC7D,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;KAC9D,KAAK,CAAC,UAAU,EAAE,2CAA2C,CAAC;KAC9D,KAAK,CAAC,sBAAsB,EAAE,gEAAgE,CAAC,CAAC;AAE9F,MAAM,2BAA2B,GAAG,CAAC,aAAqB,EAAE,EAAE;IACjE,IAAI,CAAC;QACD,OAAO,iCAAyB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB;IAC/E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,aAAC,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACX,qCAAqC,aAAa,KAAK;gBACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C,CAAC;QACN,CAAC;QACD,MAAM,GAAG,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAZW,QAAA,2BAA2B,+BAYtC;AAEF,kBAAkB;AACX,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,qCAAqC;IAC5D,MAAM,IAAI,GAAG,MAAM,gBAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,kBAAkB;AACX,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY;IAC/D,IAAI,CAAC;QACD,OAAO,MAAM,gBAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;AACL,CAAC","sourcesContent":["import bcrypt from \"bcrypt\";\n\nimport z from \"zod\";\n\n// Zod schema for password format\nexport const loginPasswordFormatSchema = z\n .string()\n .min(8, { message: \"Password must be at least 8 characters\" })\n .max(64, { message: \"Password must be at most 64 characters\" })\n .regex(/[a-zA-Z]/, \"Password must include at least one letter\")\n .regex(/[0-9!@#$%^&*()_\\-+=]/, \"Password must include at least one number or special character\");\n\nexport const validateLoginPasswordFormat = (loginPassword: string) => {\n try {\n return loginPasswordFormatSchema.parse(loginPassword); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid login password criteria: \"${loginPassword}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n};\n\n// Hash a password\nexport async function hashPassword(password: string): Promise<string> {\n const saltRounds = 12; // Adjust for security vs performance\n const hash = await bcrypt.hash(password, saltRounds);\n return hash;\n}\n\n// Verify password\nexport async function verifyPassword(password: string, hash: string): Promise<boolean> {\n try {\n return await bcrypt.compare(password, hash);\n } catch (error) {\n throw Error(`Failed to verify password: ${password}`)\n }\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "storemw-core-api",
3
- "version": "1.0.138",
3
+ "version": "1.0.140",
4
4
  "description": "STOREMW Core API",
5
5
  "main": "dist/app.js",
6
6
  "types": "dist/app.d.ts",