@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.
- package/dist/dto/otp-request.dto.d.ts +1 -6
- package/dist/dto/otp-request.dto.d.ts.map +1 -1
- package/dist/dto/otp-request.dto.js +19 -27
- package/dist/dto/otp-request.dto.js.map +1 -1
- package/dist/helpers/phone.helper.d.ts +36 -0
- package/dist/helpers/phone.helper.d.ts.map +1 -0
- package/dist/helpers/phone.helper.js +107 -0
- package/dist/helpers/phone.helper.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/validators/phone.validator.d.ts +7 -0
- package/dist/validators/phone.validator.d.ts.map +1 -0
- package/dist/validators/phone.validator.js +47 -0
- package/dist/validators/phone.validator.js.map +1 -0
- package/package.json +2 -1
|
@@ -5,11 +5,6 @@ import { AuthMethod } from '../interfaces';
|
|
|
5
5
|
*/
|
|
6
6
|
export declare class OtpRequestDto {
|
|
7
7
|
method: AuthMethod;
|
|
8
|
-
|
|
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":"
|
|
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)({
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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, "
|
|
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;
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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": {
|