tychat-contracts 1.0.48 → 1.0.50
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/README.md +2 -2
- package/dist/auth/auth-kafka.payloads.d.ts +11 -2
- package/dist/auth/auth-kafka.payloads.d.ts.map +1 -1
- package/dist/auth/auth-kafka.payloads.js +48 -2
- package/dist/auth/auth-login-response.dto.d.ts +6 -0
- package/dist/auth/auth-login-response.dto.d.ts.map +1 -0
- package/dist/auth/auth-login-response.dto.js +34 -0
- package/dist/auth/confirm-password-reset.dto.d.ts +6 -0
- package/dist/auth/confirm-password-reset.dto.d.ts.map +1 -0
- package/dist/auth/confirm-password-reset.dto.js +52 -0
- package/dist/auth/index.d.ts +4 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +13 -1
- package/dist/auth/match-field.decorator.d.ts +3 -0
- package/dist/auth/match-field.decorator.d.ts.map +1 -0
- package/dist/auth/match-field.decorator.js +25 -0
- package/dist/auth/request-password-reset.dto.d.ts +4 -0
- package/dist/auth/request-password-reset.dto.d.ts.map +1 -0
- package/dist/auth/request-password-reset.dto.js +25 -0
- package/dist/users/change-force-password.dto.d.ts +6 -0
- package/dist/users/change-force-password.dto.d.ts.map +1 -0
- package/dist/users/change-force-password.dto.js +59 -0
- package/dist/users/create-user.dto.d.ts +0 -1
- package/dist/users/create-user.dto.d.ts.map +1 -1
- package/dist/users/create-user.dto.js +0 -12
- package/dist/users/index.d.ts +2 -1
- package/dist/users/index.d.ts.map +1 -1
- package/dist/users/index.js +3 -1
- package/dist/users/user-update-kafka-payloads.d.ts +9 -0
- package/dist/users/user-update-kafka-payloads.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/auth/auth-kafka.payloads.ts +38 -4
- package/src/auth/auth-login-response.dto.ts +15 -0
- package/src/auth/confirm-password-reset.dto.ts +33 -0
- package/src/auth/index.ts +6 -1
- package/src/auth/match-field.decorator.ts +30 -0
- package/src/auth/request-password-reset.dto.ts +10 -0
- package/src/users/change-force-password.dto.ts +40 -0
- package/src/users/create-user.dto.ts +0 -10
- package/src/users/index.ts +2 -0
- package/src/users/user-update-kafka-payloads.ts +10 -0
- package/dist/users/user-update-constraints.d.ts +0 -12
- package/dist/users/user-update-constraints.d.ts.map +0 -1
- package/dist/users/user-update-constraints.js +0 -45
package/README.md
CHANGED
|
@@ -4,8 +4,8 @@ DTOs compartilhados com **class-validator** usados pela **tychat-api** e pelos m
|
|
|
4
4
|
|
|
5
5
|
## Estrutura
|
|
6
6
|
|
|
7
|
-
- **auth**: `LoginDto`, `RefreshTokenDto`, payloads Kafka (`LoginPayload`, etc.)
|
|
8
|
-
- **users**: `CreateUserDto
|
|
7
|
+
- **auth**: `LoginDto`, `RefreshTokenDto`, `RequestPasswordResetDto`, `ConfirmPasswordResetDto`, `AuthLoginResponseDto`, payloads Kafka (`LoginPayload`, `RequestPasswordResetPayload`, etc.)
|
|
8
|
+
- **users**: `CreateUserDto` (sem password para criação por admin), `UserListItemDto`, `UpdateSelfUserDto`, `UpdateUserByAdminDto`, `UpdatedUserDto`, `ChangeForcePasswordDto`
|
|
9
9
|
|
|
10
10
|
## Uso
|
|
11
11
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LoginDto } from
|
|
2
|
-
import { RefreshTokenDto } from
|
|
1
|
+
import { LoginDto } from './login.dto';
|
|
2
|
+
import { RefreshTokenDto } from './refresh-token.dto';
|
|
3
3
|
export declare class LoginPayload extends LoginDto {
|
|
4
4
|
tenant: string;
|
|
5
5
|
}
|
|
@@ -10,4 +10,13 @@ export declare class ValidatePayload {
|
|
|
10
10
|
export declare class RefreshPayload extends RefreshTokenDto {
|
|
11
11
|
tenant: string;
|
|
12
12
|
}
|
|
13
|
+
export declare class RequestPasswordResetPayload {
|
|
14
|
+
tenant: string;
|
|
15
|
+
email: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ConfirmPasswordResetPayload {
|
|
18
|
+
tenant: string;
|
|
19
|
+
verify_token: string;
|
|
20
|
+
password: string;
|
|
21
|
+
}
|
|
13
22
|
//# sourceMappingURL=auth-kafka.payloads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-kafka.payloads.d.ts","sourceRoot":"","sources":["../../src/auth/auth-kafka.payloads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-kafka.payloads.d.ts","sourceRoot":"","sources":["../../src/auth/auth-kafka.payloads.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,YAAa,SAAQ,QAAQ;IAKxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IAK1B,MAAM,EAAE,MAAM,CAAC;IAMf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAe,SAAQ,eAAe;IAKjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,2BAA2B;IAKtC,MAAM,EAAE,MAAM,CAAC;IAMf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,2BAA2B;IAKtC,MAAM,EAAE,MAAM,CAAC;IAMf,YAAY,EAAE,MAAM,CAAC;IAMrB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -9,10 +9,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.RefreshPayload = exports.ValidatePayload = exports.LoginPayload = void 0;
|
|
12
|
+
exports.ConfirmPasswordResetPayload = exports.RequestPasswordResetPayload = exports.RefreshPayload = exports.ValidatePayload = exports.LoginPayload = void 0;
|
|
13
13
|
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
-
const login_dto_1 = require("./login.dto");
|
|
15
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
+
const login_dto_1 = require("./login.dto");
|
|
16
16
|
const refresh_token_dto_1 = require("./refresh-token.dto");
|
|
17
17
|
class LoginPayload extends login_dto_1.LoginDto {
|
|
18
18
|
tenant;
|
|
@@ -55,3 +55,49 @@ __decorate([
|
|
|
55
55
|
(0, class_validator_1.MaxLength)(255),
|
|
56
56
|
__metadata("design:type", String)
|
|
57
57
|
], RefreshPayload.prototype, "tenant", void 0);
|
|
58
|
+
class RequestPasswordResetPayload {
|
|
59
|
+
tenant;
|
|
60
|
+
email;
|
|
61
|
+
}
|
|
62
|
+
exports.RequestPasswordResetPayload = RequestPasswordResetPayload;
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, swagger_1.ApiProperty)({ description: 'ID do tenant', example: 'tenant1' }),
|
|
65
|
+
(0, class_validator_1.IsString)(),
|
|
66
|
+
(0, class_validator_1.MinLength)(1, { message: 'tenant não pode ser vazio' }),
|
|
67
|
+
(0, class_validator_1.MaxLength)(255),
|
|
68
|
+
__metadata("design:type", String)
|
|
69
|
+
], RequestPasswordResetPayload.prototype, "tenant", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, swagger_1.ApiProperty)({ description: 'E-mail do usuário', example: 'usuario@empresa.com' }),
|
|
72
|
+
(0, class_validator_1.IsString)(),
|
|
73
|
+
(0, class_validator_1.MinLength)(1, { message: 'email não pode ser vazio' }),
|
|
74
|
+
(0, class_validator_1.MaxLength)(255),
|
|
75
|
+
__metadata("design:type", String)
|
|
76
|
+
], RequestPasswordResetPayload.prototype, "email", void 0);
|
|
77
|
+
class ConfirmPasswordResetPayload {
|
|
78
|
+
tenant;
|
|
79
|
+
verify_token;
|
|
80
|
+
password;
|
|
81
|
+
}
|
|
82
|
+
exports.ConfirmPasswordResetPayload = ConfirmPasswordResetPayload;
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, swagger_1.ApiProperty)({ description: 'ID do tenant', example: 'tenant1' }),
|
|
85
|
+
(0, class_validator_1.IsString)(),
|
|
86
|
+
(0, class_validator_1.MinLength)(1, { message: 'tenant não pode ser vazio' }),
|
|
87
|
+
(0, class_validator_1.MaxLength)(255),
|
|
88
|
+
__metadata("design:type", String)
|
|
89
|
+
], ConfirmPasswordResetPayload.prototype, "tenant", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
(0, swagger_1.ApiProperty)({ description: 'Token de verificação para reset de senha', example: 'a3b5f3c1...' }),
|
|
92
|
+
(0, class_validator_1.IsString)(),
|
|
93
|
+
(0, class_validator_1.MinLength)(1, { message: 'verify_token não pode ser vazio' }),
|
|
94
|
+
(0, class_validator_1.MaxLength)(255),
|
|
95
|
+
__metadata("design:type", String)
|
|
96
|
+
], ConfirmPasswordResetPayload.prototype, "verify_token", void 0);
|
|
97
|
+
__decorate([
|
|
98
|
+
(0, swagger_1.ApiProperty)({ description: 'Nova senha do usuário', example: 'senha123' }),
|
|
99
|
+
(0, class_validator_1.IsString)(),
|
|
100
|
+
(0, class_validator_1.MinLength)(6, { message: 'password deve ter no mínimo 6 caracteres' }),
|
|
101
|
+
(0, class_validator_1.MaxLength)(255),
|
|
102
|
+
__metadata("design:type", String)
|
|
103
|
+
], ConfirmPasswordResetPayload.prototype, "password", void 0);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-login-response.dto.d.ts","sourceRoot":"","sources":["../../src/auth/auth-login-response.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,oBAAoB;IAE/B,YAAY,EAAE,MAAM,CAAC;IAGrB,aAAa,EAAE,MAAM,CAAC;IAMtB,qBAAqB,EAAE,OAAO,CAAC;CAChC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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.AuthLoginResponseDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
class AuthLoginResponseDto {
|
|
15
|
+
access_token;
|
|
16
|
+
refresh_token;
|
|
17
|
+
force_change_password;
|
|
18
|
+
}
|
|
19
|
+
exports.AuthLoginResponseDto = AuthLoginResponseDto;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, swagger_1.ApiProperty)({ description: 'Token de acesso JWT' }),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], AuthLoginResponseDto.prototype, "access_token", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, swagger_1.ApiProperty)({ description: 'Token de refresh JWT' }),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], AuthLoginResponseDto.prototype, "refresh_token", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, swagger_1.ApiProperty)({
|
|
30
|
+
description: 'Indica se o usuário deve alterar a senha no primeiro acesso',
|
|
31
|
+
example: true,
|
|
32
|
+
}),
|
|
33
|
+
__metadata("design:type", Boolean)
|
|
34
|
+
], AuthLoginResponseDto.prototype, "force_change_password", void 0);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-password-reset.dto.d.ts","sourceRoot":"","sources":["../../src/auth/confirm-password-reset.dto.ts"],"names":[],"mappings":"AAIA,qBAAa,uBAAuB;IAQlC,YAAY,EAAE,MAAM,CAAC;IAMrB,QAAQ,EAAE,MAAM,CAAC;IAajB,qBAAqB,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.ConfirmPasswordResetDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const match_field_decorator_1 = require("./match-field.decorator");
|
|
16
|
+
class ConfirmPasswordResetDto {
|
|
17
|
+
verify_token;
|
|
18
|
+
password;
|
|
19
|
+
password_confirmation;
|
|
20
|
+
}
|
|
21
|
+
exports.ConfirmPasswordResetDto = ConfirmPasswordResetDto;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, swagger_1.ApiProperty)({
|
|
24
|
+
description: 'Token de verificação recebido para troca de senha',
|
|
25
|
+
example: 'a3b5f3c1ef65...',
|
|
26
|
+
}),
|
|
27
|
+
(0, class_validator_1.IsString)(),
|
|
28
|
+
(0, class_validator_1.MinLength)(1, { message: 'verify_token não pode ser vazio' }),
|
|
29
|
+
(0, class_validator_1.MaxLength)(255),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], ConfirmPasswordResetDto.prototype, "verify_token", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, swagger_1.ApiProperty)({ description: 'Nova senha', example: 'senha123', minLength: 6 }),
|
|
34
|
+
(0, class_validator_1.IsString)(),
|
|
35
|
+
(0, class_validator_1.MinLength)(6, { message: 'password deve ter no mínimo 6 caracteres' }),
|
|
36
|
+
(0, class_validator_1.MaxLength)(255),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], ConfirmPasswordResetDto.prototype, "password", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, swagger_1.ApiProperty)({
|
|
41
|
+
description: 'Confirmação da nova senha',
|
|
42
|
+
example: 'senha123',
|
|
43
|
+
minLength: 6,
|
|
44
|
+
}),
|
|
45
|
+
(0, class_validator_1.IsString)(),
|
|
46
|
+
(0, class_validator_1.MinLength)(6, { message: 'password_confirmation deve ter no mínimo 6 caracteres' }),
|
|
47
|
+
(0, class_validator_1.MaxLength)(255),
|
|
48
|
+
(0, match_field_decorator_1.MatchField)('password', {
|
|
49
|
+
message: 'password_confirmation deve ser igual a password',
|
|
50
|
+
}),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], ConfirmPasswordResetDto.prototype, "password_confirmation", void 0);
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { LoginDto } from './login.dto';
|
|
2
|
-
export
|
|
2
|
+
export { LoginPayload, ValidatePayload, RefreshPayload, RequestPasswordResetPayload, ConfirmPasswordResetPayload, } from './auth-kafka.payloads';
|
|
3
3
|
export { RefreshTokenDto } from './refresh-token.dto';
|
|
4
|
+
export { RequestPasswordResetDto } from './request-password-reset.dto';
|
|
5
|
+
export { ConfirmPasswordResetDto } from './confirm-password-reset.dto';
|
|
6
|
+
export { AuthLoginResponseDto } from './auth-login-response.dto';
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RefreshTokenDto = exports.LoginDto = void 0;
|
|
3
|
+
exports.AuthLoginResponseDto = exports.ConfirmPasswordResetDto = exports.RequestPasswordResetDto = exports.RefreshTokenDto = exports.ConfirmPasswordResetPayload = exports.RequestPasswordResetPayload = exports.RefreshPayload = exports.ValidatePayload = exports.LoginPayload = exports.LoginDto = void 0;
|
|
4
4
|
var login_dto_1 = require("./login.dto");
|
|
5
5
|
Object.defineProperty(exports, "LoginDto", { enumerable: true, get: function () { return login_dto_1.LoginDto; } });
|
|
6
|
+
var auth_kafka_payloads_1 = require("./auth-kafka.payloads");
|
|
7
|
+
Object.defineProperty(exports, "LoginPayload", { enumerable: true, get: function () { return auth_kafka_payloads_1.LoginPayload; } });
|
|
8
|
+
Object.defineProperty(exports, "ValidatePayload", { enumerable: true, get: function () { return auth_kafka_payloads_1.ValidatePayload; } });
|
|
9
|
+
Object.defineProperty(exports, "RefreshPayload", { enumerable: true, get: function () { return auth_kafka_payloads_1.RefreshPayload; } });
|
|
10
|
+
Object.defineProperty(exports, "RequestPasswordResetPayload", { enumerable: true, get: function () { return auth_kafka_payloads_1.RequestPasswordResetPayload; } });
|
|
11
|
+
Object.defineProperty(exports, "ConfirmPasswordResetPayload", { enumerable: true, get: function () { return auth_kafka_payloads_1.ConfirmPasswordResetPayload; } });
|
|
6
12
|
var refresh_token_dto_1 = require("./refresh-token.dto");
|
|
7
13
|
Object.defineProperty(exports, "RefreshTokenDto", { enumerable: true, get: function () { return refresh_token_dto_1.RefreshTokenDto; } });
|
|
14
|
+
var request_password_reset_dto_1 = require("./request-password-reset.dto");
|
|
15
|
+
Object.defineProperty(exports, "RequestPasswordResetDto", { enumerable: true, get: function () { return request_password_reset_dto_1.RequestPasswordResetDto; } });
|
|
16
|
+
var confirm_password_reset_dto_1 = require("./confirm-password-reset.dto");
|
|
17
|
+
Object.defineProperty(exports, "ConfirmPasswordResetDto", { enumerable: true, get: function () { return confirm_password_reset_dto_1.ConfirmPasswordResetDto; } });
|
|
18
|
+
var auth_login_response_dto_1 = require("./auth-login-response.dto");
|
|
19
|
+
Object.defineProperty(exports, "AuthLoginResponseDto", { enumerable: true, get: function () { return auth_login_response_dto_1.AuthLoginResponseDto; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-field.decorator.d.ts","sourceRoot":"","sources":["../../src/auth/match-field.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,iBAAiB,IAEpB,QAAQ,MAAM,EAAE,cAAc,MAAM,UAmBtD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MatchField = MatchField;
|
|
4
|
+
const class_validator_1 = require("class-validator");
|
|
5
|
+
function MatchField(sourceField, validationOptions) {
|
|
6
|
+
return function (object, propertyName) {
|
|
7
|
+
(0, class_validator_1.registerDecorator)({
|
|
8
|
+
name: 'matchField',
|
|
9
|
+
target: object.constructor,
|
|
10
|
+
propertyName,
|
|
11
|
+
constraints: [sourceField],
|
|
12
|
+
options: validationOptions,
|
|
13
|
+
validator: {
|
|
14
|
+
validate(value, args) {
|
|
15
|
+
const [field] = args.constraints;
|
|
16
|
+
return value === args.object[field];
|
|
17
|
+
},
|
|
18
|
+
defaultMessage(args) {
|
|
19
|
+
const [field] = args.constraints;
|
|
20
|
+
return `${args.property} must match ${field}`;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-password-reset.dto.d.ts","sourceRoot":"","sources":["../../src/auth/request-password-reset.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,uBAAuB;IAKlC,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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.RequestPasswordResetDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class RequestPasswordResetDto {
|
|
16
|
+
email;
|
|
17
|
+
}
|
|
18
|
+
exports.RequestPasswordResetDto = RequestPasswordResetDto;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, swagger_1.ApiProperty)({ description: 'E-mail do usuário', example: 'usuario@empresa.com' }),
|
|
21
|
+
(0, class_validator_1.IsEmail)({}, { message: 'email deve ser um e-mail válido' }),
|
|
22
|
+
(0, class_validator_1.IsString)(),
|
|
23
|
+
(0, class_validator_1.MinLength)(1, { message: 'email não pode ser vazio' }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], RequestPasswordResetDto.prototype, "email", void 0);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-force-password.dto.d.ts","sourceRoot":"","sources":["../../src/users/change-force-password.dto.ts"],"names":[],"mappings":"AAIA,qBAAa,sBAAsB;IASjC,gBAAgB,EAAE,MAAM,CAAC;IAUzB,YAAY,EAAE,MAAM,CAAC;IAerB,yBAAyB,EAAE,MAAM,CAAC;CACnC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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.ChangeForcePasswordDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const match_field_decorator_1 = require("../auth/match-field.decorator");
|
|
16
|
+
class ChangeForcePasswordDto {
|
|
17
|
+
current_password;
|
|
18
|
+
new_password;
|
|
19
|
+
new_password_confirmation;
|
|
20
|
+
}
|
|
21
|
+
exports.ChangeForcePasswordDto = ChangeForcePasswordDto;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, swagger_1.ApiProperty)({
|
|
24
|
+
description: 'Senha atual recebida por e-mail no primeiro acesso',
|
|
25
|
+
example: 'Tmp#4A8x!pQ',
|
|
26
|
+
minLength: 1,
|
|
27
|
+
}),
|
|
28
|
+
(0, class_validator_1.IsString)(),
|
|
29
|
+
(0, class_validator_1.MinLength)(1, { message: 'current_password não pode ser vazio' }),
|
|
30
|
+
(0, class_validator_1.MaxLength)(255),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], ChangeForcePasswordDto.prototype, "current_password", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, swagger_1.ApiProperty)({
|
|
35
|
+
description: 'Nova senha a ser definida pelo usuário',
|
|
36
|
+
example: 'MinhaSenha@2026',
|
|
37
|
+
minLength: 6,
|
|
38
|
+
}),
|
|
39
|
+
(0, class_validator_1.IsString)(),
|
|
40
|
+
(0, class_validator_1.MinLength)(6, { message: 'new_password deve ter no mínimo 6 caracteres' }),
|
|
41
|
+
(0, class_validator_1.MaxLength)(255),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], ChangeForcePasswordDto.prototype, "new_password", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, swagger_1.ApiProperty)({
|
|
46
|
+
description: 'Confirmação da nova senha',
|
|
47
|
+
example: 'MinhaSenha@2026',
|
|
48
|
+
minLength: 6,
|
|
49
|
+
}),
|
|
50
|
+
(0, class_validator_1.IsString)(),
|
|
51
|
+
(0, class_validator_1.MinLength)(6, {
|
|
52
|
+
message: 'new_password_confirmation deve ter no mínimo 6 caracteres',
|
|
53
|
+
}),
|
|
54
|
+
(0, class_validator_1.MaxLength)(255),
|
|
55
|
+
(0, match_field_decorator_1.MatchField)('new_password', {
|
|
56
|
+
message: 'new_password_confirmation deve ser igual a new_password',
|
|
57
|
+
}),
|
|
58
|
+
__metadata("design:type", String)
|
|
59
|
+
], ChangeForcePasswordDto.prototype, "new_password_confirmation", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-user.dto.d.ts","sourceRoot":"","sources":["../../src/users/create-user.dto.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,+CAAgD,CAAC;AAClF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,qBAAa,aAAa;IASxB,IAAI,EAAE,MAAM,CAAC;IAWb,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"create-user.dto.d.ts","sourceRoot":"","sources":["../../src/users/create-user.dto.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,+CAAgD,CAAC;AAClF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,qBAAa,aAAa;IASxB,IAAI,EAAE,MAAM,CAAC;IAWb,KAAK,EAAE,MAAM,CAAC;IAWd,IAAI,EAAE,iBAAiB,CAAC;CACzB"}
|
|
@@ -20,7 +20,6 @@ exports.CREATABLE_USER_ROLES = ['attendant', 'health_professional'];
|
|
|
20
20
|
class CreateUserDto {
|
|
21
21
|
name;
|
|
22
22
|
email;
|
|
23
|
-
password;
|
|
24
23
|
role;
|
|
25
24
|
}
|
|
26
25
|
exports.CreateUserDto = CreateUserDto;
|
|
@@ -47,17 +46,6 @@ __decorate([
|
|
|
47
46
|
(0, class_validator_1.MaxLength)(255),
|
|
48
47
|
__metadata("design:type", String)
|
|
49
48
|
], CreateUserDto.prototype, "email", void 0);
|
|
50
|
-
__decorate([
|
|
51
|
-
(0, swagger_1.ApiProperty)({
|
|
52
|
-
description: 'Senha (será hasheada com bcrypt)',
|
|
53
|
-
example: 'senha123',
|
|
54
|
-
minLength: 6,
|
|
55
|
-
}),
|
|
56
|
-
(0, class_validator_1.IsString)(),
|
|
57
|
-
(0, class_validator_1.MinLength)(6, { message: 'password deve ter no mínimo 6 caracteres' }),
|
|
58
|
-
(0, class_validator_1.MaxLength)(255),
|
|
59
|
-
__metadata("design:type", String)
|
|
60
|
-
], CreateUserDto.prototype, "password", void 0);
|
|
61
49
|
__decorate([
|
|
62
50
|
(0, swagger_1.ApiProperty)({
|
|
63
51
|
description: 'Papel do usuário. Apenas atendente ou profissional de saúde; administrador não pode criar outros administradores.',
|
package/dist/users/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { UserListItemDto } from './user-list-item.dto';
|
|
|
3
3
|
export { UpdateSelfUserDto } from './update-self-user.dto';
|
|
4
4
|
export { UpdateUserByAdminDto, ALL_USER_ROLES, type AllUserRole, } from './update-user-by-admin.dto';
|
|
5
5
|
export { UpdatedUserDto } from './updated-user.dto';
|
|
6
|
-
export
|
|
6
|
+
export { ChangeForcePasswordDto } from './change-force-password.dto';
|
|
7
|
+
export type { AuthUpdateSelfPayload, AuthUpdateUserAdminPayload, AuthChangeForcePasswordPayload, } from './user-update-kafka-payloads';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,qBAAqB,EACrB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC"}
|
package/dist/users/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UpdatedUserDto = exports.ALL_USER_ROLES = exports.UpdateUserByAdminDto = exports.UpdateSelfUserDto = exports.UserListItemDto = exports.CREATABLE_USER_ROLES = exports.CreateUserDto = void 0;
|
|
3
|
+
exports.ChangeForcePasswordDto = exports.UpdatedUserDto = exports.ALL_USER_ROLES = exports.UpdateUserByAdminDto = exports.UpdateSelfUserDto = exports.UserListItemDto = exports.CREATABLE_USER_ROLES = exports.CreateUserDto = void 0;
|
|
4
4
|
var create_user_dto_1 = require("./create-user.dto");
|
|
5
5
|
Object.defineProperty(exports, "CreateUserDto", { enumerable: true, get: function () { return create_user_dto_1.CreateUserDto; } });
|
|
6
6
|
Object.defineProperty(exports, "CREATABLE_USER_ROLES", { enumerable: true, get: function () { return create_user_dto_1.CREATABLE_USER_ROLES; } });
|
|
@@ -13,3 +13,5 @@ Object.defineProperty(exports, "UpdateUserByAdminDto", { enumerable: true, get:
|
|
|
13
13
|
Object.defineProperty(exports, "ALL_USER_ROLES", { enumerable: true, get: function () { return update_user_by_admin_dto_1.ALL_USER_ROLES; } });
|
|
14
14
|
var updated_user_dto_1 = require("./updated-user.dto");
|
|
15
15
|
Object.defineProperty(exports, "UpdatedUserDto", { enumerable: true, get: function () { return updated_user_dto_1.UpdatedUserDto; } });
|
|
16
|
+
var change_force_password_dto_1 = require("./change-force-password.dto");
|
|
17
|
+
Object.defineProperty(exports, "ChangeForcePasswordDto", { enumerable: true, get: function () { return change_force_password_dto_1.ChangeForcePasswordDto; } });
|
|
@@ -21,4 +21,13 @@ export interface AuthUpdateUserAdminPayload {
|
|
|
21
21
|
password?: string;
|
|
22
22
|
role?: 'administrator' | 'attendant' | 'health_professional';
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Kafka payload for auth.change_force_password (tychat-api → tychat-auth-service).
|
|
26
|
+
*/
|
|
27
|
+
export interface AuthChangeForcePasswordPayload {
|
|
28
|
+
tenant?: string;
|
|
29
|
+
userId: string;
|
|
30
|
+
current_password: string;
|
|
31
|
+
new_password: string;
|
|
32
|
+
}
|
|
24
33
|
//# sourceMappingURL=user-update-kafka-payloads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-update-kafka-payloads.d.ts","sourceRoot":"","sources":["../../src/users/user-update-kafka-payloads.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW,GAAG,qBAAqB,CAAC;CAC9D"}
|
|
1
|
+
{"version":3,"file":"user-update-kafka-payloads.d.ts","sourceRoot":"","sources":["../../src/users/user-update-kafka-payloads.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW,GAAG,qBAAqB,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ApiProperty } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { RefreshTokenDto } from
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
import { IsString, MaxLength, MinLength } from 'class-validator';
|
|
3
|
+
import { LoginDto } from './login.dto';
|
|
4
|
+
import { RefreshTokenDto } from './refresh-token.dto';
|
|
5
5
|
|
|
6
6
|
export class LoginPayload extends LoginDto {
|
|
7
7
|
@ApiProperty({ description: 'ID do tenant', example: 'tenant1' })
|
|
@@ -31,4 +31,38 @@ export class RefreshPayload extends RefreshTokenDto {
|
|
|
31
31
|
@MinLength(1, { message: 'tenant não pode ser vazio' })
|
|
32
32
|
@MaxLength(255)
|
|
33
33
|
tenant: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export class RequestPasswordResetPayload {
|
|
37
|
+
@ApiProperty({ description: 'ID do tenant', example: 'tenant1' })
|
|
38
|
+
@IsString()
|
|
39
|
+
@MinLength(1, { message: 'tenant não pode ser vazio' })
|
|
40
|
+
@MaxLength(255)
|
|
41
|
+
tenant: string;
|
|
42
|
+
|
|
43
|
+
@ApiProperty({ description: 'E-mail do usuário', example: 'usuario@empresa.com' })
|
|
44
|
+
@IsString()
|
|
45
|
+
@MinLength(1, { message: 'email não pode ser vazio' })
|
|
46
|
+
@MaxLength(255)
|
|
47
|
+
email: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export class ConfirmPasswordResetPayload {
|
|
51
|
+
@ApiProperty({ description: 'ID do tenant', example: 'tenant1' })
|
|
52
|
+
@IsString()
|
|
53
|
+
@MinLength(1, { message: 'tenant não pode ser vazio' })
|
|
54
|
+
@MaxLength(255)
|
|
55
|
+
tenant: string;
|
|
56
|
+
|
|
57
|
+
@ApiProperty({ description: 'Token de verificação para reset de senha', example: 'a3b5f3c1...' })
|
|
58
|
+
@IsString()
|
|
59
|
+
@MinLength(1, { message: 'verify_token não pode ser vazio' })
|
|
60
|
+
@MaxLength(255)
|
|
61
|
+
verify_token: string;
|
|
62
|
+
|
|
63
|
+
@ApiProperty({ description: 'Nova senha do usuário', example: 'senha123' })
|
|
64
|
+
@IsString()
|
|
65
|
+
@MinLength(6, { message: 'password deve ter no mínimo 6 caracteres' })
|
|
66
|
+
@MaxLength(255)
|
|
67
|
+
password: string;
|
|
34
68
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
|
|
3
|
+
export class AuthLoginResponseDto {
|
|
4
|
+
@ApiProperty({ description: 'Token de acesso JWT' })
|
|
5
|
+
access_token: string;
|
|
6
|
+
|
|
7
|
+
@ApiProperty({ description: 'Token de refresh JWT' })
|
|
8
|
+
refresh_token: string;
|
|
9
|
+
|
|
10
|
+
@ApiProperty({
|
|
11
|
+
description: 'Indica se o usuário deve alterar a senha no primeiro acesso',
|
|
12
|
+
example: true,
|
|
13
|
+
})
|
|
14
|
+
force_change_password: boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
import { IsString, MaxLength, MinLength } from 'class-validator';
|
|
3
|
+
import { MatchField } from './match-field.decorator';
|
|
4
|
+
|
|
5
|
+
export class ConfirmPasswordResetDto {
|
|
6
|
+
@ApiProperty({
|
|
7
|
+
description: 'Token de verificação recebido para troca de senha',
|
|
8
|
+
example: 'a3b5f3c1ef65...',
|
|
9
|
+
})
|
|
10
|
+
@IsString()
|
|
11
|
+
@MinLength(1, { message: 'verify_token não pode ser vazio' })
|
|
12
|
+
@MaxLength(255)
|
|
13
|
+
verify_token: string;
|
|
14
|
+
|
|
15
|
+
@ApiProperty({ description: 'Nova senha', example: 'senha123', minLength: 6 })
|
|
16
|
+
@IsString()
|
|
17
|
+
@MinLength(6, { message: 'password deve ter no mínimo 6 caracteres' })
|
|
18
|
+
@MaxLength(255)
|
|
19
|
+
password: string;
|
|
20
|
+
|
|
21
|
+
@ApiProperty({
|
|
22
|
+
description: 'Confirmação da nova senha',
|
|
23
|
+
example: 'senha123',
|
|
24
|
+
minLength: 6,
|
|
25
|
+
})
|
|
26
|
+
@IsString()
|
|
27
|
+
@MinLength(6, { message: 'password_confirmation deve ter no mínimo 6 caracteres' })
|
|
28
|
+
@MaxLength(255)
|
|
29
|
+
@MatchField('password', {
|
|
30
|
+
message: 'password_confirmation deve ser igual a password',
|
|
31
|
+
})
|
|
32
|
+
password_confirmation: string;
|
|
33
|
+
}
|
package/src/auth/index.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export { LoginDto } from './login.dto';
|
|
2
|
-
export
|
|
2
|
+
export {
|
|
3
3
|
LoginPayload,
|
|
4
4
|
ValidatePayload,
|
|
5
5
|
RefreshPayload,
|
|
6
|
+
RequestPasswordResetPayload,
|
|
7
|
+
ConfirmPasswordResetPayload,
|
|
6
8
|
} from './auth-kafka.payloads';
|
|
7
9
|
export { RefreshTokenDto } from './refresh-token.dto';
|
|
10
|
+
export { RequestPasswordResetDto } from './request-password-reset.dto';
|
|
11
|
+
export { ConfirmPasswordResetDto } from './confirm-password-reset.dto';
|
|
12
|
+
export { AuthLoginResponseDto } from './auth-login-response.dto';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
registerDecorator,
|
|
3
|
+
ValidationArguments,
|
|
4
|
+
ValidationOptions,
|
|
5
|
+
} from 'class-validator';
|
|
6
|
+
|
|
7
|
+
export function MatchField(
|
|
8
|
+
sourceField: string,
|
|
9
|
+
validationOptions?: ValidationOptions,
|
|
10
|
+
) {
|
|
11
|
+
return function (object: object, propertyName: string) {
|
|
12
|
+
registerDecorator({
|
|
13
|
+
name: 'matchField',
|
|
14
|
+
target: object.constructor,
|
|
15
|
+
propertyName,
|
|
16
|
+
constraints: [sourceField],
|
|
17
|
+
options: validationOptions,
|
|
18
|
+
validator: {
|
|
19
|
+
validate(value: unknown, args: ValidationArguments) {
|
|
20
|
+
const [field] = args.constraints as [string];
|
|
21
|
+
return value === (args.object as Record<string, unknown>)[field];
|
|
22
|
+
},
|
|
23
|
+
defaultMessage(args: ValidationArguments) {
|
|
24
|
+
const [field] = args.constraints as [string];
|
|
25
|
+
return `${args.property} must match ${field}`;
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
import { IsEmail, IsString, MinLength } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
export class RequestPasswordResetDto {
|
|
5
|
+
@ApiProperty({ description: 'E-mail do usuário', example: 'usuario@empresa.com' })
|
|
6
|
+
@IsEmail({}, { message: 'email deve ser um e-mail válido' })
|
|
7
|
+
@IsString()
|
|
8
|
+
@MinLength(1, { message: 'email não pode ser vazio' })
|
|
9
|
+
email: string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
import { IsString, MaxLength, MinLength } from 'class-validator';
|
|
3
|
+
import { MatchField } from '../auth/match-field.decorator';
|
|
4
|
+
|
|
5
|
+
export class ChangeForcePasswordDto {
|
|
6
|
+
@ApiProperty({
|
|
7
|
+
description: 'Senha atual recebida por e-mail no primeiro acesso',
|
|
8
|
+
example: 'Tmp#4A8x!pQ',
|
|
9
|
+
minLength: 1,
|
|
10
|
+
})
|
|
11
|
+
@IsString()
|
|
12
|
+
@MinLength(1, { message: 'current_password não pode ser vazio' })
|
|
13
|
+
@MaxLength(255)
|
|
14
|
+
current_password: string;
|
|
15
|
+
|
|
16
|
+
@ApiProperty({
|
|
17
|
+
description: 'Nova senha a ser definida pelo usuário',
|
|
18
|
+
example: 'MinhaSenha@2026',
|
|
19
|
+
minLength: 6,
|
|
20
|
+
})
|
|
21
|
+
@IsString()
|
|
22
|
+
@MinLength(6, { message: 'new_password deve ter no mínimo 6 caracteres' })
|
|
23
|
+
@MaxLength(255)
|
|
24
|
+
new_password: string;
|
|
25
|
+
|
|
26
|
+
@ApiProperty({
|
|
27
|
+
description: 'Confirmação da nova senha',
|
|
28
|
+
example: 'MinhaSenha@2026',
|
|
29
|
+
minLength: 6,
|
|
30
|
+
})
|
|
31
|
+
@IsString()
|
|
32
|
+
@MinLength(6, {
|
|
33
|
+
message: 'new_password_confirmation deve ter no mínimo 6 caracteres',
|
|
34
|
+
})
|
|
35
|
+
@MaxLength(255)
|
|
36
|
+
@MatchField('new_password', {
|
|
37
|
+
message: 'new_password_confirmation deve ser igual a new_password',
|
|
38
|
+
})
|
|
39
|
+
new_password_confirmation: string;
|
|
40
|
+
}
|
|
@@ -36,16 +36,6 @@ export class CreateUserDto {
|
|
|
36
36
|
@MaxLength(255)
|
|
37
37
|
email: string;
|
|
38
38
|
|
|
39
|
-
@ApiProperty({
|
|
40
|
-
description: 'Senha (será hasheada com bcrypt)',
|
|
41
|
-
example: 'senha123',
|
|
42
|
-
minLength: 6,
|
|
43
|
-
})
|
|
44
|
-
@IsString()
|
|
45
|
-
@MinLength(6, { message: 'password deve ter no mínimo 6 caracteres' })
|
|
46
|
-
@MaxLength(255)
|
|
47
|
-
password: string;
|
|
48
|
-
|
|
49
39
|
@ApiProperty({
|
|
50
40
|
description: 'Papel do usuário. Apenas atendente ou profissional de saúde; administrador não pode criar outros administradores.',
|
|
51
41
|
enum: CREATABLE_USER_ROLES,
|
package/src/users/index.ts
CHANGED
|
@@ -11,7 +11,9 @@ export {
|
|
|
11
11
|
type AllUserRole,
|
|
12
12
|
} from './update-user-by-admin.dto';
|
|
13
13
|
export { UpdatedUserDto } from './updated-user.dto';
|
|
14
|
+
export { ChangeForcePasswordDto } from './change-force-password.dto';
|
|
14
15
|
export type {
|
|
15
16
|
AuthUpdateSelfPayload,
|
|
16
17
|
AuthUpdateUserAdminPayload,
|
|
18
|
+
AuthChangeForcePasswordPayload,
|
|
17
19
|
} from './user-update-kafka-payloads';
|
|
@@ -22,3 +22,13 @@ export interface AuthUpdateUserAdminPayload {
|
|
|
22
22
|
password?: string;
|
|
23
23
|
role?: 'administrator' | 'attendant' | 'health_professional';
|
|
24
24
|
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Kafka payload for auth.change_force_password (tychat-api → tychat-auth-service).
|
|
28
|
+
*/
|
|
29
|
+
export interface AuthChangeForcePasswordPayload {
|
|
30
|
+
tenant?: string;
|
|
31
|
+
userId: string;
|
|
32
|
+
current_password: string;
|
|
33
|
+
new_password: string;
|
|
34
|
+
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ValidationArguments, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
-
/** Ensures at least one of name, email, or password is provided for PATCH-style updates. */
|
|
3
|
-
export declare class AtLeastOneUserUpdateFieldConstraint implements ValidatorConstraintInterface {
|
|
4
|
-
validate(_: unknown, args: ValidationArguments): boolean;
|
|
5
|
-
defaultMessage(): string;
|
|
6
|
-
}
|
|
7
|
-
/** Same as self-update, plus optional role (for admin PATCH). */
|
|
8
|
-
export declare class AtLeastOneAdminUpdateFieldConstraint implements ValidatorConstraintInterface {
|
|
9
|
-
validate(_: unknown, args: ValidationArguments): boolean;
|
|
10
|
-
defaultMessage(): string;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=user-update-constraints.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-update-constraints.d.ts","sourceRoot":"","sources":["../../src/users/user-update-constraints.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEnB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAEzB,4FAA4F;AAC5F,qBACa,mCAAoC,YAAW,4BAA4B;IACtF,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB;IAQ9C,cAAc;CAGf;AAED,iEAAiE;AACjE,qBACa,oCAAqC,YAAW,4BAA4B;IACvF,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB;IAc9C,cAAc;CAGf"}
|
|
@@ -1,45 +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.AtLeastOneAdminUpdateFieldConstraint = exports.AtLeastOneUserUpdateFieldConstraint = void 0;
|
|
10
|
-
const class_validator_1 = require("class-validator");
|
|
11
|
-
/** Ensures at least one of name, email, or password is provided for PATCH-style updates. */
|
|
12
|
-
let AtLeastOneUserUpdateFieldConstraint = class AtLeastOneUserUpdateFieldConstraint {
|
|
13
|
-
validate(_, args) {
|
|
14
|
-
const o = args.object;
|
|
15
|
-
const hasName = o.name != null && String(o.name).trim() !== '';
|
|
16
|
-
const hasEmail = o.email != null && String(o.email).trim() !== '';
|
|
17
|
-
const hasPassword = o.password != null && String(o.password).length > 0;
|
|
18
|
-
return hasName || hasEmail || hasPassword;
|
|
19
|
-
}
|
|
20
|
-
defaultMessage() {
|
|
21
|
-
return 'Provide at least one of name, email, or password';
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
exports.AtLeastOneUserUpdateFieldConstraint = AtLeastOneUserUpdateFieldConstraint;
|
|
25
|
-
exports.AtLeastOneUserUpdateFieldConstraint = AtLeastOneUserUpdateFieldConstraint = __decorate([
|
|
26
|
-
(0, class_validator_1.ValidatorConstraint)({ name: 'atLeastOneUserUpdateField', async: false })
|
|
27
|
-
], AtLeastOneUserUpdateFieldConstraint);
|
|
28
|
-
/** Same as self-update, plus optional role (for admin PATCH). */
|
|
29
|
-
let AtLeastOneAdminUpdateFieldConstraint = class AtLeastOneAdminUpdateFieldConstraint {
|
|
30
|
-
validate(_, args) {
|
|
31
|
-
const o = args.object;
|
|
32
|
-
const hasName = o.name != null && String(o.name).trim() !== '';
|
|
33
|
-
const hasEmail = o.email != null && String(o.email).trim() !== '';
|
|
34
|
-
const hasPassword = o.password != null && String(o.password).length > 0;
|
|
35
|
-
const hasRole = o.role != null && String(o.role).trim() !== '';
|
|
36
|
-
return hasName || hasEmail || hasPassword || hasRole;
|
|
37
|
-
}
|
|
38
|
-
defaultMessage() {
|
|
39
|
-
return 'Provide at least one of name, email, password, or role';
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
exports.AtLeastOneAdminUpdateFieldConstraint = AtLeastOneAdminUpdateFieldConstraint;
|
|
43
|
-
exports.AtLeastOneAdminUpdateFieldConstraint = AtLeastOneAdminUpdateFieldConstraint = __decorate([
|
|
44
|
-
(0, class_validator_1.ValidatorConstraint)({ name: 'atLeastOneAdminUpdateField', async: false })
|
|
45
|
-
], AtLeastOneAdminUpdateFieldConstraint);
|