@premiumsarl/premium-nodejs-library 4.0.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.
Files changed (70) hide show
  1. package/README.md +132 -0
  2. package/dist/auth/index.d.ts +19 -0
  3. package/dist/auth/index.d.ts.map +1 -0
  4. package/dist/auth/index.js +61 -0
  5. package/dist/auth/index.js.map +1 -0
  6. package/dist/db/mysql.d.ts +26 -0
  7. package/dist/db/mysql.d.ts.map +1 -0
  8. package/dist/db/mysql.js +64 -0
  9. package/dist/db/mysql.js.map +1 -0
  10. package/dist/db/prisma.d.ts +21 -0
  11. package/dist/db/prisma.d.ts.map +1 -0
  12. package/dist/db/prisma.js +34 -0
  13. package/dist/db/prisma.js.map +1 -0
  14. package/dist/email/index.d.ts +23 -0
  15. package/dist/email/index.d.ts.map +1 -0
  16. package/dist/email/index.js +79 -0
  17. package/dist/email/index.js.map +1 -0
  18. package/dist/index.d.ts +104 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +193 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/otp/index.d.ts +40 -0
  23. package/dist/otp/index.d.ts.map +1 -0
  24. package/dist/otp/index.js +85 -0
  25. package/dist/otp/index.js.map +1 -0
  26. package/dist/payments/paytech.d.ts +32 -0
  27. package/dist/payments/paytech.d.ts.map +1 -0
  28. package/dist/payments/paytech.js +65 -0
  29. package/dist/payments/paytech.js.map +1 -0
  30. package/dist/payments/stripe.d.ts +18 -0
  31. package/dist/payments/stripe.d.ts.map +1 -0
  32. package/dist/payments/stripe.js +24 -0
  33. package/dist/payments/stripe.js.map +1 -0
  34. package/dist/responses/core.d.ts +23 -0
  35. package/dist/responses/core.d.ts.map +1 -0
  36. package/dist/responses/core.js +45 -0
  37. package/dist/responses/core.js.map +1 -0
  38. package/dist/responses/express.d.ts +17 -0
  39. package/dist/responses/express.d.ts.map +1 -0
  40. package/dist/responses/express.js +67 -0
  41. package/dist/responses/express.js.map +1 -0
  42. package/dist/responses/nextjs.d.ts +15 -0
  43. package/dist/responses/nextjs.d.ts.map +1 -0
  44. package/dist/responses/nextjs.js +45 -0
  45. package/dist/responses/nextjs.js.map +1 -0
  46. package/dist/storage/s3.d.ts +66 -0
  47. package/dist/storage/s3.d.ts.map +1 -0
  48. package/dist/storage/s3.js +172 -0
  49. package/dist/storage/s3.js.map +1 -0
  50. package/dist/storage/supabase.d.ts +41 -0
  51. package/dist/storage/supabase.d.ts.map +1 -0
  52. package/dist/storage/supabase.js +83 -0
  53. package/dist/storage/supabase.js.map +1 -0
  54. package/dist/utils/date.d.ts +29 -0
  55. package/dist/utils/date.d.ts.map +1 -0
  56. package/dist/utils/date.js +79 -0
  57. package/dist/utils/date.js.map +1 -0
  58. package/dist/utils/misc.d.ts +25 -0
  59. package/dist/utils/misc.d.ts.map +1 -0
  60. package/dist/utils/misc.js +50 -0
  61. package/dist/utils/misc.js.map +1 -0
  62. package/dist/utils/string.d.ts +29 -0
  63. package/dist/utils/string.d.ts.map +1 -0
  64. package/dist/utils/string.js +56 -0
  65. package/dist/utils/string.js.map +1 -0
  66. package/dist/validation/index.d.ts +46 -0
  67. package/dist/validation/index.d.ts.map +1 -0
  68. package/dist/validation/index.js +189 -0
  69. package/dist/validation/index.js.map +1 -0
  70. package/package.json +66 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Pagination and data utilities.
3
+ */
4
+ /**
5
+ * Apply pagination to an array.
6
+ *
7
+ * @param data - Array of items
8
+ * @param page - Page number (1-indexed)
9
+ * @param limit - Items per page
10
+ */
11
+ export declare const applyPagination: <T>(data: T[], page: number, limit: number) => T[];
12
+ /**
13
+ * Generate a random number within a range.
14
+ */
15
+ export declare const randomNumberModule: (Min: number, Max: number) => number;
16
+ /**
17
+ * Convert a keyed object to an array of values.
18
+ */
19
+ export declare const removeKeysFromJoinData: (data: Record<string, unknown>) => unknown[];
20
+ /**
21
+ * Get environment context string from an
22
+ * environment name.
23
+ */
24
+ export declare const getContextFromEnvironment: (environment: string) => string;
25
+ //# sourceMappingURL=misc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/utils/misc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,uBAElB,MAAM,SACL,MAAM,QAIhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QACtB,MAAM,OACN,MAAM,KACZ,MAIF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,SACzB,OAAO,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,EAET,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,gBACrB,MAAM,KACpB,MAWF,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Pagination and data utilities.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getContextFromEnvironment = exports.removeKeysFromJoinData = exports.randomNumberModule = exports.applyPagination = void 0;
7
+ /**
8
+ * Apply pagination to an array.
9
+ *
10
+ * @param data - Array of items
11
+ * @param page - Page number (1-indexed)
12
+ * @param limit - Items per page
13
+ */
14
+ const applyPagination = (data, page, limit) => {
15
+ const startIndex = (page - 1) * limit;
16
+ return data.slice(startIndex, startIndex + limit);
17
+ };
18
+ exports.applyPagination = applyPagination;
19
+ /**
20
+ * Generate a random number within a range.
21
+ */
22
+ const randomNumberModule = (Min, Max) => {
23
+ return Math.round(Math.random() * (Max - Min) + Min);
24
+ };
25
+ exports.randomNumberModule = randomNumberModule;
26
+ /**
27
+ * Convert a keyed object to an array of values.
28
+ */
29
+ const removeKeysFromJoinData = (data) => {
30
+ return Object.values(data);
31
+ };
32
+ exports.removeKeysFromJoinData = removeKeysFromJoinData;
33
+ /**
34
+ * Get environment context string from an
35
+ * environment name.
36
+ */
37
+ const getContextFromEnvironment = (environment) => {
38
+ switch (environment) {
39
+ case "prod":
40
+ return "production";
41
+ case "beta":
42
+ return "beta";
43
+ case "dev":
44
+ return "development";
45
+ default:
46
+ return "";
47
+ }
48
+ };
49
+ exports.getContextFromEnvironment = getContextFromEnvironment;
50
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/utils/misc.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;;;;;GAMG;AACI,MAAM,eAAe,GAAG,CAC3B,IAAS,EACT,IAAY,EACZ,KAAa,EACV,EAAE;IACL,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;AACtD,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B;AAEF;;GAEG;AACI,MAAM,kBAAkB,GAAG,CAC9B,GAAW,EACX,GAAW,EACL,EAAE;IACR,OAAO,IAAI,CAAC,KAAK,CACb,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CACpC,CAAC;AACN,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B;AAEF;;GAEG;AACI,MAAM,sBAAsB,GAAG,CAClC,IAA6B,EACpB,EAAE;IACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAJW,QAAA,sBAAsB,0BAIjC;AAEF;;;GAGG;AACI,MAAM,yBAAyB,GAAG,CACrC,WAAmB,EACb,EAAE;IACR,QAAQ,WAAW,EAAE,CAAC;QAClB,KAAK,MAAM;YACP,OAAO,YAAY,CAAC;QACxB,KAAK,MAAM;YACP,OAAO,MAAM,CAAC;QAClB,KAAK,KAAK;YACN,OAAO,aAAa,CAAC;QACzB;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,yBAAyB,6BAapC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * String utility functions.
3
+ */
4
+ /**
5
+ * Capitalize the first letter of a string.
6
+ */
7
+ export declare const capitalizeFirstLetter: (sentence: string) => string;
8
+ /**
9
+ * Remove special characters from a string.
10
+ */
11
+ export declare const removeSpecialCharactersFromNormalString: (str: string) => string;
12
+ /**
13
+ * Remove special characters from a URL string.
14
+ */
15
+ export declare const removeSpecialCharactersFromURL: (str: string) => string;
16
+ /**
17
+ * Remove accent marks from a string.
18
+ */
19
+ export declare const removeAccents: (str: string) => string;
20
+ /**
21
+ * Normalize a string using NFD decomposition.
22
+ */
23
+ export declare const normalizeDataNFD: (str: string) => string;
24
+ /**
25
+ * Fully normalize a string: NFD + remove accents
26
+ * + remove special characters.
27
+ */
28
+ export declare const normalizeString: (str: string) => string;
29
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,aACpB,MAAM,KACjB,MAMF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uCAAuC,QAC3C,MAAM,KACZ,MAEF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,QAClC,MAAM,KACZ,MAEF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,MAE3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,QACpB,MAAM,KACZ,MAEF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,QACnB,MAAM,KACZ,MAKF,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * String utility functions.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.normalizeString = exports.normalizeDataNFD = exports.removeAccents = exports.removeSpecialCharactersFromURL = exports.removeSpecialCharactersFromNormalString = exports.capitalizeFirstLetter = void 0;
7
+ /**
8
+ * Capitalize the first letter of a string.
9
+ */
10
+ const capitalizeFirstLetter = (sentence) => {
11
+ if (!sentence)
12
+ return sentence;
13
+ return (sentence.charAt(0).toUpperCase() +
14
+ sentence.slice(1));
15
+ };
16
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
17
+ /**
18
+ * Remove special characters from a string.
19
+ */
20
+ const removeSpecialCharactersFromNormalString = (str) => {
21
+ return str.replace(/[®"'.*+?^${}()|[\]\\]/g, "");
22
+ };
23
+ exports.removeSpecialCharactersFromNormalString = removeSpecialCharactersFromNormalString;
24
+ /**
25
+ * Remove special characters from a URL string.
26
+ */
27
+ const removeSpecialCharactersFromURL = (str) => {
28
+ return str.replace(/["]/g, "");
29
+ };
30
+ exports.removeSpecialCharactersFromURL = removeSpecialCharactersFromURL;
31
+ /**
32
+ * Remove accent marks from a string.
33
+ */
34
+ const removeAccents = (str) => {
35
+ return str.replace(/[\u0300-\u036f]/g, "");
36
+ };
37
+ exports.removeAccents = removeAccents;
38
+ /**
39
+ * Normalize a string using NFD decomposition.
40
+ */
41
+ const normalizeDataNFD = (str) => {
42
+ return str.normalize("NFD");
43
+ };
44
+ exports.normalizeDataNFD = normalizeDataNFD;
45
+ /**
46
+ * Fully normalize a string: NFD + remove accents
47
+ * + remove special characters.
48
+ */
49
+ const normalizeString = (str) => {
50
+ return str
51
+ .normalize("NFD")
52
+ .replace(/[\u0300-\u036f]/g, "")
53
+ .replace(/[®"'.*+?^${}()|[\]\\]/g, "");
54
+ };
55
+ exports.normalizeString = normalizeString;
56
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACjC,QAAgB,EACV,EAAE;IACR,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/B,OAAO,CACH,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAChC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CACpB,CAAC;AACN,CAAC,CAAC;AARW,QAAA,qBAAqB,yBAQhC;AAEF;;GAEG;AACI,MAAM,uCAAuC,GAAG,CACnD,GAAW,EACL,EAAE;IACR,OAAO,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAJW,QAAA,uCAAuC,2CAIlD;AAEF;;GAEG;AACI,MAAM,8BAA8B,GAAG,CAC1C,GAAW,EACL,EAAE;IACR,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC;AAJW,QAAA,8BAA8B,kCAIzC;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,GAAW,EAAU,EAAE;IACjD,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB;AAEF;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAC5B,GAAW,EACL,EAAE;IACR,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B;AAEF;;;GAGG;AACI,MAAM,eAAe,GAAG,CAC3B,GAAW,EACL,EAAE;IACR,OAAO,GAAG;SACL,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Input validation utilities.
3
+ */
4
+ /**
5
+ * Check required fields with type-based validation.
6
+ * Backward-compatible with the original
7
+ * checkRequiredValidation API.
8
+ */
9
+ export declare const checkRequiredValidation: (data: Array<{
10
+ field: string;
11
+ value: unknown;
12
+ type: string;
13
+ }>) => Promise<{
14
+ status: boolean;
15
+ message?: string;
16
+ }>;
17
+ /**
18
+ * Validate an email address format.
19
+ */
20
+ export declare const isValidEmail: (email: string) => boolean;
21
+ /**
22
+ * Validate a time string in HH:MM format.
23
+ */
24
+ export declare const isValidTime: (time: string) => boolean;
25
+ /**
26
+ * Check if end time comes after start time.
27
+ */
28
+ export declare const isValidEndTime: (startTime: string, endTime: string) => boolean;
29
+ /**
30
+ * Check if a value is non-empty.
31
+ * Works for strings, arrays, and objects.
32
+ */
33
+ export declare const checkEmptyString: (data: unknown) => boolean;
34
+ /**
35
+ * Validate that at least email or phone is provided.
36
+ */
37
+ export declare const validateEmailAndPhone: (email: string | null, phone: string | null) => string | null;
38
+ /**
39
+ * Validate existing user data for auth flows.
40
+ */
41
+ export declare const checkExistingUser: (existingUserByEmail: Record<string, unknown> | null, existingUserByPhone: Record<string, unknown> | null) => Record<string, unknown> | undefined;
42
+ /**
43
+ * Check if user info is verified.
44
+ */
45
+ export declare const checkVerifiedUserInfo: (existingUser: Record<string, unknown>, email: string | null, phone: string | null) => string | undefined;
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,SAC1B,MAAM;IACR,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,KACH,QAAQ;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAqE/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,UAAW,MAAM,KAAG,OAG5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,OAG1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,cACZ,MAAM,WACR,MAAM,KAChB,OAIF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SACnB,OAAO,KACd,OAcF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,UACvB,MAAM,GAAG,IAAI,SACb,MAAM,GAAG,IAAI,KACrB,MAAM,GAAG,IAWX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,wBACL,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,uBAC9B,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,wCAuCtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,iBAChB,OAAO,MAAM,EAAE,OAAO,CAAC,SAC9B,MAAM,GAAG,IAAI,SACb,MAAM,GAAG,IAAI,KACrB,MAAM,GAAG,SAwCX,CAAC"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * Input validation utilities.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkVerifiedUserInfo = exports.checkExistingUser = exports.validateEmailAndPhone = exports.checkEmptyString = exports.isValidEndTime = exports.isValidTime = exports.isValidEmail = exports.checkRequiredValidation = void 0;
7
+ /**
8
+ * Check required fields with type-based validation.
9
+ * Backward-compatible with the original
10
+ * checkRequiredValidation API.
11
+ */
12
+ const checkRequiredValidation = (data) => {
13
+ return new Promise((resolve) => {
14
+ for (const item of data) {
15
+ let message = "";
16
+ const value = typeof item.value === "number"
17
+ ? item.value.toString()
18
+ : item.value;
19
+ switch (item.type) {
20
+ case "Empty":
21
+ if (!value) {
22
+ message =
23
+ item.field + " is required";
24
+ }
25
+ break;
26
+ case "Length":
27
+ if (value &&
28
+ (value.length < 8 ||
29
+ value.length > 255)) {
30
+ message =
31
+ item.field +
32
+ " must be between 8–255 chars";
33
+ }
34
+ break;
35
+ case "Length maximum 255 characters":
36
+ if (value && value.length > 255) {
37
+ message =
38
+ item.field +
39
+ " must be max 255 chars";
40
+ }
41
+ break;
42
+ case "Confirm Password": {
43
+ const pwIdx = data.findIndex((d) => d.field === "Password");
44
+ const cpIdx = data.findIndex((d) => d.field === "Confirm password");
45
+ if (pwIdx !== -1 && cpIdx !== -1) {
46
+ const pw = String(data[pwIdx].value);
47
+ const cp = String(data[cpIdx].value);
48
+ if (pw !== cp) {
49
+ message =
50
+ item.field +
51
+ " does not match";
52
+ }
53
+ }
54
+ break;
55
+ }
56
+ }
57
+ if (message) {
58
+ resolve({ status: false, message });
59
+ return;
60
+ }
61
+ }
62
+ resolve({ status: true });
63
+ });
64
+ };
65
+ exports.checkRequiredValidation = checkRequiredValidation;
66
+ /**
67
+ * Validate an email address format.
68
+ */
69
+ const isValidEmail = (email) => {
70
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
71
+ return emailRegex.test(email);
72
+ };
73
+ exports.isValidEmail = isValidEmail;
74
+ /**
75
+ * Validate a time string in HH:MM format.
76
+ */
77
+ const isValidTime = (time) => {
78
+ const timePattern = /^([01]\d|2[0-3]):([0-5]\d)$/;
79
+ return timePattern.test(time);
80
+ };
81
+ exports.isValidTime = isValidTime;
82
+ /**
83
+ * Check if end time comes after start time.
84
+ */
85
+ const isValidEndTime = (startTime, endTime) => {
86
+ const [sH, sM] = startTime.split(":").map(Number);
87
+ const [eH, eM] = endTime.split(":").map(Number);
88
+ return eH * 60 + eM > sH * 60 + sM;
89
+ };
90
+ exports.isValidEndTime = isValidEndTime;
91
+ /**
92
+ * Check if a value is non-empty.
93
+ * Works for strings, arrays, and objects.
94
+ */
95
+ const checkEmptyString = (data) => {
96
+ if (typeof data === "string") {
97
+ return (data.trim() !== "" &&
98
+ data.toLowerCase() !== "null");
99
+ }
100
+ if (Array.isArray(data)) {
101
+ return data.length > 0;
102
+ }
103
+ if (data !== null && typeof data === "object") {
104
+ return Object.keys(data).length > 0;
105
+ }
106
+ return !!data;
107
+ };
108
+ exports.checkEmptyString = checkEmptyString;
109
+ /**
110
+ * Validate that at least email or phone is provided.
111
+ */
112
+ const validateEmailAndPhone = (email, phone) => {
113
+ if (!(0, exports.checkEmptyString)(email) &&
114
+ !(0, exports.checkEmptyString)(phone)) {
115
+ return "Please provide email or phone number";
116
+ }
117
+ if (email && !(0, exports.isValidEmail)(email)) {
118
+ return "Invalid email address";
119
+ }
120
+ return null;
121
+ };
122
+ exports.validateEmailAndPhone = validateEmailAndPhone;
123
+ /**
124
+ * Validate existing user data for auth flows.
125
+ */
126
+ const checkExistingUser = (existingUserByEmail, existingUserByPhone) => {
127
+ if (existingUserByEmail && existingUserByPhone) {
128
+ if ((existingUserByEmail.emailOtpValidated &&
129
+ existingUserByEmail.email !==
130
+ existingUserByPhone.email) ||
131
+ (existingUserByPhone.phoneOtpValidated &&
132
+ existingUserByEmail.phone !==
133
+ existingUserByPhone.phone)) {
134
+ return {
135
+ error: "This Email or Phone number " +
136
+ "is already taken",
137
+ };
138
+ }
139
+ if (existingUserByEmail.email !==
140
+ existingUserByPhone.email &&
141
+ existingUserByEmail.phone !==
142
+ existingUserByPhone.phone) {
143
+ return {
144
+ error: "Please provide email or phone " +
145
+ "that belongs to you",
146
+ };
147
+ }
148
+ return (existingUserByEmail || existingUserByPhone);
149
+ }
150
+ if (existingUserByEmail)
151
+ return existingUserByEmail;
152
+ if (existingUserByPhone)
153
+ return existingUserByPhone;
154
+ return undefined;
155
+ };
156
+ exports.checkExistingUser = checkExistingUser;
157
+ /**
158
+ * Check if user info is verified.
159
+ */
160
+ const checkVerifiedUserInfo = (existingUser, email, phone) => {
161
+ if (!existingUser.emailOtpValidated &&
162
+ !existingUser.phoneOtpValidated) {
163
+ return "User is not verified";
164
+ }
165
+ if (email &&
166
+ existingUser.email !== email &&
167
+ existingUser.emailOtpValidated &&
168
+ !existingUser.phoneOtpValidated) {
169
+ return "This email is not verified";
170
+ }
171
+ if (phone &&
172
+ existingUser.phone !== phone &&
173
+ existingUser.phoneOtpValidated &&
174
+ !existingUser.emailOtpValidated) {
175
+ return "This phone is not verified";
176
+ }
177
+ if (existingUser.emailOtpValidated &&
178
+ existingUser.phoneOtpValidated &&
179
+ existingUser.phone !== phone &&
180
+ existingUser.email !== email) {
181
+ return "The email or phone should be verified";
182
+ }
183
+ if ((0, exports.checkEmptyString)(existingUser.name)) {
184
+ return "You have already completed your sign up.";
185
+ }
186
+ return undefined;
187
+ };
188
+ exports.checkVerifiedUserInfo = checkVerifiedUserInfo;
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@premiumsarl/premium-nodejs-library",
3
+ "version": "4.0.0",
4
+ "description": "Shared Node.js library for Premium SARL projects (Babel, GrooMe, etc.)",
5
+ "publishConfig": {
6
+ "access": "restricted"
7
+ },
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./dist/*": "./dist/*"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "clean": "rm -rf dist",
20
+ "prepublish": "npm run build"
21
+ },
22
+ "author": "premiumsarl",
23
+ "license": "ISC",
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "dependencies": {
28
+ "@aws-sdk/client-s3": "^3.504.0",
29
+ "@sendgrid/mail": "^8.1.4",
30
+ "axios": "^1.7.7",
31
+ "bcryptjs": "^3.0.3",
32
+ "http-status-codes": "^2.3.0",
33
+ "jsonwebtoken": "^9.0.2"
34
+ },
35
+ "devDependencies": {
36
+ "@types/bcryptjs": "^3.0.0",
37
+ "@types/express": "^4.17.21",
38
+ "@types/jsonwebtoken": "^9.0.9",
39
+ "@types/node": "^20.11.16",
40
+ "typescript": "^5.3.3"
41
+ },
42
+ "peerDependencies": {
43
+ "express": "^4.0.0 || ^5.0.0",
44
+ "mysql2": "^3.0.0",
45
+ "stripe": ">=14.0.0",
46
+ "@supabase/supabase-js": "^2.0.0",
47
+ "@prisma/client": "^5.0.0"
48
+ },
49
+ "peerDependenciesMeta": {
50
+ "express": {
51
+ "optional": true
52
+ },
53
+ "mysql2": {
54
+ "optional": true
55
+ },
56
+ "stripe": {
57
+ "optional": true
58
+ },
59
+ "@supabase/supabase-js": {
60
+ "optional": true
61
+ },
62
+ "@prisma/client": {
63
+ "optional": true
64
+ }
65
+ }
66
+ }