@fiado/type-kit 3.454.0 → 3.455.0
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/_test_/unit/platformRbac/dtos/levelEntityAdminDtos.test.ts +60 -0
- package/_test_/unit/platformRbac/dtos/tenantRoleAdminDtos.test.ts +64 -0
- package/_test_/unit/platformRbac/dtos/tenantUserAdminDtos.test.ts +128 -0
- package/bin/platformRbac/dtos/AssignTenantRoleRequest.d.ts +13 -0
- package/bin/platformRbac/dtos/AssignTenantRoleRequest.js +57 -0
- package/bin/platformRbac/dtos/AssignTenantRoleResponse.d.ts +4 -0
- package/bin/platformRbac/dtos/AssignTenantRoleResponse.js +2 -0
- package/bin/platformRbac/dtos/CreateTenantUserResponse.d.ts +8 -0
- package/bin/platformRbac/dtos/DeleteLevelEntityRequest.d.ts +4 -0
- package/bin/platformRbac/dtos/DeleteLevelEntityRequest.js +24 -0
- package/bin/platformRbac/dtos/DeleteLevelEntityResponse.d.ts +4 -0
- package/bin/platformRbac/dtos/DeleteLevelEntityResponse.js +2 -0
- package/bin/platformRbac/dtos/DeleteTenantUserRequest.d.ts +4 -0
- package/bin/platformRbac/dtos/DeleteTenantUserRequest.js +24 -0
- package/bin/platformRbac/dtos/DisableTenantUserRequest.d.ts +7 -0
- package/bin/platformRbac/dtos/DisableTenantUserRequest.js +27 -0
- package/bin/platformRbac/dtos/EnableTenantUserRequest.d.ts +7 -0
- package/bin/platformRbac/dtos/EnableTenantUserRequest.js +27 -0
- package/bin/platformRbac/dtos/GetTenantUserResponse.d.ts +10 -0
- package/bin/platformRbac/dtos/GetTenantUserResponse.js +2 -0
- package/bin/platformRbac/dtos/LevelEntityResponse.d.ts +14 -0
- package/bin/platformRbac/dtos/LevelEntityResponse.js +2 -0
- package/bin/platformRbac/dtos/ListLevelEntitiesResponse.d.ts +8 -0
- package/bin/platformRbac/dtos/ListLevelEntitiesResponse.js +2 -0
- package/bin/platformRbac/dtos/ListTenantRolesResponse.d.ts +5 -0
- package/bin/platformRbac/dtos/ListTenantRolesResponse.js +2 -0
- package/bin/platformRbac/dtos/ListTenantUsersResponse.d.ts +8 -0
- package/bin/platformRbac/dtos/ListTenantUsersResponse.js +2 -0
- package/bin/platformRbac/dtos/ResetTenantUserMfaRequest.d.ts +7 -0
- package/bin/platformRbac/dtos/ResetTenantUserMfaRequest.js +27 -0
- package/bin/platformRbac/dtos/ResetTenantUserPasswordRequest.d.ts +7 -0
- package/bin/platformRbac/dtos/ResetTenantUserPasswordRequest.js +27 -0
- package/bin/platformRbac/dtos/ResetTenantUserPasswordResponse.d.ts +7 -0
- package/bin/platformRbac/dtos/ResetTenantUserPasswordResponse.js +2 -0
- package/bin/platformRbac/dtos/RevokeTenantRoleRequest.d.ts +5 -0
- package/bin/platformRbac/dtos/RevokeTenantRoleRequest.js +32 -0
- package/bin/platformRbac/dtos/RevokeTenantRoleResponse.d.ts +4 -0
- package/bin/platformRbac/dtos/RevokeTenantRoleResponse.js +2 -0
- package/bin/platformRbac/dtos/TenantRoleResponse.d.ts +20 -0
- package/bin/platformRbac/dtos/TenantRoleResponse.js +2 -0
- package/bin/platformRbac/dtos/TenantUserAckResponse.d.ts +7 -0
- package/bin/platformRbac/dtos/TenantUserAckResponse.js +2 -0
- package/bin/platformRbac/dtos/TenantUserAssignmentResponse.d.ts +14 -0
- package/bin/platformRbac/dtos/TenantUserAssignmentResponse.js +2 -0
- package/bin/platformRbac/dtos/TenantUserListItemResponse.d.ts +9 -0
- package/bin/platformRbac/dtos/TenantUserListItemResponse.js +2 -0
- package/bin/platformRbac/dtos/TenantUserResponse.d.ts +29 -0
- package/bin/platformRbac/dtos/TenantUserResponse.js +2 -0
- package/bin/platformRbac/dtos/UpdateLevelEntityRequest.d.ts +8 -0
- package/bin/platformRbac/dtos/UpdateLevelEntityRequest.js +35 -0
- package/bin/platformRbac/dtos/UpdateTenantUserRequest.d.ts +8 -0
- package/bin/platformRbac/dtos/UpdateTenantUserRequest.js +35 -0
- package/bin/platformRbac/index.d.ts +25 -1
- package/bin/platformRbac/index.js +11 -1
- package/package.json +1 -1
- package/src/platformRbac/dtos/AssignTenantRoleRequest.ts +16 -0
- package/src/platformRbac/dtos/AssignTenantRoleResponse.ts +4 -0
- package/src/platformRbac/dtos/CreateTenantUserResponse.ts +13 -0
- package/src/platformRbac/dtos/DeleteLevelEntityRequest.ts +7 -0
- package/src/platformRbac/dtos/DeleteLevelEntityResponse.ts +4 -0
- package/src/platformRbac/dtos/DeleteTenantUserRequest.ts +7 -0
- package/src/platformRbac/dtos/DisableTenantUserRequest.ts +10 -0
- package/src/platformRbac/dtos/EnableTenantUserRequest.ts +10 -0
- package/src/platformRbac/dtos/GetTenantUserResponse.ts +11 -0
- package/src/platformRbac/dtos/LevelEntityResponse.ts +14 -0
- package/src/platformRbac/dtos/ListLevelEntitiesResponse.ts +9 -0
- package/src/platformRbac/dtos/ListTenantRolesResponse.ts +6 -0
- package/src/platformRbac/dtos/ListTenantUsersResponse.ts +9 -0
- package/src/platformRbac/dtos/ResetTenantUserMfaRequest.ts +10 -0
- package/src/platformRbac/dtos/ResetTenantUserPasswordRequest.ts +10 -0
- package/src/platformRbac/dtos/ResetTenantUserPasswordResponse.ts +7 -0
- package/src/platformRbac/dtos/RevokeTenantRoleRequest.ts +10 -0
- package/src/platformRbac/dtos/RevokeTenantRoleResponse.ts +4 -0
- package/src/platformRbac/dtos/TenantRoleResponse.ts +21 -0
- package/src/platformRbac/dtos/TenantUserAckResponse.ts +7 -0
- package/src/platformRbac/dtos/TenantUserAssignmentResponse.ts +17 -0
- package/src/platformRbac/dtos/TenantUserListItemResponse.ts +10 -0
- package/src/platformRbac/dtos/TenantUserResponse.ts +30 -0
- package/src/platformRbac/dtos/UpdateLevelEntityRequest.ts +11 -0
- package/src/platformRbac/dtos/UpdateTenantUserRequest.ts +11 -0
- package/src/platformRbac/index.ts +30 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { UpdateLevelEntityRequest } from '../../../../src/platformRbac/dtos/UpdateLevelEntityRequest';
|
|
5
|
+
import { DeleteLevelEntityRequest } from '../../../../src/platformRbac/dtos/DeleteLevelEntityRequest';
|
|
6
|
+
|
|
7
|
+
describe('UpdateLevelEntityRequest', () => {
|
|
8
|
+
it('valida happy path con displayName y actedBy', async () => {
|
|
9
|
+
const dto = plainToInstance(UpdateLevelEntityRequest, {
|
|
10
|
+
displayName: 'Zona Norte',
|
|
11
|
+
actedBy: 'admin-sub-1',
|
|
12
|
+
});
|
|
13
|
+
const errors = await validate(dto);
|
|
14
|
+
expect(errors).toEqual([]);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('acepta sin displayName (solo actedBy)', async () => {
|
|
18
|
+
const dto = plainToInstance(UpdateLevelEntityRequest, { actedBy: 'admin-sub-1' });
|
|
19
|
+
const errors = await validate(dto);
|
|
20
|
+
expect(errors).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('falla si falta actedBy', async () => {
|
|
24
|
+
const dto = plainToInstance(UpdateLevelEntityRequest, { displayName: 'Zona Norte' });
|
|
25
|
+
const errors = await validate(dto);
|
|
26
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('rechaza un displayName de 121 caracteres', async () => {
|
|
30
|
+
const dto = plainToInstance(UpdateLevelEntityRequest, {
|
|
31
|
+
displayName: 'x'.repeat(121),
|
|
32
|
+
actedBy: 'admin-sub-1',
|
|
33
|
+
});
|
|
34
|
+
const errors = await validate(dto);
|
|
35
|
+
expect(errors.some(e => e.property === 'displayName')).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('acepta un displayName de 120 caracteres', async () => {
|
|
39
|
+
const dto = plainToInstance(UpdateLevelEntityRequest, {
|
|
40
|
+
displayName: 'x'.repeat(120),
|
|
41
|
+
actedBy: 'admin-sub-1',
|
|
42
|
+
});
|
|
43
|
+
const errors = await validate(dto);
|
|
44
|
+
expect(errors).toEqual([]);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe('DeleteLevelEntityRequest', () => {
|
|
49
|
+
it('valida happy path con actedBy', async () => {
|
|
50
|
+
const dto = plainToInstance(DeleteLevelEntityRequest, { actedBy: 'admin-sub-1' });
|
|
51
|
+
const errors = await validate(dto);
|
|
52
|
+
expect(errors).toEqual([]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('falla si falta actedBy', async () => {
|
|
56
|
+
const dto = plainToInstance(DeleteLevelEntityRequest, {});
|
|
57
|
+
const errors = await validate(dto);
|
|
58
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { AssignTenantRoleRequest } from '../../../../src/platformRbac/dtos/AssignTenantRoleRequest';
|
|
5
|
+
import { RevokeTenantRoleRequest } from '../../../../src/platformRbac/dtos/RevokeTenantRoleRequest';
|
|
6
|
+
import { PermissionScope } from '../../../../src/platformRbac/enums/PermissionScope';
|
|
7
|
+
|
|
8
|
+
describe('AssignTenantRoleRequest', () => {
|
|
9
|
+
const base = {
|
|
10
|
+
cognitoSub: 'user-sub-1',
|
|
11
|
+
roleId: 'ROLE_AGENT',
|
|
12
|
+
scope: PermissionScope.LEVEL_3,
|
|
13
|
+
scopeRef: 'ST-001',
|
|
14
|
+
actedBy: 'admin-sub-1',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
it('valida happy path con expiresAt', async () => {
|
|
18
|
+
const dto = plainToInstance(AssignTenantRoleRequest, { ...base, expiresAt: 1790000000000 });
|
|
19
|
+
const errors = await validate(dto);
|
|
20
|
+
expect(errors).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('acepta sin expiresAt (asignación permanente)', async () => {
|
|
24
|
+
const dto = plainToInstance(AssignTenantRoleRequest, base);
|
|
25
|
+
const errors = await validate(dto);
|
|
26
|
+
expect(errors).toEqual([]);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('falla si falta actedBy', async () => {
|
|
30
|
+
const { actedBy: _actedBy, ...withoutActedBy } = base;
|
|
31
|
+
const dto = plainToInstance(AssignTenantRoleRequest, withoutActedBy);
|
|
32
|
+
const errors = await validate(dto);
|
|
33
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('falla con un scope que no está en el enum', async () => {
|
|
37
|
+
const dto = plainToInstance(AssignTenantRoleRequest, { ...base, scope: 'STORE' });
|
|
38
|
+
const errors = await validate(dto);
|
|
39
|
+
expect(errors.some(e => e.property === 'scope')).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
describe('RevokeTenantRoleRequest', () => {
|
|
44
|
+
it('valida happy path con cognitoSub y actedBy', async () => {
|
|
45
|
+
const dto = plainToInstance(RevokeTenantRoleRequest, {
|
|
46
|
+
cognitoSub: 'user-sub-1',
|
|
47
|
+
actedBy: 'admin-sub-1',
|
|
48
|
+
});
|
|
49
|
+
const errors = await validate(dto);
|
|
50
|
+
expect(errors).toEqual([]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('falla si falta actedBy', async () => {
|
|
54
|
+
const dto = plainToInstance(RevokeTenantRoleRequest, { cognitoSub: 'user-sub-1' });
|
|
55
|
+
const errors = await validate(dto);
|
|
56
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('falla si falta cognitoSub', async () => {
|
|
60
|
+
const dto = plainToInstance(RevokeTenantRoleRequest, { actedBy: 'admin-sub-1' });
|
|
61
|
+
const errors = await validate(dto);
|
|
62
|
+
expect(errors.some(e => e.property === 'cognitoSub')).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { UpdateTenantUserRequest } from '../../../../src/platformRbac/dtos/UpdateTenantUserRequest';
|
|
5
|
+
import { DeleteTenantUserRequest } from '../../../../src/platformRbac/dtos/DeleteTenantUserRequest';
|
|
6
|
+
import { DisableTenantUserRequest } from '../../../../src/platformRbac/dtos/DisableTenantUserRequest';
|
|
7
|
+
import { EnableTenantUserRequest } from '../../../../src/platformRbac/dtos/EnableTenantUserRequest';
|
|
8
|
+
import { ResetTenantUserPasswordRequest } from '../../../../src/platformRbac/dtos/ResetTenantUserPasswordRequest';
|
|
9
|
+
import { ResetTenantUserMfaRequest } from '../../../../src/platformRbac/dtos/ResetTenantUserMfaRequest';
|
|
10
|
+
import type { CreateTenantUserResponse } from '../../../../src/platformRbac/dtos/CreateTenantUserResponse';
|
|
11
|
+
import type { TenantUserResponse } from '../../../../src/platformRbac/dtos/TenantUserResponse';
|
|
12
|
+
import type { TenantUserListItemResponse } from '../../../../src/platformRbac/dtos/TenantUserListItemResponse';
|
|
13
|
+
|
|
14
|
+
describe('UpdateTenantUserRequest', () => {
|
|
15
|
+
it('valida happy path con displayName y actedBy', async () => {
|
|
16
|
+
const dto = plainToInstance(UpdateTenantUserRequest, {
|
|
17
|
+
displayName: 'Ana Pérez',
|
|
18
|
+
actedBy: 'admin-sub-1',
|
|
19
|
+
});
|
|
20
|
+
const errors = await validate(dto);
|
|
21
|
+
expect(errors).toEqual([]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('acepta sin displayName (solo actedBy)', async () => {
|
|
25
|
+
const dto = plainToInstance(UpdateTenantUserRequest, { actedBy: 'admin-sub-1' });
|
|
26
|
+
const errors = await validate(dto);
|
|
27
|
+
expect(errors).toEqual([]);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('falla si falta actedBy', async () => {
|
|
31
|
+
const dto = plainToInstance(UpdateTenantUserRequest, { displayName: 'Ana Pérez' });
|
|
32
|
+
const errors = await validate(dto);
|
|
33
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('rechaza un displayName de 121 caracteres', async () => {
|
|
37
|
+
const dto = plainToInstance(UpdateTenantUserRequest, {
|
|
38
|
+
displayName: 'x'.repeat(121),
|
|
39
|
+
actedBy: 'admin-sub-1',
|
|
40
|
+
});
|
|
41
|
+
const errors = await validate(dto);
|
|
42
|
+
expect(errors.some(e => e.property === 'displayName')).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('acepta un displayName de 120 caracteres', async () => {
|
|
46
|
+
const dto = plainToInstance(UpdateTenantUserRequest, {
|
|
47
|
+
displayName: 'x'.repeat(120),
|
|
48
|
+
actedBy: 'admin-sub-1',
|
|
49
|
+
});
|
|
50
|
+
const errors = await validate(dto);
|
|
51
|
+
expect(errors).toEqual([]);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe.each([
|
|
56
|
+
['DeleteTenantUserRequest', DeleteTenantUserRequest],
|
|
57
|
+
['DisableTenantUserRequest', DisableTenantUserRequest],
|
|
58
|
+
['EnableTenantUserRequest', EnableTenantUserRequest],
|
|
59
|
+
['ResetTenantUserPasswordRequest', ResetTenantUserPasswordRequest],
|
|
60
|
+
['ResetTenantUserMfaRequest', ResetTenantUserMfaRequest],
|
|
61
|
+
] as const)('%s', (_name, RequestClass) => {
|
|
62
|
+
it('valida happy path con actedBy', async () => {
|
|
63
|
+
const dto = plainToInstance(RequestClass, { actedBy: 'admin-sub-1' });
|
|
64
|
+
const errors = await validate(dto);
|
|
65
|
+
expect(errors).toEqual([]);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('falla si falta actedBy', async () => {
|
|
69
|
+
const dto = plainToInstance(RequestClass, {});
|
|
70
|
+
const errors = await validate(dto);
|
|
71
|
+
expect(errors.some(e => e.property === 'actedBy')).toBe(true);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe('CreateTenantUserResponse', () => {
|
|
76
|
+
it('un alta nueva trae la contraseña temporal', () => {
|
|
77
|
+
const response: CreateTenantUserResponse = {
|
|
78
|
+
cognitoSub: 'sub-1',
|
|
79
|
+
email: 'agente@somosfiado.com',
|
|
80
|
+
status: 'INVITED',
|
|
81
|
+
temporaryPassword: 'Temporal123!',
|
|
82
|
+
rolesAssigned: ['agent_admin'],
|
|
83
|
+
outcome: 'CREATED',
|
|
84
|
+
};
|
|
85
|
+
expect(response.temporaryPassword).toBeDefined();
|
|
86
|
+
expect(response.outcome).toBe('CREATED');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('una adopción compila sin contraseña temporal ni correo', () => {
|
|
90
|
+
const response: CreateTenantUserResponse = {
|
|
91
|
+
cognitoSub: 'sub-2',
|
|
92
|
+
status: 'ACTIVE',
|
|
93
|
+
rolesAssigned: ['agent_admin'],
|
|
94
|
+
outcome: 'ADOPTED',
|
|
95
|
+
};
|
|
96
|
+
expect(response.temporaryPassword).toBeUndefined();
|
|
97
|
+
expect(response.outcome).toBe('ADOPTED');
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('TenantUserResponse', () => {
|
|
102
|
+
it('un usuario de un tenant phone-primary compila sin correo', () => {
|
|
103
|
+
const response: TenantUserResponse = {
|
|
104
|
+
cognitoSub: 'sub-3',
|
|
105
|
+
displayName: 'Ana Pérez',
|
|
106
|
+
phone: '+525512345678',
|
|
107
|
+
tenantId: 'tenant-1',
|
|
108
|
+
status: 'ACTIVE',
|
|
109
|
+
source: 'admin_create',
|
|
110
|
+
createdAt: 1_700_000_000_000,
|
|
111
|
+
updatedAt: 1_700_000_000_000,
|
|
112
|
+
};
|
|
113
|
+
expect(response.email).toBeUndefined();
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('el item del listado hereda el correo opcional', () => {
|
|
117
|
+
const response: TenantUserListItemResponse = {
|
|
118
|
+
cognitoSub: 'sub-4',
|
|
119
|
+
displayName: 'Luis Ramírez',
|
|
120
|
+
tenantId: 'tenant-1',
|
|
121
|
+
status: 'ACTIVE',
|
|
122
|
+
createdAt: 1_700_000_000_000,
|
|
123
|
+
updatedAt: 1_700_000_000_000,
|
|
124
|
+
roles: ['Agente'],
|
|
125
|
+
};
|
|
126
|
+
expect(response.email).toBeUndefined();
|
|
127
|
+
});
|
|
128
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PermissionScope } from '../enums/PermissionScope';
|
|
2
|
+
/**
|
|
3
|
+
* Body del POST que asigna un rol a un usuario en un scope. Un rol y un solo `scopeRef` por
|
|
4
|
+
* llamada; `expiresAt` en epoch ms deja la asignación temporal.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AssignTenantRoleRequest {
|
|
7
|
+
cognitoSub: string;
|
|
8
|
+
roleId: string;
|
|
9
|
+
scope: PermissionScope;
|
|
10
|
+
scopeRef: string;
|
|
11
|
+
expiresAt?: number;
|
|
12
|
+
actedBy: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
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.AssignTenantRoleRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const PermissionScope_1 = require("../enums/PermissionScope");
|
|
16
|
+
/**
|
|
17
|
+
* Body del POST que asigna un rol a un usuario en un scope. Un rol y un solo `scopeRef` por
|
|
18
|
+
* llamada; `expiresAt` en epoch ms deja la asignación temporal.
|
|
19
|
+
*/
|
|
20
|
+
class AssignTenantRoleRequest {
|
|
21
|
+
}
|
|
22
|
+
exports.AssignTenantRoleRequest = AssignTenantRoleRequest;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_transformer_1.Expose)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], AssignTenantRoleRequest.prototype, "cognitoSub", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
(0, class_validator_1.IsString)(),
|
|
32
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], AssignTenantRoleRequest.prototype, "roleId", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_transformer_1.Expose)(),
|
|
37
|
+
(0, class_validator_1.IsEnum)(PermissionScope_1.PermissionScope),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], AssignTenantRoleRequest.prototype, "scope", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], AssignTenantRoleRequest.prototype, "scopeRef", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, class_transformer_1.Expose)(),
|
|
48
|
+
(0, class_validator_1.IsOptional)(),
|
|
49
|
+
(0, class_validator_1.IsNumber)(),
|
|
50
|
+
__metadata("design:type", Number)
|
|
51
|
+
], AssignTenantRoleRequest.prototype, "expiresAt", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_transformer_1.Expose)(),
|
|
54
|
+
(0, class_validator_1.IsString)(),
|
|
55
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
56
|
+
__metadata("design:type", String)
|
|
57
|
+
], AssignTenantRoleRequest.prototype, "actedBy", void 0);
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
+
import type { TenantUserStatusValue } from './TenantUserResponse';
|
|
2
|
+
/** Desenlace del alta: si el correo ya tenía usuario se lo adopta en vez de crear otro. */
|
|
3
|
+
export type TenantUserOutcomeValue = 'CREATED' | 'ADOPTED';
|
|
1
4
|
/**
|
|
2
5
|
* Respuesta del POST create-tenant-user (endpoint privado). Devuelve el cognitoSub del usuario
|
|
3
6
|
* provisionado, que retail-org guarda en el RetailUser para el match F1↔RBAC. Interface plain → type-only.
|
|
4
7
|
*/
|
|
5
8
|
export interface CreateTenantUserResponse {
|
|
6
9
|
cognitoSub: string;
|
|
10
|
+
email?: string;
|
|
11
|
+
status: TenantUserStatusValue;
|
|
12
|
+
temporaryPassword?: string;
|
|
13
|
+
rolesAssigned: string[];
|
|
14
|
+
outcome: TenantUserOutcomeValue;
|
|
7
15
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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.DeleteLevelEntityRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/** Body del DELETE de un grupo. `tenantId`, `level` y el id del grupo viajan en el path. */
|
|
16
|
+
class DeleteLevelEntityRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.DeleteLevelEntityRequest = DeleteLevelEntityRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_transformer_1.Expose)(),
|
|
21
|
+
(0, class_validator_1.IsString)(),
|
|
22
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], DeleteLevelEntityRequest.prototype, "actedBy", void 0);
|
|
@@ -0,0 +1,24 @@
|
|
|
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.DeleteTenantUserRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/** Body del DELETE de un usuario. `tenantId` y `cognitoSub` viajan en el path. */
|
|
16
|
+
class DeleteTenantUserRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.DeleteTenantUserRequest = DeleteTenantUserRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_transformer_1.Expose)(),
|
|
21
|
+
(0, class_validator_1.IsString)(),
|
|
22
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], DeleteTenantUserRequest.prototype, "actedBy", void 0);
|
|
@@ -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.DisableTenantUserRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* Body del endpoint que suspende a un usuario. `actedBy` es el cognitoSub de quien accionó en el
|
|
17
|
+
* backoffice — es lo único que queda en la auditoría.
|
|
18
|
+
*/
|
|
19
|
+
class DisableTenantUserRequest {
|
|
20
|
+
}
|
|
21
|
+
exports.DisableTenantUserRequest = DisableTenantUserRequest;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Expose)(),
|
|
24
|
+
(0, class_validator_1.IsString)(),
|
|
25
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], DisableTenantUserRequest.prototype, "actedBy", void 0);
|
|
@@ -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.EnableTenantUserRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* Body del endpoint que reactiva a un usuario suspendido. `actedBy` es el cognitoSub de quien
|
|
17
|
+
* accionó en el backoffice — es lo único que queda en la auditoría.
|
|
18
|
+
*/
|
|
19
|
+
class EnableTenantUserRequest {
|
|
20
|
+
}
|
|
21
|
+
exports.EnableTenantUserRequest = EnableTenantUserRequest;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Expose)(),
|
|
24
|
+
(0, class_validator_1.IsString)(),
|
|
25
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], EnableTenantUserRequest.prototype, "actedBy", void 0);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TenantUserAssignmentResponse } from './TenantUserAssignmentResponse';
|
|
2
|
+
import type { TenantUserResponse } from './TenantUserResponse';
|
|
3
|
+
/**
|
|
4
|
+
* Respuesta del detalle de un usuario: además de sus datos, trae los nombres de sus roles y sus
|
|
5
|
+
* asignaciones vigentes con el `assignmentId` de cada una.
|
|
6
|
+
*/
|
|
7
|
+
export interface GetTenantUserResponse extends TenantUserResponse {
|
|
8
|
+
roles: string[];
|
|
9
|
+
roleAssignments: TenantUserAssignmentResponse[];
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proyección pública de una entidad de nivel (grupo) del RBAC: la devuelven el listado, el detalle
|
|
3
|
+
* y la actualización de grupos. Convive con CreateLevelEntityResponse, que ya es contrato publicado.
|
|
4
|
+
*/
|
|
5
|
+
export interface LevelEntityResponse {
|
|
6
|
+
id: string;
|
|
7
|
+
displayName: string;
|
|
8
|
+
parentId?: string;
|
|
9
|
+
level: string;
|
|
10
|
+
createdAt: number;
|
|
11
|
+
updatedAt: number;
|
|
12
|
+
createdBy?: string;
|
|
13
|
+
updatedBy?: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LevelEntityResponse } from './LevelEntityResponse';
|
|
2
|
+
/**
|
|
3
|
+
* Respuesta del listado de grupos de un nivel. El GET acepta `parentId` opcional en la query para
|
|
4
|
+
* traer solo los hijos de un grupo.
|
|
5
|
+
*/
|
|
6
|
+
export interface ListLevelEntitiesResponse {
|
|
7
|
+
items: LevelEntityResponse[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TenantUserListItemResponse } from './TenantUserListItemResponse';
|
|
2
|
+
/**
|
|
3
|
+
* Respuesta del listado de usuarios del tenant. El GET acepta `email` opcional en la query para
|
|
4
|
+
* encontrar una cuenta que ya existía y adoptarla.
|
|
5
|
+
*/
|
|
6
|
+
export interface ListTenantUsersResponse {
|
|
7
|
+
items: TenantUserListItemResponse[];
|
|
8
|
+
}
|
|
@@ -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.ResetTenantUserMfaRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* Body del endpoint que resetea el MFA de un usuario. `actedBy` es el cognitoSub de quien accionó
|
|
17
|
+
* en el backoffice — es lo único que queda en la auditoría.
|
|
18
|
+
*/
|
|
19
|
+
class ResetTenantUserMfaRequest {
|
|
20
|
+
}
|
|
21
|
+
exports.ResetTenantUserMfaRequest = ResetTenantUserMfaRequest;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Expose)(),
|
|
24
|
+
(0, class_validator_1.IsString)(),
|
|
25
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], ResetTenantUserMfaRequest.prototype, "actedBy", void 0);
|
|
@@ -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.ResetTenantUserPasswordRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* Body del endpoint que resetea la contraseña de un usuario. `actedBy` es el cognitoSub de quien
|
|
17
|
+
* accionó en el backoffice — es lo único que queda en la auditoría.
|
|
18
|
+
*/
|
|
19
|
+
class ResetTenantUserPasswordRequest {
|
|
20
|
+
}
|
|
21
|
+
exports.ResetTenantUserPasswordRequest = ResetTenantUserPasswordRequest;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Expose)(),
|
|
24
|
+
(0, class_validator_1.IsString)(),
|
|
25
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
26
|
+
__metadata("design:type", String)
|
|
27
|
+
], ResetTenantUserPasswordRequest.prototype, "actedBy", void 0);
|