@cryptexlabs/codex-nodejs-common 0.12.2 → 0.12.4

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 (34) hide show
  1. package/lib/package.json +1 -1
  2. package/lib/src/decorator/is-valid-email-type.d.ts +2 -4
  3. package/lib/src/decorator/is-valid-email-type.js +5 -15
  4. package/lib/src/decorator/is-valid-email-type.js.map +1 -1
  5. package/lib/src/decorator/is-valid-phone-type.d.ts +2 -4
  6. package/lib/src/decorator/is-valid-phone-type.js +5 -15
  7. package/lib/src/decorator/is-valid-phone-type.js.map +1 -1
  8. package/lib/src/decorator/is-valid-utc-timezone.d.ts +1 -1
  9. package/lib/src/decorator/is-valid-utc-timezone.js +4 -3
  10. package/lib/src/decorator/is-valid-utc-timezone.js.map +1 -1
  11. package/lib/src/dto/email.dto.js +5 -3
  12. package/lib/src/dto/email.dto.js.map +1 -1
  13. package/lib/src/dto/phone.dto.js +3 -1
  14. package/lib/src/dto/phone.dto.js.map +1 -1
  15. package/lib/src/dto/photo.dto.js +1 -0
  16. package/lib/src/dto/photo.dto.js.map +1 -1
  17. package/lib/src/dto/profile.dto.d.ts +16 -12
  18. package/lib/src/dto/profile.dto.js +77 -0
  19. package/lib/src/dto/profile.dto.js.map +1 -1
  20. package/lib/src/dto/user.dto.js +7 -0
  21. package/lib/src/dto/user.dto.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/decorator/is-valid-email-type.ts +7 -23
  24. package/src/decorator/is-valid-phone-type.ts +8 -33
  25. package/src/decorator/is-valid-utc-timezone.ts +6 -8
  26. package/src/dto/email.dto.ts +4 -3
  27. package/src/dto/phone.dto.ts +3 -1
  28. package/src/dto/photo.dto.ts +1 -0
  29. package/src/dto/profile.dto.ts +50 -19
  30. package/src/dto/user.dto.ts +4 -1
  31. package/lib/src/decorator/is-valid-email.d.ts +0 -9
  32. package/lib/src/decorator/is-valid-email.js +0 -43
  33. package/lib/src/decorator/is-valid-email.js.map +0 -1
  34. package/src/decorator/is-valid-email.ts +0 -42
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.12.2",
3
+ "version": "0.12.4",
4
4
  "description": "Common code for Codex framework",
5
5
  "main": "lib/src/index.js",
6
6
  "type": "commonjs",
@@ -1,9 +1,7 @@
1
1
  import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
2
  export declare class IsValidEmailTypeConstraint implements ValidatorConstraintInterface {
3
3
  private readonly EMAIL_TYPES;
4
- validate(emailType: any, args: ValidationArguments): boolean;
4
+ validate(timezone: any, args: ValidationArguments): boolean;
5
5
  defaultMessage(args: ValidationArguments): string;
6
6
  }
7
- export declare function IsValidEmailType(validationOptions?: ValidationOptions & {
8
- optional?: boolean;
9
- }): (object: any, propertyName: string) => void;
7
+ export declare function IsValidEmailType(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -14,26 +14,16 @@ let IsValidEmailTypeConstraint = class IsValidEmailTypeConstraint {
14
14
  constructor() {
15
15
  this.EMAIL_TYPES = Object.values(authf_data_model_1.EmailTypeEnum);
16
16
  }
17
- validate(emailType, args) {
18
- var _a;
19
- const optional = ((_a = args.constraints[0]) === null || _a === void 0 ? void 0 : _a.optional) || false;
20
- if (optional && (emailType === undefined || emailType === null)) {
21
- return true;
22
- }
23
- return this.EMAIL_TYPES.includes(emailType);
17
+ validate(timezone, args) {
18
+ return this.EMAIL_TYPES.includes(timezone);
24
19
  }
25
20
  defaultMessage(args) {
26
- var _a;
27
- const optional = ((_a = args.constraints[0]) === null || _a === void 0 ? void 0 : _a.optional) || false;
28
- if (optional && (args.value === undefined || args.value === null)) {
29
- return `"${args.value}" is optional, but it must either be null/undefined or a valid email type.`;
30
- }
31
- return `"${args.value}" is not a valid email type. Allowed types: ${this.EMAIL_TYPES.join(", ")}.`;
21
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
32
22
  }
33
23
  };
34
24
  exports.IsValidEmailTypeConstraint = IsValidEmailTypeConstraint;
35
25
  exports.IsValidEmailTypeConstraint = IsValidEmailTypeConstraint = __decorate([
36
- (0, class_validator_1.ValidatorConstraint)({ async: false })
26
+ (0, class_validator_1.ValidatorConstraint)({ name: "IsValidEmailType", async: false })
37
27
  ], IsValidEmailTypeConstraint);
38
28
  function IsValidEmailType(validationOptions) {
39
29
  return (object, propertyName) => {
@@ -41,7 +31,7 @@ function IsValidEmailType(validationOptions) {
41
31
  target: object.constructor,
42
32
  propertyName,
43
33
  options: validationOptions,
44
- constraints: [{ optional: (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.optional) || false }],
34
+ constraints: [],
45
35
  validator: IsValidEmailTypeConstraint,
46
36
  });
47
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-valid-email-type.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-email-type.ts"],"names":[],"mappings":";;;;;;;;;AAqCA,4CAYC;AAjDD,qDAMyB;AACzB,oEAA8D;AAGvD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAAhC;QAEY,gBAAW,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;IAuB9D,CAAC;IArBC,QAAQ,CAAC,SAAc,EAAE,IAAyB;;QAChD,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,0CAAE,QAAQ,KAAI,KAAK,CAAC;QAExD,IAAI,QAAQ,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,IAAyB;;QACtC,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,0CAAE,QAAQ,KAAI,KAAK,CAAC;QACxD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,IAAI,CAAC,KAAK,4EAA4E,CAAC;QACpG,CAAC;QACD,OAAO,IACL,IAAI,CAAC,KACP,+CAA+C,IAAI,CAAC,WAAW,CAAC,IAAI,CAClE,IAAI,CACL,GAAG,CAAC;IACP,CAAC;CACF,CAAA;AAzBY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACzB,0BAA0B,CAyBtC;AAED,SAAgB,gBAAgB,CAC9B,iBAA8D;IAE9D,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,KAAI,KAAK,EAAE,CAAC;YACjE,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"is-valid-email-type.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-email-type.ts"],"names":[],"mappings":";;;;;;;;;AAuBA,4CAUC;AAjCD,qDAMyB;AACzB,oEAA8D;AAGvD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAAhC;QAEY,gBAAW,GAAa,MAAM,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;IASxE,CAAC;IAPC,QAAQ,CAAC,QAAa,EAAE,IAAyB;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,IAAI,IAAI,CAAC,KAAK,qEAAqE,CAAC;IAC7F,CAAC;CACF,CAAA;AAXY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACnD,0BAA0B,CAWtC;AAED,SAAgB,gBAAgB,CAAC,iBAAqC;IACpE,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,7 @@
1
1
  import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
2
  export declare class IsValidPhoneTypeConstraint implements ValidatorConstraintInterface {
3
3
  private readonly PHONE_TYPES;
4
- validate(phoneType: any, args: ValidationArguments): boolean;
4
+ validate(timezone: any, args: ValidationArguments): boolean;
5
5
  defaultMessage(args: ValidationArguments): string;
6
6
  }
7
- export declare function IsValidPhoneType(validationOptions?: ValidationOptions & {
8
- optional?: boolean;
9
- }): (object: any, propertyName: string) => void;
7
+ export declare function IsValidPhoneType(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -14,26 +14,16 @@ let IsValidPhoneTypeConstraint = class IsValidPhoneTypeConstraint {
14
14
  constructor() {
15
15
  this.PHONE_TYPES = Object.values(authf_data_model_1.PhoneTypeEnum);
16
16
  }
17
- validate(phoneType, args) {
18
- var _a;
19
- const optional = ((_a = args.constraints[0]) === null || _a === void 0 ? void 0 : _a.optional) || false;
20
- if (optional && (phoneType === undefined || phoneType === null)) {
21
- return true;
22
- }
23
- return this.PHONE_TYPES.includes(phoneType);
17
+ validate(timezone, args) {
18
+ return this.PHONE_TYPES.includes(timezone);
24
19
  }
25
20
  defaultMessage(args) {
26
- var _a;
27
- const optional = ((_a = args.constraints[0]) === null || _a === void 0 ? void 0 : _a.optional) || false;
28
- if (optional && (args.value === undefined || args.value === null)) {
29
- return `"${args.property}" is optional but, if defined, must be one of: ${this.PHONE_TYPES.join(", ")}.`;
30
- }
31
- return `"${args.value}" is not a valid phone type. Allowed types: ${this.PHONE_TYPES.join(", ")}.`;
21
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
32
22
  }
33
23
  };
34
24
  exports.IsValidPhoneTypeConstraint = IsValidPhoneTypeConstraint;
35
25
  exports.IsValidPhoneTypeConstraint = IsValidPhoneTypeConstraint = __decorate([
36
- (0, class_validator_1.ValidatorConstraint)({ async: false })
26
+ (0, class_validator_1.ValidatorConstraint)({ name: "IsValidPhoneType", async: false })
37
27
  ], IsValidPhoneTypeConstraint);
38
28
  function IsValidPhoneType(validationOptions) {
39
29
  return (object, propertyName) => {
@@ -41,7 +31,7 @@ function IsValidPhoneType(validationOptions) {
41
31
  target: object.constructor,
42
32
  propertyName,
43
33
  options: validationOptions,
44
- constraints: [{ optional: (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.optional) || false }],
34
+ constraints: [],
45
35
  validator: IsValidPhoneTypeConstraint,
46
36
  });
47
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-valid-phone-type.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-phone-type.ts"],"names":[],"mappings":";;;;;;;;;AA8CA,4CAYC;AA1DD,qDAMyB;AACzB,oEAA8D;AAGvD,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAAhC;QAEY,gBAAW,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;IAgC9D,CAAC;IA9BC,QAAQ,CAAC,SAAc,EAAE,IAAyB;;QAChD,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,0CAAE,QAAQ,KAAI,KAAK,CAAC;QAGxD,IAAI,QAAQ,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,IAAyB;;QACtC,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,0CAAE,QAAQ,KAAI,KAAK,CAAC;QAGxD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,IACL,IAAI,CAAC,QACP,kDAAkD,IAAI,CAAC,WAAW,CAAC,IAAI,CACrE,IAAI,CACL,GAAG,CAAC;QACP,CAAC;QAED,OAAO,IACL,IAAI,CAAC,KACP,+CAA+C,IAAI,CAAC,WAAW,CAAC,IAAI,CAClE,IAAI,CACL,GAAG,CAAC;IACP,CAAC;CACF,CAAA;AAlCY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACzB,0BAA0B,CAkCtC;AAED,SAAgB,gBAAgB,CAC9B,iBAA8D;IAE9D,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,KAAI,KAAK,EAAE,CAAC;YACjE,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"is-valid-phone-type.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-phone-type.ts"],"names":[],"mappings":";;;;;;;;;AAuBA,4CAUC;AAjCD,qDAMyB;AACzB,oEAA6E;AAGtE,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAAhC;QAEY,gBAAW,GAAa,MAAM,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;IASxE,CAAC;IAPC,QAAQ,CAAC,QAAa,EAAE,IAAyB;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,IAAI,IAAI,CAAC,KAAK,qEAAqE,CAAC;IAC7F,CAAC;CACF,CAAA;AAXY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACnD,0BAA0B,CAWtC;AAED,SAAgB,gBAAgB,CAAC,iBAAqC;IACpE,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
2
  export declare class IsValidUtcTimezoneConstraint implements ValidatorConstraintInterface {
3
3
  private readonly TIMEZONES;
4
- validate(timezone: any): boolean;
4
+ validate(timezone: any, args: ValidationArguments): boolean;
5
5
  defaultMessage(args: ValidationArguments): string;
6
6
  }
7
7
  export declare function IsValidUtcTimezone(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -55,16 +55,16 @@ let IsValidUtcTimezoneConstraint = class IsValidUtcTimezoneConstraint {
55
55
  "+14:00",
56
56
  ];
57
57
  }
58
- validate(timezone) {
58
+ validate(timezone, args) {
59
59
  return this.TIMEZONES.includes(timezone);
60
60
  }
61
61
  defaultMessage(args) {
62
- return `"${args.value}" is not a valid UTC timezone. Allowed timezones: ${this.TIMEZONES.join(", ")}.`;
62
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
63
63
  }
64
64
  };
65
65
  exports.IsValidUtcTimezoneConstraint = IsValidUtcTimezoneConstraint;
66
66
  exports.IsValidUtcTimezoneConstraint = IsValidUtcTimezoneConstraint = __decorate([
67
- (0, class_validator_1.ValidatorConstraint)({ async: false })
67
+ (0, class_validator_1.ValidatorConstraint)({ name: "IsValidUtcTimezone", async: false })
68
68
  ], IsValidUtcTimezoneConstraint);
69
69
  function IsValidUtcTimezone(validationOptions) {
70
70
  return (object, propertyName) => {
@@ -72,6 +72,7 @@ function IsValidUtcTimezone(validationOptions) {
72
72
  target: object.constructor,
73
73
  propertyName,
74
74
  options: validationOptions,
75
+ constraints: [],
75
76
  validator: IsValidUtcTimezoneConstraint,
76
77
  });
77
78
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-valid-utc-timezone.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-utc-timezone.ts"],"names":[],"mappings":";;;;;;;;;AAoEA,gDASC;AA7ED,qDAMyB;AAGlB,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAAlC;QAEY,cAAS,GAAG;YAC3B,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC;IAaJ,CAAC;IAXC,QAAQ,CAAC,QAAa;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,IACL,IAAI,CAAC,KACP,qDAAqD,IAAI,CAAC,SAAS,CAAC,IAAI,CACtE,IAAI,CACL,GAAG,CAAC;IACP,CAAC;CACF,CAAA;AAzDY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACzB,4BAA4B,CAyDxC;AAED,SAAgB,kBAAkB,CAAC,iBAAqC;IACtE,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,SAAS,EAAE,4BAA4B;SACxC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"is-valid-utc-timezone.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-utc-timezone.ts"],"names":[],"mappings":";;;;;;;;;AAiEA,gDAUC;AA3ED,qDAMyB;AAIlB,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAAlC;QAEY,cAAS,GAAa;YACrC,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC;IASJ,CAAC;IAPC,QAAQ,CAAC,QAAa,EAAE,IAAyB;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,IAAI,IAAI,CAAC,KAAK,qEAAqE,CAAC;IAC7F,CAAC;CACF,CAAA;AArDY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACrD,4BAA4B,CAqDxC;AAED,SAAgB,kBAAkB,CAAC,iBAAqC;IACtE,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,4BAA4B;SACxC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -11,17 +11,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.EmailDto = void 0;
13
13
  const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
14
+ const class_validator_1 = require("class-validator");
14
15
  const decorator_1 = require("../decorator");
15
- const is_valid_email_1 = require("../decorator/is-valid-email");
16
16
  class EmailDto {
17
17
  }
18
18
  exports.EmailDto = EmailDto;
19
19
  __decorate([
20
- (0, is_valid_email_1.IsValidEmail)({ optional: true }),
20
+ (0, class_validator_1.IsOptional)(),
21
+ (0, class_validator_1.IsEmail)(),
21
22
  __metadata("design:type", String)
22
23
  ], EmailDto.prototype, "value", void 0);
23
24
  __decorate([
24
- (0, decorator_1.IsValidEmailType)({ optional: true }),
25
+ (0, class_validator_1.IsOptional)(),
26
+ (0, decorator_1.IsValidEmailType)(),
25
27
  __metadata("design:type", String)
26
28
  ], EmailDto.prototype, "type", void 0);
27
29
  //# sourceMappingURL=email.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.dto.js","sourceRoot":"","sources":["../../../src/dto/email.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAA8E;AAE9E,4CAAgD;AAChD,gEAA2D;AAE3D,MAAa,QAAQ;CAMpB;AAND,4BAMC;AAJC;IADC,IAAA,6BAAY,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACZ;AAGrB;IADC,IAAA,4BAAgB,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACjB"}
1
+ {"version":3,"file":"email.dto.js","sourceRoot":"","sources":["../../../src/dto/email.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAA8E;AAC9E,qDAAsD;AACtD,4CAAgD;AAEhD,MAAa,QAAQ;CAQpB;AARD,4BAQC;AALC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;;uCACW;AAIrB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAgB,GAAE;;sCACC"}
@@ -17,11 +17,13 @@ class PhoneDto {
17
17
  }
18
18
  exports.PhoneDto = PhoneDto;
19
19
  __decorate([
20
+ (0, class_validator_1.IsOptional)(),
20
21
  (0, class_validator_1.IsString)(),
21
22
  __metadata("design:type", String)
22
23
  ], PhoneDto.prototype, "value", void 0);
23
24
  __decorate([
24
- (0, decorator_1.IsValidPhoneType)({ optional: true }),
25
+ (0, class_validator_1.IsOptional)(),
26
+ (0, decorator_1.IsValidPhoneType)(),
25
27
  __metadata("design:type", String)
26
28
  ], PhoneDto.prototype, "type", void 0);
27
29
  //# sourceMappingURL=phone.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone.dto.js","sourceRoot":"","sources":["../../../src/dto/phone.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAA8E;AAC9E,qDAAuD;AACvD,4CAAgD;AAEhD,MAAa,QAAQ;CAMpB;AAND,4BAMC;AAJC;IADC,IAAA,0BAAQ,GAAE;;uCACG;AAGd;IADC,IAAA,4BAAgB,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACjB"}
1
+ {"version":3,"file":"phone.dto.js","sourceRoot":"","sources":["../../../src/dto/phone.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oEAA8E;AAC9E,qDAAuD;AACvD,4CAAgD;AAEhD,MAAa,QAAQ;CAQpB;AARD,4BAQC;AALC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;uCACG;AAId;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAgB,GAAE;;sCACC"}
@@ -15,6 +15,7 @@ class PhotoDto {
15
15
  }
16
16
  exports.PhotoDto = PhotoDto;
17
17
  __decorate([
18
+ (0, class_validator_1.IsOptional)(),
18
19
  (0, class_validator_1.IsUrl)(),
19
20
  __metadata("design:type", String)
20
21
  ], PhotoDto.prototype, "url", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"photo.dto.js","sourceRoot":"","sources":["../../../src/dto/photo.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAAoD;AAEpD,MAAa,QAAQ;CAGpB;AAHD,4BAGC;AADC;IADC,IAAA,uBAAK,GAAE;;qCACI"}
1
+ {"version":3,"file":"photo.dto.js","sourceRoot":"","sources":["../../../src/dto/photo.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAAoD;AAEpD,MAAa,QAAQ;CAIpB;AAJD,4BAIC;AADC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,GAAE;;qCACI"}
@@ -3,18 +3,22 @@ import { EmailDto } from "./email.dto";
3
3
  import { PhoneDto } from "./phone.dto";
4
4
  import { PhotoDto } from "./photo.dto";
5
5
  import { NameDto } from "./name.dto";
6
+ declare class EmailsDto {
7
+ primary: EmailDto | null;
8
+ other: EmailDto[];
9
+ }
10
+ declare class PhonesDto {
11
+ primary: PhoneDto | null;
12
+ other: PhoneDto[];
13
+ }
14
+ declare class PhotosDto {
15
+ primary: PhotoDto | null;
16
+ other: PhotoDto[];
17
+ }
6
18
  export declare class ProfileDto implements ProfileInterface {
7
- email: {
8
- primary: EmailDto | null;
9
- other: EmailDto[];
10
- };
11
- phone: {
12
- primary: PhoneDto | null;
13
- other: PhoneDto[];
14
- };
15
- photo: {
16
- primary: PhotoDto | null;
17
- other: PhotoDto[];
18
- };
19
+ email: EmailsDto;
20
+ phone: PhonesDto;
21
+ photo: PhotosDto;
19
22
  name: NameDto;
20
23
  }
24
+ export {};
@@ -1,7 +1,84 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.ProfileDto = void 0;
13
+ const email_dto_1 = require("./email.dto");
14
+ const phone_dto_1 = require("./phone.dto");
15
+ const photo_dto_1 = require("./photo.dto");
16
+ const name_dto_1 = require("./name.dto");
17
+ const class_validator_1 = require("class-validator");
18
+ const class_transformer_1 = require("class-transformer");
19
+ class EmailsDto {
20
+ }
21
+ __decorate([
22
+ (0, class_validator_1.IsOptional)(),
23
+ (0, class_validator_1.ValidateNested)(),
24
+ (0, class_transformer_1.Type)(() => email_dto_1.EmailDto),
25
+ __metadata("design:type", email_dto_1.EmailDto)
26
+ ], EmailsDto.prototype, "primary", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsArray)(),
29
+ (0, class_validator_1.ValidateNested)({ each: true }),
30
+ (0, class_transformer_1.Type)(() => email_dto_1.EmailDto),
31
+ __metadata("design:type", Array)
32
+ ], EmailsDto.prototype, "other", void 0);
33
+ class PhonesDto {
34
+ }
35
+ __decorate([
36
+ (0, class_validator_1.IsOptional)(),
37
+ (0, class_validator_1.ValidateNested)(),
38
+ (0, class_transformer_1.Type)(() => phone_dto_1.PhoneDto),
39
+ __metadata("design:type", phone_dto_1.PhoneDto)
40
+ ], PhonesDto.prototype, "primary", void 0);
41
+ __decorate([
42
+ (0, class_validator_1.IsArray)(),
43
+ (0, class_validator_1.ValidateNested)({ each: true }),
44
+ (0, class_transformer_1.Type)(() => phone_dto_1.PhoneDto),
45
+ __metadata("design:type", Array)
46
+ ], PhonesDto.prototype, "other", void 0);
47
+ class PhotosDto {
48
+ }
49
+ __decorate([
50
+ (0, class_validator_1.IsOptional)(),
51
+ (0, class_validator_1.ValidateNested)(),
52
+ (0, class_transformer_1.Type)(() => photo_dto_1.PhotoDto),
53
+ __metadata("design:type", photo_dto_1.PhotoDto)
54
+ ], PhotosDto.prototype, "primary", void 0);
55
+ __decorate([
56
+ (0, class_validator_1.IsArray)(),
57
+ (0, class_validator_1.ValidateNested)({ each: true }),
58
+ (0, class_transformer_1.Type)(() => photo_dto_1.PhotoDto),
59
+ __metadata("design:type", Array)
60
+ ], PhotosDto.prototype, "other", void 0);
4
61
  class ProfileDto {
5
62
  }
6
63
  exports.ProfileDto = ProfileDto;
64
+ __decorate([
65
+ (0, class_validator_1.ValidateNested)(),
66
+ (0, class_transformer_1.Type)(() => EmailsDto),
67
+ __metadata("design:type", EmailsDto)
68
+ ], ProfileDto.prototype, "email", void 0);
69
+ __decorate([
70
+ (0, class_validator_1.ValidateNested)(),
71
+ (0, class_transformer_1.Type)(() => PhonesDto),
72
+ __metadata("design:type", PhonesDto)
73
+ ], ProfileDto.prototype, "phone", void 0);
74
+ __decorate([
75
+ (0, class_validator_1.ValidateNested)(),
76
+ (0, class_transformer_1.Type)(() => PhotosDto),
77
+ __metadata("design:type", PhotosDto)
78
+ ], ProfileDto.prototype, "photo", void 0);
79
+ __decorate([
80
+ (0, class_validator_1.ValidateNested)(),
81
+ (0, class_transformer_1.Type)(() => name_dto_1.NameDto),
82
+ __metadata("design:type", name_dto_1.NameDto)
83
+ ], ProfileDto.prototype, "name", void 0);
7
84
  //# sourceMappingURL=profile.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.dto.js","sourceRoot":"","sources":["../../../src/dto/profile.dto.ts"],"names":[],"mappings":";;;AAYA,MAAa,UAAU;CAiBtB;AAjBD,gCAiBC"}
1
+ {"version":3,"file":"profile.dto.js","sourceRoot":"","sources":["../../../src/dto/profile.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAAuC;AACvC,2CAAuC;AACvC,2CAAuC;AACvC,yCAAqC;AACrC,qDAAsE;AACtE,yDAAyC;AAEzC,MAAM,SAAS;CAUd;AANC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;8BACZ,oBAAQ;0CAAQ;AAKzB;IAHC,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;;wCACH;AAGpB,MAAM,SAAS;CAUd;AANC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;8BACZ,oBAAQ;0CAAQ;AAKzB;IAHC,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;;wCACH;AAGpB,MAAM,SAAS;CAUd;AANC;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;8BACZ,oBAAQ;0CAAQ;AAKzB;IAHC,IAAA,yBAAO,GAAE;IACT,IAAA,gCAAc,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oBAAQ,CAAC;;wCACH;AAGpB,MAAa,UAAU;CAgBtB;AAhBD,gCAgBC;AAbC;IAFC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC;8BACf,SAAS;yCAAC;AAIjB;IAFC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC;8BACf,SAAS;yCAAC;AAIjB;IAFC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC;8BACf,SAAS;yCAAC;AAIjB;IAFC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,kBAAO,CAAC;8BACd,kBAAO;wCAAC"}
@@ -11,7 +11,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UserDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const profile_dto_1 = require("./profile.dto");
14
15
  const decorator_1 = require("../decorator");
16
+ const class_transformer_1 = require("class-transformer");
15
17
  class UserDto {
16
18
  }
17
19
  exports.UserDto = UserDto;
@@ -19,6 +21,11 @@ __decorate([
19
21
  (0, class_validator_1.IsString)(),
20
22
  __metadata("design:type", String)
21
23
  ], UserDto.prototype, "username", void 0);
24
+ __decorate([
25
+ (0, class_validator_1.ValidateNested)(),
26
+ (0, class_transformer_1.Type)(() => profile_dto_1.ProfileDto),
27
+ __metadata("design:type", profile_dto_1.ProfileDto)
28
+ ], UserDto.prototype, "profile", void 0);
22
29
  __decorate([
23
30
  (0, decorator_1.IsValidUtcTimezone)(),
24
31
  __metadata("design:type", String)
@@ -1 +1 @@
1
- {"version":3,"file":"user.dto.js","sourceRoot":"","sources":["../../../src/dto/user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAA2C;AAE3C,4CAAkD;AAElD,MAAa,OAAO;CAQnB;AARD,0BAQC;AANC;IADC,IAAA,0BAAQ,GAAE;;yCACM;AAKjB;IADC,IAAA,8BAAkB,GAAE;;yCACC"}
1
+ {"version":3,"file":"user.dto.js","sourceRoot":"","sources":["../../../src/dto/user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAA2D;AAC3D,+CAA2C;AAC3C,4CAAkD;AAClD,yDAAyC;AAEzC,MAAa,OAAO;CAUnB;AAVD,0BAUC;AARC;IADC,IAAA,0BAAQ,GAAE;;yCACM;AAIjB;IAFC,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;8BACd,wBAAU;wCAAC;AAGpB;IADC,IAAA,8BAAkB,GAAE;;yCACC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.12.2",
3
+ "version": "0.12.4",
4
4
  "description": "Common code for Codex framework",
5
5
  "main": "lib/src/index.js",
6
6
  "type": "commonjs",
@@ -7,43 +7,27 @@ import {
7
7
  } from "class-validator";
8
8
  import { EmailTypeEnum } from "@cryptexlabs/authf-data-model";
9
9
 
10
- @ValidatorConstraint({ async: false })
10
+ @ValidatorConstraint({ name: "IsValidEmailType", async: false })
11
11
  export class IsValidEmailTypeConstraint
12
12
  implements ValidatorConstraintInterface {
13
- private readonly EMAIL_TYPES = Object.values(EmailTypeEnum);
13
+ private readonly EMAIL_TYPES: string[] = Object.values(EmailTypeEnum);
14
14
 
15
- validate(emailType: any, args: ValidationArguments): boolean {
16
- const optional = args.constraints[0]?.optional || false;
17
- // If optional, allow null or undefined values
18
- if (optional && (emailType === undefined || emailType === null)) {
19
- return true;
20
- }
21
- // Otherwise, validate against allowed EMAIL_TYPES
22
- return this.EMAIL_TYPES.includes(emailType);
15
+ validate(timezone: any, args: ValidationArguments): boolean {
16
+ return this.EMAIL_TYPES.includes(timezone);
23
17
  }
24
18
 
25
19
  defaultMessage(args: ValidationArguments): string {
26
- const optional = args.constraints[0]?.optional || false;
27
- if (optional && (args.value === undefined || args.value === null)) {
28
- return `"${args.value}" is optional, but it must either be null/undefined or a valid email type.`;
29
- }
30
- return `"${
31
- args.value
32
- }" is not a valid email type. Allowed types: ${this.EMAIL_TYPES.join(
33
- ", "
34
- )}.`;
20
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
35
21
  }
36
22
  }
37
23
 
38
- export function IsValidEmailType(
39
- validationOptions?: ValidationOptions & { optional?: boolean }
40
- ) {
24
+ export function IsValidEmailType(validationOptions?: ValidationOptions) {
41
25
  return (object: any, propertyName: string) => {
42
26
  registerDecorator({
43
27
  target: object.constructor,
44
28
  propertyName,
45
29
  options: validationOptions,
46
- constraints: [{ optional: validationOptions?.optional || false }],
30
+ constraints: [],
47
31
  validator: IsValidEmailTypeConstraint,
48
32
  });
49
33
  };
@@ -5,54 +5,29 @@ import {
5
5
  registerDecorator,
6
6
  ValidationOptions,
7
7
  } from "class-validator";
8
- import { PhoneTypeEnum } from "@cryptexlabs/authf-data-model";
8
+ import { EmailTypeEnum, PhoneTypeEnum } from "@cryptexlabs/authf-data-model";
9
9
 
10
- @ValidatorConstraint({ async: false })
10
+ @ValidatorConstraint({ name: "IsValidPhoneType", async: false })
11
11
  export class IsValidPhoneTypeConstraint
12
12
  implements ValidatorConstraintInterface {
13
- private readonly PHONE_TYPES = Object.values(PhoneTypeEnum);
13
+ private readonly PHONE_TYPES: string[] = Object.values(PhoneTypeEnum);
14
14
 
15
- validate(phoneType: any, args: ValidationArguments): boolean {
16
- const optional = args.constraints[0]?.optional || false;
17
-
18
- // If the property is optional, allow null or undefined values
19
- if (optional && (phoneType === undefined || phoneType === null)) {
20
- return true;
21
- }
22
-
23
- // Otherwise, validate against the allowed PHONE_TYPES
24
- return this.PHONE_TYPES.includes(phoneType);
15
+ validate(timezone: any, args: ValidationArguments): boolean {
16
+ return this.PHONE_TYPES.includes(timezone);
25
17
  }
26
18
 
27
19
  defaultMessage(args: ValidationArguments): string {
28
- const optional = args.constraints[0]?.optional || false;
29
-
30
- // Provide different messages based on `optional` status
31
- if (optional && (args.value === undefined || args.value === null)) {
32
- return `"${
33
- args.property
34
- }" is optional but, if defined, must be one of: ${this.PHONE_TYPES.join(
35
- ", "
36
- )}.`;
37
- }
38
-
39
- return `"${
40
- args.value
41
- }" is not a valid phone type. Allowed types: ${this.PHONE_TYPES.join(
42
- ", "
43
- )}.`;
20
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
44
21
  }
45
22
  }
46
23
 
47
- export function IsValidPhoneType(
48
- validationOptions?: ValidationOptions & { optional?: boolean }
49
- ) {
24
+ export function IsValidPhoneType(validationOptions?: ValidationOptions) {
50
25
  return (object: any, propertyName: string) => {
51
26
  registerDecorator({
52
27
  target: object.constructor,
53
28
  propertyName,
54
29
  options: validationOptions,
55
- constraints: [{ optional: validationOptions?.optional || false }],
30
+ constraints: [],
56
31
  validator: IsValidPhoneTypeConstraint,
57
32
  });
58
33
  };
@@ -6,10 +6,11 @@ import {
6
6
  ValidationOptions,
7
7
  } from "class-validator";
8
8
 
9
- @ValidatorConstraint({ async: false })
9
+ // Step 1: Define the custom validator
10
+ @ValidatorConstraint({ name: "IsValidUtcTimezone", async: false })
10
11
  export class IsValidUtcTimezoneConstraint
11
12
  implements ValidatorConstraintInterface {
12
- private readonly TIMEZONES = [
13
+ private readonly TIMEZONES: string[] = [
13
14
  "-12:00",
14
15
  "-11:00",
15
16
  "-10:30",
@@ -53,16 +54,12 @@ export class IsValidUtcTimezoneConstraint
53
54
  "+14:00",
54
55
  ];
55
56
 
56
- validate(timezone: any): boolean {
57
+ validate(timezone: any, args: ValidationArguments): boolean {
57
58
  return this.TIMEZONES.includes(timezone);
58
59
  }
59
60
 
60
61
  defaultMessage(args: ValidationArguments): string {
61
- return `"${
62
- args.value
63
- }" is not a valid UTC timezone. Allowed timezones: ${this.TIMEZONES.join(
64
- ", "
65
- )}.`;
62
+ return `"${args.value}" is not a valid UTC timezone. Choose one of the allowed timezones.`;
66
63
  }
67
64
  }
68
65
 
@@ -72,6 +69,7 @@ export function IsValidUtcTimezone(validationOptions?: ValidationOptions) {
72
69
  target: object.constructor,
73
70
  propertyName,
74
71
  options: validationOptions,
72
+ constraints: [],
75
73
  validator: IsValidUtcTimezoneConstraint,
76
74
  });
77
75
  };
@@ -1,12 +1,13 @@
1
1
  import { EmailInterface, EmailTypeEnum } from "@cryptexlabs/authf-data-model";
2
2
  import { IsEmail, IsOptional } from "class-validator";
3
3
  import { IsValidEmailType } from "../decorator";
4
- import { IsValidEmail } from "../decorator/is-valid-email";
5
4
 
6
5
  export class EmailDto implements EmailInterface {
7
- @IsValidEmail({ optional: true })
6
+ @IsOptional()
7
+ @IsEmail()
8
8
  value: string | null;
9
9
 
10
- @IsValidEmailType({ optional: true })
10
+ @IsOptional()
11
+ @IsValidEmailType()
11
12
  type: EmailTypeEnum;
12
13
  }
@@ -3,9 +3,11 @@ import { IsOptional, IsString } from "class-validator";
3
3
  import { IsValidPhoneType } from "../decorator";
4
4
 
5
5
  export class PhoneDto implements PhoneInterface {
6
+ @IsOptional()
6
7
  @IsString()
7
8
  value: string;
8
9
 
9
- @IsValidPhoneType({ optional: true })
10
+ @IsOptional()
11
+ @IsValidPhoneType()
10
12
  type: PhoneTypeEnum;
11
13
  }
@@ -2,6 +2,7 @@ import { PhotoInterface } from "@cryptexlabs/authf-data-model";
2
2
  import { IsOptional, IsUrl } from "class-validator";
3
3
 
4
4
  export class PhotoDto implements PhotoInterface {
5
+ @IsOptional()
5
6
  @IsUrl()
6
7
  url: string;
7
8
  }
@@ -1,30 +1,61 @@
1
- import {
2
- EmailInterface,
3
- NameInterface,
4
- PhoneInterface,
5
- PhotoInterface,
6
- ProfileInterface,
7
- } from "@cryptexlabs/authf-data-model";
1
+ import { ProfileInterface } from "@cryptexlabs/authf-data-model";
8
2
  import { EmailDto } from "./email.dto";
9
3
  import { PhoneDto } from "./phone.dto";
10
4
  import { PhotoDto } from "./photo.dto";
11
5
  import { NameDto } from "./name.dto";
6
+ import { ValidateNested, IsArray, IsOptional } from "class-validator";
7
+ import { Type } from "class-transformer";
8
+
9
+ class EmailsDto {
10
+ @IsOptional()
11
+ @ValidateNested()
12
+ @Type(() => EmailDto)
13
+ primary: EmailDto | null;
14
+
15
+ @IsArray()
16
+ @ValidateNested({ each: true })
17
+ @Type(() => EmailDto)
18
+ other: EmailDto[];
19
+ }
20
+
21
+ class PhonesDto {
22
+ @IsOptional()
23
+ @ValidateNested()
24
+ @Type(() => PhoneDto)
25
+ primary: PhoneDto | null;
26
+
27
+ @IsArray()
28
+ @ValidateNested({ each: true })
29
+ @Type(() => PhoneDto)
30
+ other: PhoneDto[];
31
+ }
32
+
33
+ class PhotosDto {
34
+ @IsOptional()
35
+ @ValidateNested()
36
+ @Type(() => PhotoDto)
37
+ primary: PhotoDto | null;
38
+
39
+ @IsArray()
40
+ @ValidateNested({ each: true })
41
+ @Type(() => PhotoDto)
42
+ other: PhotoDto[];
43
+ }
12
44
 
13
45
  export class ProfileDto implements ProfileInterface {
14
- email: {
15
- primary: EmailDto | null;
16
- other: EmailDto[];
17
- };
46
+ @ValidateNested()
47
+ @Type(() => EmailsDto)
48
+ email: EmailsDto;
18
49
 
19
- phone: {
20
- primary: PhoneDto | null;
21
- other: PhoneDto[];
22
- };
50
+ @ValidateNested()
51
+ @Type(() => PhonesDto)
52
+ phone: PhonesDto;
23
53
 
24
- photo: {
25
- primary: PhotoDto | null;
26
- other: PhotoDto[];
27
- };
54
+ @ValidateNested()
55
+ @Type(() => PhotosDto)
56
+ photo: PhotosDto;
28
57
 
58
+ @ValidateNested()
59
+ @Type(() => NameDto)
29
60
  name: NameDto;
30
61
  }
@@ -1,12 +1,15 @@
1
1
  import { UserInterface, UtcTimezone } from "@cryptexlabs/authf-data-model";
2
- import { IsString } from "class-validator";
2
+ import { IsString, ValidateNested } from "class-validator";
3
3
  import { ProfileDto } from "./profile.dto";
4
4
  import { IsValidUtcTimezone } from "../decorator";
5
+ import { Type } from "class-transformer";
5
6
 
6
7
  export class UserDto implements UserInterface {
7
8
  @IsString()
8
9
  username: string;
9
10
 
11
+ @ValidateNested()
12
+ @Type(() => ProfileDto)
10
13
  profile: ProfileDto;
11
14
 
12
15
  @IsValidUtcTimezone()
@@ -1,9 +0,0 @@
1
- import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
- export declare class IsValidEmailConstraint implements ValidatorConstraintInterface {
3
- private readonly EMAIL_TYPES;
4
- validate(value: any, args: ValidationArguments): boolean;
5
- defaultMessage(args: ValidationArguments): string;
6
- }
7
- export declare function IsValidEmail(options?: {
8
- optional: boolean;
9
- }, validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -1,43 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.IsValidEmailConstraint = void 0;
10
- exports.IsValidEmail = IsValidEmail;
11
- const class_validator_1 = require("class-validator");
12
- const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
13
- let IsValidEmailConstraint = class IsValidEmailConstraint {
14
- constructor() {
15
- this.EMAIL_TYPES = Object.values(authf_data_model_1.EmailTypeEnum);
16
- }
17
- validate(value, args) {
18
- const [optional] = args.constraints;
19
- if (optional && value === null) {
20
- return true;
21
- }
22
- return this.EMAIL_TYPES.includes(value);
23
- }
24
- defaultMessage(args) {
25
- return `"${args.value}" is not a valid email. Choose one of the allowed email types or set it to null if optional.`;
26
- }
27
- };
28
- exports.IsValidEmailConstraint = IsValidEmailConstraint;
29
- exports.IsValidEmailConstraint = IsValidEmailConstraint = __decorate([
30
- (0, class_validator_1.ValidatorConstraint)({ name: "IsValidEmail", async: false })
31
- ], IsValidEmailConstraint);
32
- function IsValidEmail(options, validationOptions) {
33
- return (object, propertyName) => {
34
- (0, class_validator_1.registerDecorator)({
35
- target: object.constructor,
36
- propertyName,
37
- options: validationOptions,
38
- constraints: [(options === null || options === void 0 ? void 0 : options.optional) || false],
39
- validator: IsValidEmailConstraint,
40
- });
41
- };
42
- }
43
- //# sourceMappingURL=is-valid-email.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-valid-email.js","sourceRoot":"","sources":["../../../src/decorator/is-valid-email.ts"],"names":[],"mappings":";;;;;;;;;AA4BA,oCAaC;AAzCD,qDAMyB;AACzB,oEAA8D;AAGvD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAA5B;QACY,gBAAW,GAAa,MAAM,CAAC,MAAM,CAAC,gCAAa,CAAC,CAAC;IAcxE,CAAC;IAXC,QAAQ,CAAC,KAAU,EAAE,IAAyB;QAC5C,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,IAAI,IAAI,CAAC,KAAK,8FAA8F,CAAC;IACtH,CAAC;CACF,CAAA;AAfY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GAC/C,sBAAsB,CAelC;AAGD,SAAgB,YAAY,CAC1B,OAA+B,EAC/B,iBAAqC;IAErC,OAAO,CAAC,MAAW,EAAE,YAAoB,EAAE,EAAE;QAC3C,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,KAAK,CAAC;YACzC,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,42 +0,0 @@
1
- import {
2
- ValidatorConstraint,
3
- ValidatorConstraintInterface,
4
- ValidationArguments,
5
- registerDecorator,
6
- ValidationOptions,
7
- } from "class-validator";
8
- import { EmailTypeEnum } from "@cryptexlabs/authf-data-model";
9
-
10
- @ValidatorConstraint({ name: "IsValidEmail", async: false })
11
- export class IsValidEmailConstraint implements ValidatorConstraintInterface {
12
- private readonly EMAIL_TYPES: string[] = Object.values(EmailTypeEnum);
13
-
14
- // Receive constraints in the validate method
15
- validate(value: any, args: ValidationArguments): boolean {
16
- const [optional] = args.constraints; // Get optional flag from constraints
17
- if (optional && value === null) {
18
- return true; // Allow null if optional is true
19
- }
20
- return this.EMAIL_TYPES.includes(value); // Otherwise, validate normally
21
- }
22
-
23
- defaultMessage(args: ValidationArguments): string {
24
- return `"${args.value}" is not a valid email. Choose one of the allowed email types or set it to null if optional.`;
25
- }
26
- }
27
-
28
- // Custom decorator allowing the use of an optional argument
29
- export function IsValidEmail(
30
- options?: { optional: boolean }, // Add an optional parameter to control nullability
31
- validationOptions?: ValidationOptions
32
- ) {
33
- return (object: any, propertyName: string) => {
34
- registerDecorator({
35
- target: object.constructor,
36
- propertyName,
37
- options: validationOptions,
38
- constraints: [options?.optional || false], // Pass optional flag to the validator
39
- validator: IsValidEmailConstraint,
40
- });
41
- };
42
- }