@umapi/contracts 1.0.21 → 1.0.23

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.
@@ -5,11 +5,6 @@ import { AuthMethod } from '../interfaces';
5
5
  */
6
6
  export declare class OtpRequestDto {
7
7
  method: AuthMethod;
8
- phone?: string;
9
- email?: string;
10
- /**
11
- * Нормализует телефонный номер к стандартному формату
12
- */
13
- normalizePhone(): string | undefined;
8
+ identifier: string;
14
9
  }
15
10
  //# sourceMappingURL=otp-request.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otp-request.dto.d.ts","sourceRoot":"","sources":["../../src/dto/otp-request.dto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH,qBAAa,aAAa;IAGtB,MAAM,EAAG,UAAU,CAAC;IAMpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAMf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;CAkBvC"}
1
+ {"version":3,"file":"otp-request.dto.d.ts","sourceRoot":"","sources":["../../src/dto/otp-request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C;;;GAGG;AACH,qBAAa,aAAa;IAGtB,MAAM,EAAG,UAAU,CAAC;IAoBpB,UAAU,EAAG,MAAM,CAAC;CAGvB"}
@@ -12,30 +12,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.OtpRequestDto = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
15
16
  const interfaces_1 = require("../interfaces");
17
+ const phone_helper_1 = require("../helpers/phone.helper");
18
+ const phone_validator_1 = require("../validators/phone.validator");
16
19
  /**
17
20
  * DTO для запроса OTP
18
21
  * Требует указания либо phone, либо email
19
22
  */
20
23
  class OtpRequestDto {
21
- /**
22
- * Нормализует телефонный номер к стандартному формату
23
- */
24
- normalizePhone() {
25
- if (!this.phone)
26
- return undefined;
27
- // Удаляем все нецифровые символы кроме +
28
- let normalized = this.phone.replace(/[^0-9+]/g, '');
29
- // Если начинается с 8, заменяем на +7
30
- if (normalized.startsWith('8')) {
31
- normalized = '+7' + normalized.substring(1);
32
- }
33
- // Если нет кода страны, добавляем +7 (Россия по умолчанию)
34
- if (!normalized.startsWith('+')) {
35
- normalized = '+7' + normalized;
36
- }
37
- return normalized;
38
- }
39
24
  }
40
25
  exports.OtpRequestDto = OtpRequestDto;
41
26
  __decorate([
@@ -44,17 +29,24 @@ __decorate([
44
29
  __metadata("design:type", String)
45
30
  ], OtpRequestDto.prototype, "method", void 0);
46
31
  __decorate([
47
- (0, swagger_1.ApiProperty)({ description: 'Номер телефона в международном формате', required: false, example: '+79991234567' }),
48
- (0, class_validator_1.ValidateIf)(o => o.method === interfaces_1.AuthMethod.OTP_PHONE),
49
- (0, class_validator_1.IsNotEmpty)({ message: 'Телефон обязателен для метода OTP_PHONE' }),
32
+ (0, swagger_1.ApiProperty)({
33
+ description: 'Идентификатор пользователя (телефон или email)',
34
+ required: true,
35
+ example: '+79991234567'
36
+ }),
37
+ (0, class_validator_1.IsNotEmpty)({ message: 'Идентификатор обязателен' }),
50
38
  (0, class_validator_1.IsString)(),
51
- __metadata("design:type", String)
52
- ], OtpRequestDto.prototype, "phone", void 0);
53
- __decorate([
54
- (0, swagger_1.ApiProperty)({ description: 'Адрес электронной почты', required: false, example: 'user@example.com' }),
39
+ (0, class_validator_1.ValidateIf)(o => o.method === interfaces_1.AuthMethod.OTP_PHONE),
40
+ (0, phone_validator_1.IsValidPhone)({ message: 'Неверный формат номера телефона' }),
41
+ (0, class_transformer_1.Transform)(({ value, obj }) => {
42
+ // Нормализуем телефон, если метод OTP_PHONE
43
+ if (obj.method === interfaces_1.AuthMethod.OTP_PHONE) {
44
+ return phone_helper_1.PhoneHelper.normalize(value) || value; // Если нормализация не удалась, возвращаем оригинал
45
+ }
46
+ return value;
47
+ }),
55
48
  (0, class_validator_1.ValidateIf)(o => o.method === interfaces_1.AuthMethod.OTP_EMAIL),
56
- (0, class_validator_1.IsNotEmpty)({ message: 'Email обязателен для метода OTP_EMAIL' }),
57
49
  (0, class_validator_1.IsEmail)({}, { message: 'Неверный формат email' }),
58
50
  __metadata("design:type", String)
59
- ], OtpRequestDto.prototype, "email", void 0);
51
+ ], OtpRequestDto.prototype, "identifier", void 0);
60
52
  //# sourceMappingURL=otp-request.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otp-request.dto.js","sourceRoot":"","sources":["../../src/dto/otp-request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAoF;AACpF,8CAA2C;AAE3C;;;GAGG;AACH,MAAa,aAAa;IAiBtB;;OAEG;IACH,cAAc;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAElC,yCAAyC;QACzC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEpD,sCAAsC;QACtC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,UAAU,GAAG,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,UAAU,GAAG,IAAI,GAAG,UAAU,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AAtCD,sCAsCC;AAnCG;IAFC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,IAAI,EAAE,uBAAU,EAAE,OAAO,EAAE,uBAAU,CAAC,SAAS,EAAE,CAAC;IACrG,IAAA,wBAAM,EAAC,uBAAU,CAAC;;6CACC;AAMpB;IAJC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAChH,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,uBAAU,CAAC,SAAS,CAAC;IAClD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IAClE,IAAA,0BAAQ,GAAE;;4CACI;AAMf;IAJC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACrG,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,uBAAU,CAAC,SAAS,CAAC;IAClD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IAChE,IAAA,yBAAO,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;;4CACnC"}
1
+ {"version":3,"file":"otp-request.dto.js","sourceRoot":"","sources":["../../src/dto/otp-request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAoF;AACpF,yDAA8C;AAC9C,8CAA2C;AAC3C,0DAAsD;AACtD,mEAA6D;AAE7D;;;GAGG;AACH,MAAa,aAAa;CA0BzB;AA1BD,sCA0BC;AAvBG;IAFC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,IAAI,EAAE,uBAAU,EAAE,OAAO,EAAE,uBAAU,CAAC,SAAS,EAAE,CAAC;IACrG,IAAA,wBAAM,EAAC,uBAAU,CAAC;;6CACC;AAoBpB;IAlBC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,gDAAgD;QAC7D,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,cAAc;KAC1B,CAAC;IACD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACnD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,uBAAU,CAAC,SAAS,CAAC;IAClD,IAAA,8BAAY,EAAC,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;IAC5D,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;QAC1B,4CAA4C;QAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,uBAAU,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,0BAAW,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,oDAAoD;QACtG,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IACD,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,uBAAU,CAAC,SAAS,CAAC;IAClD,IAAA,yBAAO,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;;iDAC9B"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Утилиты для работы с телефонными номерами
3
+ */
4
+ export declare class PhoneHelper {
5
+ /**
6
+ * Нормализует телефонный номер к формату E.164 (+79991234567)
7
+ * @param phone Исходный номер телефона
8
+ * @returns Нормализованный номер или null если невалидный
9
+ */
10
+ static normalize(phone: string): string | null;
11
+ /**
12
+ * Проверяет валидность телефонного номера
13
+ * @param phone Номер телефона
14
+ * @returns boolean
15
+ */
16
+ static isValid(phone: string): boolean;
17
+ /**
18
+ * Форматирует телефон в национальный формат (8 (999) 123-45-67)
19
+ * @param phone Номер телефона
20
+ * @returns Отформатированный номер или null
21
+ */
22
+ static formatNational(phone: string): string | null;
23
+ /**
24
+ * Форматирует телефон в RFC3966 (tel:+79991234567)
25
+ * @param phone Номер телефона
26
+ * @returns Отформатированный номер или null
27
+ */
28
+ static formatUrl(phone: string): string | null;
29
+ /**
30
+ * Получает код страны из номера
31
+ * @param phone Номер телефона
32
+ * @returns Код страны или null
33
+ */
34
+ static getCountryCode(phone: string): string | null;
35
+ }
36
+ //# sourceMappingURL=phone.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/phone.helper.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqB9C;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWtC;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAcnD;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAc9C;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAUpD"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PhoneHelper = void 0;
7
+ const libphonenumber_js_1 = __importDefault(require("libphonenumber-js"));
8
+ /**
9
+ * Утилиты для работы с телефонными номерами
10
+ */
11
+ class PhoneHelper {
12
+ /**
13
+ * Нормализует телефонный номер к формату E.164 (+79991234567)
14
+ * @param phone Исходный номер телефона
15
+ * @returns Нормализованный номер или null если невалидный
16
+ */
17
+ static normalize(phone) {
18
+ if (!phone)
19
+ return null;
20
+ try {
21
+ // Сначала очищаем номер от лишних символов
22
+ const cleaned = phone.replace(/[^\d+]/g, '');
23
+ // Парсим номер
24
+ const phoneNumber = (0, libphonenumber_js_1.default)(cleaned);
25
+ // Возвращаем в формате E.164 если валиден
26
+ if (phoneNumber?.isValid()) {
27
+ return phoneNumber.number.toString();
28
+ }
29
+ return null;
30
+ }
31
+ catch (error) {
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * Проверяет валидность телефонного номера
37
+ * @param phone Номер телефона
38
+ * @returns boolean
39
+ */
40
+ static isValid(phone) {
41
+ if (!phone)
42
+ return false;
43
+ try {
44
+ const phoneNumber = (0, libphonenumber_js_1.default)(phone);
45
+ return phoneNumber?.isValid() || false;
46
+ }
47
+ catch (error) {
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * Форматирует телефон в национальный формат (8 (999) 123-45-67)
53
+ * @param phone Номер телефона
54
+ * @returns Отформатированный номер или null
55
+ */
56
+ static formatNational(phone) {
57
+ if (!phone)
58
+ return null;
59
+ try {
60
+ const phoneNumber = (0, libphonenumber_js_1.default)(phone);
61
+ if (phoneNumber?.isValid()) {
62
+ return phoneNumber.format('NATIONAL');
63
+ }
64
+ return null;
65
+ }
66
+ catch (error) {
67
+ return null;
68
+ }
69
+ }
70
+ /**
71
+ * Форматирует телефон в RFC3966 (tel:+79991234567)
72
+ * @param phone Номер телефона
73
+ * @returns Отформатированный номер или null
74
+ */
75
+ static formatUrl(phone) {
76
+ if (!phone)
77
+ return null;
78
+ try {
79
+ const phoneNumber = (0, libphonenumber_js_1.default)(phone);
80
+ if (phoneNumber?.isValid()) {
81
+ return phoneNumber.format('RFC3966');
82
+ }
83
+ return null;
84
+ }
85
+ catch (error) {
86
+ return null;
87
+ }
88
+ }
89
+ /**
90
+ * Получает код страны из номера
91
+ * @param phone Номер телефона
92
+ * @returns Код страны или null
93
+ */
94
+ static getCountryCode(phone) {
95
+ if (!phone)
96
+ return null;
97
+ try {
98
+ const phoneNumber = (0, libphonenumber_js_1.default)(phone);
99
+ return phoneNumber?.country || null;
100
+ }
101
+ catch (error) {
102
+ return null;
103
+ }
104
+ }
105
+ }
106
+ exports.PhoneHelper = PhoneHelper;
107
+ //# sourceMappingURL=phone.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.helper.js","sourceRoot":"","sources":["../../src/helpers/phone.helper.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAiD;AAEjD;;GAEG;AACH,MAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAE7C,eAAe;YACf,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;YAE9C,0CAA0C;YAC1C,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,WAAW,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAa;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAa;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAhGD,kCAgGC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './dto';
2
2
  export * from './interfaces';
3
+ export * from './helpers/phone.helper';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // Экспорт всех контрактов
18
18
  __exportStar(require("./dto"), exports);
19
19
  __exportStar(require("./interfaces"), exports);
20
+ __exportStar(require("./helpers/phone.helper"), exports);
20
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0BAA0B;AAC1B,wCAAsB;AACtB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0BAA0B;AAC1B,wCAAsB;AACtB,+CAA6B;AAC7B,yDAAuC"}
@@ -0,0 +1,7 @@
1
+ import { ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
2
+ export declare class IsValidPhoneConstraint implements ValidatorConstraintInterface {
3
+ validate(phone: string): boolean;
4
+ defaultMessage(): string;
5
+ }
6
+ export declare function IsValidPhone(validationOptions?: ValidationOptions): (object: Object, propertyName: string) => void;
7
+ //# sourceMappingURL=phone.validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.validator.d.ts","sourceRoot":"","sources":["../../src/validators/phone.validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,iBAAiB,EAAuB,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAG1H,qBACa,sBAAuB,YAAW,4BAA4B;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM;IAWtB,cAAc;CAGf;AAED,wBAAgB,YAAY,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,IAC/C,QAAQ,MAAM,EAAE,cAAc,MAAM,UAStD"}
@@ -0,0 +1,47 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.IsValidPhoneConstraint = void 0;
13
+ exports.IsValidPhone = IsValidPhone;
14
+ const class_validator_1 = require("class-validator");
15
+ const libphonenumber_js_1 = __importDefault(require("libphonenumber-js"));
16
+ let IsValidPhoneConstraint = class IsValidPhoneConstraint {
17
+ validate(phone) {
18
+ if (!phone)
19
+ return false;
20
+ try {
21
+ const phoneNumber = (0, libphonenumber_js_1.default)(phone);
22
+ return phoneNumber?.isValid() || false;
23
+ }
24
+ catch (error) {
25
+ return false;
26
+ }
27
+ }
28
+ defaultMessage() {
29
+ return 'Неверный формат номера телефона. Используйте международный формат: +79991234567';
30
+ }
31
+ };
32
+ exports.IsValidPhoneConstraint = IsValidPhoneConstraint;
33
+ exports.IsValidPhoneConstraint = IsValidPhoneConstraint = __decorate([
34
+ (0, class_validator_1.ValidatorConstraint)({ async: false })
35
+ ], IsValidPhoneConstraint);
36
+ function IsValidPhone(validationOptions) {
37
+ return function (object, propertyName) {
38
+ (0, class_validator_1.registerDecorator)({
39
+ target: object.constructor,
40
+ propertyName: propertyName,
41
+ options: validationOptions,
42
+ constraints: [],
43
+ validator: IsValidPhoneConstraint,
44
+ });
45
+ };
46
+ }
47
+ //# sourceMappingURL=phone.validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.validator.js","sourceRoot":"","sources":["../../src/validators/phone.validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAqBA,oCAUC;AA/BD,qDAA0H;AAC1H,0EAAiD;AAG1C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,WAAW,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,iFAAiF,CAAC;IAC3F,CAAC;CACF,CAAA;AAfY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACzB,sBAAsB,CAelC;AAED,SAAgB,YAAY,CAAC,iBAAqC;IAChE,OAAO,UAAU,MAAc,EAAE,YAAoB;QACnD,IAAA,mCAAiB,EAAC;YAChB,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umapi/contracts",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "Shared contracts for UMAPI microservices",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,6 +20,7 @@
20
20
  "dependencies": {
21
21
  "class-transformer": "^0.5.1",
22
22
  "class-validator": "^0.14.1",
23
+ "libphonenumber-js": "^1.12.33",
23
24
  "reflect-metadata": "^0.2.2"
24
25
  },
25
26
  "peerDependencies": {