@cryptexlabs/codex-nodejs-common 0.12.0 → 0.12.2

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/lib/package.json +1 -1
  2. package/lib/src/auth/authf.guard.js +12 -4
  3. package/lib/src/auth/authf.guard.js.map +1 -1
  4. package/lib/src/decorator/index.d.ts +3 -0
  5. package/lib/src/decorator/index.js +3 -0
  6. package/lib/src/decorator/index.js.map +1 -1
  7. package/lib/src/decorator/is-valid-email-type.d.ts +9 -0
  8. package/lib/src/decorator/is-valid-email-type.js +49 -0
  9. package/lib/src/decorator/is-valid-email-type.js.map +1 -0
  10. package/lib/src/decorator/is-valid-email.d.ts +9 -0
  11. package/lib/src/decorator/is-valid-email.js +43 -0
  12. package/lib/src/decorator/is-valid-email.js.map +1 -0
  13. package/lib/src/decorator/is-valid-phone-type.d.ts +9 -0
  14. package/lib/src/decorator/is-valid-phone-type.js +49 -0
  15. package/lib/src/decorator/is-valid-phone-type.js.map +1 -0
  16. package/lib/src/decorator/is-valid-utc-timezone.d.ts +7 -0
  17. package/lib/src/decorator/is-valid-utc-timezone.js +79 -0
  18. package/lib/src/decorator/is-valid-utc-timezone.js.map +1 -0
  19. package/lib/src/dto/email.dto.d.ts +5 -0
  20. package/lib/src/dto/email.dto.js +27 -0
  21. package/lib/src/dto/email.dto.js.map +1 -0
  22. package/lib/src/dto/index.d.ts +6 -0
  23. package/lib/src/dto/index.js +23 -0
  24. package/lib/src/dto/index.js.map +1 -0
  25. package/lib/src/dto/name.dto.d.ts +7 -0
  26. package/lib/src/dto/name.dto.js +37 -0
  27. package/lib/src/dto/name.dto.js.map +1 -0
  28. package/lib/src/dto/phone.dto.d.ts +5 -0
  29. package/lib/src/dto/phone.dto.js +27 -0
  30. package/lib/src/dto/phone.dto.js.map +1 -0
  31. package/lib/src/dto/photo.dto.d.ts +4 -0
  32. package/lib/src/dto/photo.dto.js +21 -0
  33. package/lib/src/dto/photo.dto.js.map +1 -0
  34. package/lib/src/dto/profile.dto.d.ts +20 -0
  35. package/lib/src/dto/profile.dto.js +7 -0
  36. package/lib/src/dto/profile.dto.js.map +1 -0
  37. package/lib/src/dto/user.dto.d.ts +7 -0
  38. package/lib/src/dto/user.dto.js +26 -0
  39. package/lib/src/dto/user.dto.js.map +1 -0
  40. package/lib/src/index.d.ts +1 -0
  41. package/lib/src/index.js +1 -0
  42. package/lib/src/index.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/auth/authf.guard.ts +15 -3
  45. package/src/decorator/index.ts +3 -0
  46. package/src/decorator/is-valid-email-type.ts +50 -0
  47. package/src/decorator/is-valid-email.ts +42 -0
  48. package/src/decorator/is-valid-phone-type.ts +59 -0
  49. package/src/decorator/is-valid-utc-timezone.ts +78 -0
  50. package/src/dto/email.dto.ts +12 -0
  51. package/src/dto/index.ts +6 -0
  52. package/src/dto/name.dto.ts +20 -0
  53. package/src/dto/phone.dto.ts +11 -0
  54. package/src/dto/photo.dto.ts +7 -0
  55. package/src/dto/profile.dto.ts +30 -0
  56. package/src/dto/user.dto.ts +14 -0
  57. package/src/index.ts +1 -0
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "description": "Common code for Codex framework",
5
5
  "main": "lib/src/index.js",
6
6
  "type": "commonjs",
@@ -99,18 +99,26 @@ let AuthfGuard = class AuthfGuard {
99
99
  }, this.config.blacklistRefreshIntervalInSeconds * 1000);
100
100
  }
101
101
  async _updateBlacklist(context) {
102
- var _a, _b, _c;
102
+ var _a, _b, _c, _d, _e, _f;
103
103
  const headers = this._getApiHeaders(context);
104
+ context.logger.verbose(`Fetching blacklist`);
104
105
  const subjectBlacklistResponse = await axios_1.default.get(`/api/v1/blacklisted-subjects`, {
105
106
  baseURL: this.config.authfUrl,
106
107
  headers,
107
108
  });
109
+ context.logger.verbose(`Blacklist response`, subjectBlacklistResponse.data);
108
110
  if (((_a = subjectBlacklistResponse.data) === null || _a === void 0 ? void 0 : _a.data) !== undefined &&
109
111
  Array.isArray((_b = subjectBlacklistResponse.data) === null || _b === void 0 ? void 0 : _b.data)) {
110
- this._blacklistedSubjects = (_c = subjectBlacklistResponse.data) === null || _c === void 0 ? void 0 : _c.data;
111
- if (this._blacklistedSubjects.length > 0) {
112
- context.logger.verbose(`Got blacklist`, this._blacklistedSubjects);
112
+ if (this._blacklistedSubjects.length !== ((_c = subjectBlacklistResponse.data) === null || _c === void 0 ? void 0 : _c.data)) {
113
+ context.logger.debug(`Got change in blacklist`, {
114
+ old: this._blacklistedSubjects,
115
+ new: (_d = subjectBlacklistResponse.data) === null || _d === void 0 ? void 0 : _d.data,
116
+ });
113
117
  }
118
+ else if (this._blacklistedSubjects.length > 0) {
119
+ context.logger.verbose(`Got blacklist`, (_e = subjectBlacklistResponse.data) === null || _e === void 0 ? void 0 : _e.data);
120
+ }
121
+ this._blacklistedSubjects = (_f = subjectBlacklistResponse.data) === null || _f === void 0 ? void 0 : _f.data;
114
122
  }
115
123
  }
116
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"authf.guard.js","sourceRoot":"","sources":["../../../src/auth/authf.guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authf.guard.js","sourceRoot":"","sources":["../../../src/auth/authf.guard.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  export * from "./api-meta-headers";
2
2
  export * from "./api-pagination";
3
3
  export * from "./api-query-options";
4
+ export * from "./is-valid-email-type";
5
+ export * from "./is-valid-phone-type";
6
+ export * from "./is-valid-utc-timezone";
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./api-meta-headers"), exports);
18
18
  __exportStar(require("./api-pagination"), exports);
19
19
  __exportStar(require("./api-query-options"), exports);
20
+ __exportStar(require("./is-valid-email-type"), exports);
21
+ __exportStar(require("./is-valid-phone-type"), exports);
22
+ __exportStar(require("./is-valid-utc-timezone"), exports);
20
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decorator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,mDAAiC;AACjC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decorator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,mDAAiC;AACjC,sDAAoC;AACpC,wDAAsC;AACtC,wDAAsC;AACtC,0DAAwC"}
@@ -0,0 +1,9 @@
1
+ import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
+ export declare class IsValidEmailTypeConstraint implements ValidatorConstraintInterface {
3
+ private readonly EMAIL_TYPES;
4
+ validate(emailType: any, args: ValidationArguments): boolean;
5
+ defaultMessage(args: ValidationArguments): string;
6
+ }
7
+ export declare function IsValidEmailType(validationOptions?: ValidationOptions & {
8
+ optional?: boolean;
9
+ }): (object: any, propertyName: string) => void;
@@ -0,0 +1,49 @@
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.IsValidEmailTypeConstraint = void 0;
10
+ exports.IsValidEmailType = IsValidEmailType;
11
+ const class_validator_1 = require("class-validator");
12
+ const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
13
+ let IsValidEmailTypeConstraint = class IsValidEmailTypeConstraint {
14
+ constructor() {
15
+ this.EMAIL_TYPES = Object.values(authf_data_model_1.EmailTypeEnum);
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);
24
+ }
25
+ 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(", ")}.`;
32
+ }
33
+ };
34
+ exports.IsValidEmailTypeConstraint = IsValidEmailTypeConstraint;
35
+ exports.IsValidEmailTypeConstraint = IsValidEmailTypeConstraint = __decorate([
36
+ (0, class_validator_1.ValidatorConstraint)({ async: false })
37
+ ], IsValidEmailTypeConstraint);
38
+ function IsValidEmailType(validationOptions) {
39
+ return (object, propertyName) => {
40
+ (0, class_validator_1.registerDecorator)({
41
+ target: object.constructor,
42
+ propertyName,
43
+ options: validationOptions,
44
+ constraints: [{ optional: (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.optional) || false }],
45
+ validator: IsValidEmailTypeConstraint,
46
+ });
47
+ };
48
+ }
49
+ //# sourceMappingURL=is-valid-email-type.js.map
@@ -0,0 +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"}
@@ -0,0 +1,9 @@
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;
@@ -0,0 +1,43 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,9 @@
1
+ import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
+ export declare class IsValidPhoneTypeConstraint implements ValidatorConstraintInterface {
3
+ private readonly PHONE_TYPES;
4
+ validate(phoneType: any, args: ValidationArguments): boolean;
5
+ defaultMessage(args: ValidationArguments): string;
6
+ }
7
+ export declare function IsValidPhoneType(validationOptions?: ValidationOptions & {
8
+ optional?: boolean;
9
+ }): (object: any, propertyName: string) => void;
@@ -0,0 +1,49 @@
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.IsValidPhoneTypeConstraint = void 0;
10
+ exports.IsValidPhoneType = IsValidPhoneType;
11
+ const class_validator_1 = require("class-validator");
12
+ const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
13
+ let IsValidPhoneTypeConstraint = class IsValidPhoneTypeConstraint {
14
+ constructor() {
15
+ this.PHONE_TYPES = Object.values(authf_data_model_1.PhoneTypeEnum);
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);
24
+ }
25
+ 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(", ")}.`;
32
+ }
33
+ };
34
+ exports.IsValidPhoneTypeConstraint = IsValidPhoneTypeConstraint;
35
+ exports.IsValidPhoneTypeConstraint = IsValidPhoneTypeConstraint = __decorate([
36
+ (0, class_validator_1.ValidatorConstraint)({ async: false })
37
+ ], IsValidPhoneTypeConstraint);
38
+ function IsValidPhoneType(validationOptions) {
39
+ return (object, propertyName) => {
40
+ (0, class_validator_1.registerDecorator)({
41
+ target: object.constructor,
42
+ propertyName,
43
+ options: validationOptions,
44
+ constraints: [{ optional: (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.optional) || false }],
45
+ validator: IsValidPhoneTypeConstraint,
46
+ });
47
+ };
48
+ }
49
+ //# sourceMappingURL=is-valid-phone-type.js.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ import { ValidatorConstraintInterface, ValidationArguments, ValidationOptions } from "class-validator";
2
+ export declare class IsValidUtcTimezoneConstraint implements ValidatorConstraintInterface {
3
+ private readonly TIMEZONES;
4
+ validate(timezone: any): boolean;
5
+ defaultMessage(args: ValidationArguments): string;
6
+ }
7
+ export declare function IsValidUtcTimezone(validationOptions?: ValidationOptions): (object: any, propertyName: string) => void;
@@ -0,0 +1,79 @@
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.IsValidUtcTimezoneConstraint = void 0;
10
+ exports.IsValidUtcTimezone = IsValidUtcTimezone;
11
+ const class_validator_1 = require("class-validator");
12
+ let IsValidUtcTimezoneConstraint = class IsValidUtcTimezoneConstraint {
13
+ constructor() {
14
+ this.TIMEZONES = [
15
+ "-12:00",
16
+ "-11:00",
17
+ "-10:30",
18
+ "-10:00",
19
+ "-09:30",
20
+ "-09:00",
21
+ "-08:00",
22
+ "-07:00",
23
+ "-06:00",
24
+ "-05:00",
25
+ "-04:00",
26
+ "-04:30",
27
+ "-03:30",
28
+ "-03:00",
29
+ "-02:00",
30
+ "-01:00",
31
+ "-00:00",
32
+ "+00:00",
33
+ "+01:00",
34
+ "+02:00",
35
+ "+03:00",
36
+ "+03:30",
37
+ "+04:00",
38
+ "+04:30",
39
+ "+05:00",
40
+ "+05:30",
41
+ "+05:45",
42
+ "+06:00",
43
+ "+06:30",
44
+ "+07:00",
45
+ "+08:00",
46
+ "+08:45",
47
+ "+09:00",
48
+ "+09:30",
49
+ "+10:00",
50
+ "+10:30",
51
+ "+11:00",
52
+ "+12:00",
53
+ "+12:45",
54
+ "+13:00",
55
+ "+14:00",
56
+ ];
57
+ }
58
+ validate(timezone) {
59
+ return this.TIMEZONES.includes(timezone);
60
+ }
61
+ defaultMessage(args) {
62
+ return `"${args.value}" is not a valid UTC timezone. Allowed timezones: ${this.TIMEZONES.join(", ")}.`;
63
+ }
64
+ };
65
+ exports.IsValidUtcTimezoneConstraint = IsValidUtcTimezoneConstraint;
66
+ exports.IsValidUtcTimezoneConstraint = IsValidUtcTimezoneConstraint = __decorate([
67
+ (0, class_validator_1.ValidatorConstraint)({ async: false })
68
+ ], IsValidUtcTimezoneConstraint);
69
+ function IsValidUtcTimezone(validationOptions) {
70
+ return (object, propertyName) => {
71
+ (0, class_validator_1.registerDecorator)({
72
+ target: object.constructor,
73
+ propertyName,
74
+ options: validationOptions,
75
+ validator: IsValidUtcTimezoneConstraint,
76
+ });
77
+ };
78
+ }
79
+ //# sourceMappingURL=is-valid-utc-timezone.js.map
@@ -0,0 +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"}
@@ -0,0 +1,5 @@
1
+ import { EmailInterface, EmailTypeEnum } from "@cryptexlabs/authf-data-model";
2
+ export declare class EmailDto implements EmailInterface {
3
+ value: string | null;
4
+ type: EmailTypeEnum;
5
+ }
@@ -0,0 +1,27 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EmailDto = void 0;
13
+ const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
14
+ const decorator_1 = require("../decorator");
15
+ const is_valid_email_1 = require("../decorator/is-valid-email");
16
+ class EmailDto {
17
+ }
18
+ exports.EmailDto = EmailDto;
19
+ __decorate([
20
+ (0, is_valid_email_1.IsValidEmail)({ optional: true }),
21
+ __metadata("design:type", String)
22
+ ], EmailDto.prototype, "value", void 0);
23
+ __decorate([
24
+ (0, decorator_1.IsValidEmailType)({ optional: true }),
25
+ __metadata("design:type", String)
26
+ ], EmailDto.prototype, "type", void 0);
27
+ //# sourceMappingURL=email.dto.js.map
@@ -0,0 +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"}
@@ -0,0 +1,6 @@
1
+ export * from "./email.dto";
2
+ export * from "./name.dto";
3
+ export * from "./phone.dto";
4
+ export * from "./photo.dto";
5
+ export * from "./profile.dto";
6
+ export * from "./user.dto";
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./email.dto"), exports);
18
+ __exportStar(require("./name.dto"), exports);
19
+ __exportStar(require("./phone.dto"), exports);
20
+ __exportStar(require("./photo.dto"), exports);
21
+ __exportStar(require("./profile.dto"), exports);
22
+ __exportStar(require("./user.dto"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dto/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,6CAA2B"}
@@ -0,0 +1,7 @@
1
+ import { NameInterface } from "@cryptexlabs/authf-data-model";
2
+ export declare class NameDto implements NameInterface {
3
+ first: string;
4
+ middle: string;
5
+ last: string;
6
+ display: string;
7
+ }
@@ -0,0 +1,37 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.NameDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class NameDto {
15
+ }
16
+ exports.NameDto = NameDto;
17
+ __decorate([
18
+ (0, class_validator_1.IsOptional)(),
19
+ (0, class_validator_1.IsString)(),
20
+ __metadata("design:type", String)
21
+ ], NameDto.prototype, "first", void 0);
22
+ __decorate([
23
+ (0, class_validator_1.IsOptional)(),
24
+ (0, class_validator_1.IsString)(),
25
+ __metadata("design:type", String)
26
+ ], NameDto.prototype, "middle", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsOptional)(),
29
+ (0, class_validator_1.IsString)(),
30
+ __metadata("design:type", String)
31
+ ], NameDto.prototype, "last", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.IsString)(),
35
+ __metadata("design:type", String)
36
+ ], NameDto.prototype, "display", void 0);
37
+ //# sourceMappingURL=name.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name.dto.js","sourceRoot":"","sources":["../../../src/dto/name.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAAuD;AAEvD,MAAa,OAAO;CAgBnB;AAhBD,0BAgBC;AAbC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;sCACG;AAId;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;uCACI;AAIf;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;qCACE;AAIb;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;wCACK"}
@@ -0,0 +1,5 @@
1
+ import { PhoneInterface, PhoneTypeEnum } from "@cryptexlabs/authf-data-model";
2
+ export declare class PhoneDto implements PhoneInterface {
3
+ value: string;
4
+ type: PhoneTypeEnum;
5
+ }
@@ -0,0 +1,27 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PhoneDto = void 0;
13
+ const authf_data_model_1 = require("@cryptexlabs/authf-data-model");
14
+ const class_validator_1 = require("class-validator");
15
+ const decorator_1 = require("../decorator");
16
+ class PhoneDto {
17
+ }
18
+ exports.PhoneDto = PhoneDto;
19
+ __decorate([
20
+ (0, class_validator_1.IsString)(),
21
+ __metadata("design:type", String)
22
+ ], PhoneDto.prototype, "value", void 0);
23
+ __decorate([
24
+ (0, decorator_1.IsValidPhoneType)({ optional: true }),
25
+ __metadata("design:type", String)
26
+ ], PhoneDto.prototype, "type", void 0);
27
+ //# sourceMappingURL=phone.dto.js.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import { PhotoInterface } from "@cryptexlabs/authf-data-model";
2
+ export declare class PhotoDto implements PhotoInterface {
3
+ url: string;
4
+ }
@@ -0,0 +1,21 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PhotoDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class PhotoDto {
15
+ }
16
+ exports.PhotoDto = PhotoDto;
17
+ __decorate([
18
+ (0, class_validator_1.IsUrl)(),
19
+ __metadata("design:type", String)
20
+ ], PhotoDto.prototype, "url", void 0);
21
+ //# sourceMappingURL=photo.dto.js.map
@@ -0,0 +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"}
@@ -0,0 +1,20 @@
1
+ import { ProfileInterface } from "@cryptexlabs/authf-data-model";
2
+ import { EmailDto } from "./email.dto";
3
+ import { PhoneDto } from "./phone.dto";
4
+ import { PhotoDto } from "./photo.dto";
5
+ import { NameDto } from "./name.dto";
6
+ 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
+ name: NameDto;
20
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProfileDto = void 0;
4
+ class ProfileDto {
5
+ }
6
+ exports.ProfileDto = ProfileDto;
7
+ //# sourceMappingURL=profile.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.dto.js","sourceRoot":"","sources":["../../../src/dto/profile.dto.ts"],"names":[],"mappings":";;;AAYA,MAAa,UAAU;CAiBtB;AAjBD,gCAiBC"}
@@ -0,0 +1,7 @@
1
+ import { UserInterface, UtcTimezone } from "@cryptexlabs/authf-data-model";
2
+ import { ProfileDto } from "./profile.dto";
3
+ export declare class UserDto implements UserInterface {
4
+ username: string;
5
+ profile: ProfileDto;
6
+ timezone: UtcTimezone;
7
+ }
@@ -0,0 +1,26 @@
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
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UserDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const decorator_1 = require("../decorator");
15
+ class UserDto {
16
+ }
17
+ exports.UserDto = UserDto;
18
+ __decorate([
19
+ (0, class_validator_1.IsString)(),
20
+ __metadata("design:type", String)
21
+ ], UserDto.prototype, "username", void 0);
22
+ __decorate([
23
+ (0, decorator_1.IsValidUtcTimezone)(),
24
+ __metadata("design:type", String)
25
+ ], UserDto.prototype, "timezone", void 0);
26
+ //# sourceMappingURL=user.dto.js.map
@@ -0,0 +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"}
@@ -3,6 +3,7 @@ export * from "./client";
3
3
  export * from "./config";
4
4
  export * from "./context";
5
5
  export * from "./decorator";
6
+ export * from "./dto";
6
7
  export * from "./event";
7
8
  export * from "./filter";
8
9
  export * from "./logger";
package/lib/src/index.js CHANGED
@@ -19,6 +19,7 @@ __exportStar(require("./client"), exports);
19
19
  __exportStar(require("./config"), exports);
20
20
  __exportStar(require("./context"), exports);
21
21
  __exportStar(require("./decorator"), exports);
22
+ __exportStar(require("./dto"), exports);
22
23
  __exportStar(require("./event"), exports);
23
24
  __exportStar(require("./filter"), exports);
24
25
  __exportStar(require("./logger"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,yCAAuB;AACvB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,wCAAsB;AACtB,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,yCAAuB;AACvB,+CAA6B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptexlabs/codex-nodejs-common",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "description": "Common code for Codex framework",
5
5
  "main": "lib/src/index.js",
6
6
  "type": "commonjs",
@@ -119,6 +119,7 @@ export class AuthfGuard implements CanActivate {
119
119
  private async _updateBlacklist(context: Context) {
120
120
  const headers = this._getApiHeaders(context);
121
121
 
122
+ context.logger.verbose(`Fetching blacklist`);
122
123
  const subjectBlacklistResponse = await axios.get(
123
124
  `/api/v1/blacklisted-subjects`,
124
125
  {
@@ -126,15 +127,26 @@ export class AuthfGuard implements CanActivate {
126
127
  headers,
127
128
  }
128
129
  );
130
+ context.logger.verbose(`Blacklist response`, subjectBlacklistResponse.data);
129
131
 
130
132
  if (
131
133
  subjectBlacklistResponse.data?.data !== undefined &&
132
134
  Array.isArray(subjectBlacklistResponse.data?.data)
133
135
  ) {
134
- this._blacklistedSubjects = subjectBlacklistResponse.data?.data;
135
- if (this._blacklistedSubjects.length > 0) {
136
- context.logger.verbose(`Got blacklist`, this._blacklistedSubjects);
136
+ if (
137
+ this._blacklistedSubjects.length !== subjectBlacklistResponse.data?.data
138
+ ) {
139
+ context.logger.debug(`Got change in blacklist`, {
140
+ old: this._blacklistedSubjects,
141
+ new: subjectBlacklistResponse.data?.data,
142
+ });
143
+ } else if (this._blacklistedSubjects.length > 0) {
144
+ context.logger.verbose(
145
+ `Got blacklist`,
146
+ subjectBlacklistResponse.data?.data
147
+ );
137
148
  }
149
+ this._blacklistedSubjects = subjectBlacklistResponse.data?.data;
138
150
  }
139
151
  }
140
152
  }
@@ -1,3 +1,6 @@
1
1
  export * from "./api-meta-headers";
2
2
  export * from "./api-pagination";
3
3
  export * from "./api-query-options";
4
+ export * from "./is-valid-email-type";
5
+ export * from "./is-valid-phone-type";
6
+ export * from "./is-valid-utc-timezone";
@@ -0,0 +1,50 @@
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({ async: false })
11
+ export class IsValidEmailTypeConstraint
12
+ implements ValidatorConstraintInterface {
13
+ private readonly EMAIL_TYPES = Object.values(EmailTypeEnum);
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);
23
+ }
24
+
25
+ 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
+ )}.`;
35
+ }
36
+ }
37
+
38
+ export function IsValidEmailType(
39
+ validationOptions?: ValidationOptions & { optional?: boolean }
40
+ ) {
41
+ return (object: any, propertyName: string) => {
42
+ registerDecorator({
43
+ target: object.constructor,
44
+ propertyName,
45
+ options: validationOptions,
46
+ constraints: [{ optional: validationOptions?.optional || false }],
47
+ validator: IsValidEmailTypeConstraint,
48
+ });
49
+ };
50
+ }
@@ -0,0 +1,42 @@
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
+ }
@@ -0,0 +1,59 @@
1
+ import {
2
+ ValidatorConstraint,
3
+ ValidatorConstraintInterface,
4
+ ValidationArguments,
5
+ registerDecorator,
6
+ ValidationOptions,
7
+ } from "class-validator";
8
+ import { PhoneTypeEnum } from "@cryptexlabs/authf-data-model";
9
+
10
+ @ValidatorConstraint({ async: false })
11
+ export class IsValidPhoneTypeConstraint
12
+ implements ValidatorConstraintInterface {
13
+ private readonly PHONE_TYPES = Object.values(PhoneTypeEnum);
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);
25
+ }
26
+
27
+ 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
+ )}.`;
44
+ }
45
+ }
46
+
47
+ export function IsValidPhoneType(
48
+ validationOptions?: ValidationOptions & { optional?: boolean }
49
+ ) {
50
+ return (object: any, propertyName: string) => {
51
+ registerDecorator({
52
+ target: object.constructor,
53
+ propertyName,
54
+ options: validationOptions,
55
+ constraints: [{ optional: validationOptions?.optional || false }],
56
+ validator: IsValidPhoneTypeConstraint,
57
+ });
58
+ };
59
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ ValidatorConstraint,
3
+ ValidatorConstraintInterface,
4
+ ValidationArguments,
5
+ registerDecorator,
6
+ ValidationOptions,
7
+ } from "class-validator";
8
+
9
+ @ValidatorConstraint({ async: false })
10
+ export class IsValidUtcTimezoneConstraint
11
+ implements ValidatorConstraintInterface {
12
+ private readonly TIMEZONES = [
13
+ "-12:00",
14
+ "-11:00",
15
+ "-10:30",
16
+ "-10:00",
17
+ "-09:30",
18
+ "-09:00",
19
+ "-08:00",
20
+ "-07:00",
21
+ "-06:00",
22
+ "-05:00",
23
+ "-04:00",
24
+ "-04:30",
25
+ "-03:30",
26
+ "-03:00",
27
+ "-02:00",
28
+ "-01:00",
29
+ "-00:00",
30
+ "+00:00",
31
+ "+01:00",
32
+ "+02:00",
33
+ "+03:00",
34
+ "+03:30",
35
+ "+04:00",
36
+ "+04:30",
37
+ "+05:00",
38
+ "+05:30",
39
+ "+05:45",
40
+ "+06:00",
41
+ "+06:30",
42
+ "+07:00",
43
+ "+08:00",
44
+ "+08:45",
45
+ "+09:00",
46
+ "+09:30",
47
+ "+10:00",
48
+ "+10:30",
49
+ "+11:00",
50
+ "+12:00",
51
+ "+12:45",
52
+ "+13:00",
53
+ "+14:00",
54
+ ];
55
+
56
+ validate(timezone: any): boolean {
57
+ return this.TIMEZONES.includes(timezone);
58
+ }
59
+
60
+ defaultMessage(args: ValidationArguments): string {
61
+ return `"${
62
+ args.value
63
+ }" is not a valid UTC timezone. Allowed timezones: ${this.TIMEZONES.join(
64
+ ", "
65
+ )}.`;
66
+ }
67
+ }
68
+
69
+ export function IsValidUtcTimezone(validationOptions?: ValidationOptions) {
70
+ return (object: any, propertyName: string) => {
71
+ registerDecorator({
72
+ target: object.constructor,
73
+ propertyName,
74
+ options: validationOptions,
75
+ validator: IsValidUtcTimezoneConstraint,
76
+ });
77
+ };
78
+ }
@@ -0,0 +1,12 @@
1
+ import { EmailInterface, EmailTypeEnum } from "@cryptexlabs/authf-data-model";
2
+ import { IsEmail, IsOptional } from "class-validator";
3
+ import { IsValidEmailType } from "../decorator";
4
+ import { IsValidEmail } from "../decorator/is-valid-email";
5
+
6
+ export class EmailDto implements EmailInterface {
7
+ @IsValidEmail({ optional: true })
8
+ value: string | null;
9
+
10
+ @IsValidEmailType({ optional: true })
11
+ type: EmailTypeEnum;
12
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./email.dto";
2
+ export * from "./name.dto";
3
+ export * from "./phone.dto";
4
+ export * from "./photo.dto";
5
+ export * from "./profile.dto";
6
+ export * from "./user.dto";
@@ -0,0 +1,20 @@
1
+ import { NameInterface } from "@cryptexlabs/authf-data-model";
2
+ import { IsOptional, IsString } from "class-validator";
3
+
4
+ export class NameDto implements NameInterface {
5
+ @IsOptional()
6
+ @IsString()
7
+ first: string;
8
+
9
+ @IsOptional()
10
+ @IsString()
11
+ middle: string;
12
+
13
+ @IsOptional()
14
+ @IsString()
15
+ last: string;
16
+
17
+ @IsOptional()
18
+ @IsString()
19
+ display: string;
20
+ }
@@ -0,0 +1,11 @@
1
+ import { PhoneInterface, PhoneTypeEnum } from "@cryptexlabs/authf-data-model";
2
+ import { IsOptional, IsString } from "class-validator";
3
+ import { IsValidPhoneType } from "../decorator";
4
+
5
+ export class PhoneDto implements PhoneInterface {
6
+ @IsString()
7
+ value: string;
8
+
9
+ @IsValidPhoneType({ optional: true })
10
+ type: PhoneTypeEnum;
11
+ }
@@ -0,0 +1,7 @@
1
+ import { PhotoInterface } from "@cryptexlabs/authf-data-model";
2
+ import { IsOptional, IsUrl } from "class-validator";
3
+
4
+ export class PhotoDto implements PhotoInterface {
5
+ @IsUrl()
6
+ url: string;
7
+ }
@@ -0,0 +1,30 @@
1
+ import {
2
+ EmailInterface,
3
+ NameInterface,
4
+ PhoneInterface,
5
+ PhotoInterface,
6
+ ProfileInterface,
7
+ } from "@cryptexlabs/authf-data-model";
8
+ import { EmailDto } from "./email.dto";
9
+ import { PhoneDto } from "./phone.dto";
10
+ import { PhotoDto } from "./photo.dto";
11
+ import { NameDto } from "./name.dto";
12
+
13
+ export class ProfileDto implements ProfileInterface {
14
+ email: {
15
+ primary: EmailDto | null;
16
+ other: EmailDto[];
17
+ };
18
+
19
+ phone: {
20
+ primary: PhoneDto | null;
21
+ other: PhoneDto[];
22
+ };
23
+
24
+ photo: {
25
+ primary: PhotoDto | null;
26
+ other: PhotoDto[];
27
+ };
28
+
29
+ name: NameDto;
30
+ }
@@ -0,0 +1,14 @@
1
+ import { UserInterface, UtcTimezone } from "@cryptexlabs/authf-data-model";
2
+ import { IsString } from "class-validator";
3
+ import { ProfileDto } from "./profile.dto";
4
+ import { IsValidUtcTimezone } from "../decorator";
5
+
6
+ export class UserDto implements UserInterface {
7
+ @IsString()
8
+ username: string;
9
+
10
+ profile: ProfileDto;
11
+
12
+ @IsValidUtcTimezone()
13
+ timezone: UtcTimezone;
14
+ }
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@ export * from "./client";
3
3
  export * from "./config";
4
4
  export * from "./context";
5
5
  export * from "./decorator";
6
+ export * from "./dto";
6
7
  export * from "./event";
7
8
  export * from "./filter";
8
9
  export * from "./logger";