@fiado/type-kit 3.146.0 → 3.148.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.
@@ -9,7 +9,7 @@ describe('AuthorizeRequest', () => {
9
9
  const dto = plainToInstance(AuthorizeRequest, {
10
10
  token: 'jwt.abc.def',
11
11
  permission: 'tenant.user.create',
12
- scope: PermissionScope.RETAILER,
12
+ scope: PermissionScope.LEVEL_1,
13
13
  scopeRef: 'VL-001',
14
14
  });
15
15
  const errors = await validate(dto);
@@ -11,8 +11,8 @@ describe('UpdateTenantAutoregisterRequest', () => {
11
11
  const valid = {
12
12
  enabled: true,
13
13
  allowedRoles: [
14
- { roleId: 'role-agente', scope: 'GROUP', allowedScopeRefs: ['grp-1'] },
15
- { roleId: 'role-rrhh', scope: 'GROUP' },
14
+ { roleId: 'role-agente', scope: 'LEVEL_1', allowedScopeRefs: ['grp-1'] },
15
+ { roleId: 'role-rrhh', scope: 'LEVEL_1' },
16
16
  ],
17
17
  otpTtlSeconds: 300,
18
18
  };
@@ -66,6 +66,6 @@ describe('UpdateTenantAutoregisterRequest', () => {
66
66
  it('hidrata cada allowedRole a UpdateTenantAutoregisterAllowedRole con su scope enum', async () => {
67
67
  const dto = plainToInstance(UpdateTenantAutoregisterRequest, valid);
68
68
  expect(dto.allowedRoles[0]).toBeInstanceOf(UpdateTenantAutoregisterAllowedRole);
69
- expect(dto.allowedRoles[0].scope).toBe(PermissionScope.GROUP);
69
+ expect(dto.allowedRoles[0].scope).toBe(PermissionScope.LEVEL_1);
70
70
  });
71
71
  });
@@ -0,0 +1,45 @@
1
+ import { PermissionScope } from '../enums/PermissionScope';
2
+ import { ApplicationPermission } from './ApplicationPermission';
3
+ /**
4
+ * DEC-RBAC-092: al actualizar el `scope` de un permiso del catálogo de una app, el backend recalcula
5
+ * en cascada el scope de los roles que lo usan en todos los tenants de esa app y REPORTA (no modifica)
6
+ * las asignaciones que quedaron inconsistentes (Opción A). Estos tipos son el contrato de ese reporte.
7
+ */
8
+ /** Un rol cuyo scope se recalculó (y cambió) por el cascade. */
9
+ export interface RoleScopeRecompute {
10
+ tenantId: string;
11
+ roleId: string;
12
+ previousScope: PermissionScope;
13
+ newScope: PermissionScope;
14
+ }
15
+ /**
16
+ * Asignación que quedó inconsistente: su `scope` almacenado ya no coincide con el nuevo scope del rol.
17
+ * NO se modifica; se reporta para que el admin reasigne (DEC-RBAC-092, Opción A).
18
+ */
19
+ export interface InconsistentAssignment {
20
+ tenantId: string;
21
+ roleId: string;
22
+ assignmentId: string;
23
+ cognitoSub: string;
24
+ assignmentScope: PermissionScope;
25
+ assignmentScopeRef: string;
26
+ }
27
+ /** Un silo (tenant) cuyo recálculo falló (best-effort — no aborta el resto). */
28
+ export interface CascadeTenantFailure {
29
+ tenantId: string;
30
+ error: string;
31
+ }
32
+ /** Resumen del cascade de recálculo de scope de roles (DEC-RBAC-092). */
33
+ export interface CascadeReport {
34
+ rolesRecomputed: RoleScopeRecompute[];
35
+ inconsistentAssignments: InconsistentAssignment[];
36
+ failedTenants: CascadeTenantFailure[];
37
+ }
38
+ /**
39
+ * Respuesta de `PUT /applications/{id}/permissions/{key}`: el permiso actualizado + (si el cambio de
40
+ * scope disparó el cascade) el resumen. `cascade` ausente si el update no cambió el scope.
41
+ */
42
+ export interface UpdateApplicationPermissionResponse {
43
+ permission: ApplicationPermission;
44
+ cascade?: CascadeReport;
45
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,27 +1,17 @@
1
1
  /**
2
- * Jerarquía retail: PLATFORM > TENANT > RETAILER > STORE.
3
- * Jerarquía agents: PLATFORM > TENANT > GROUP.
4
- * Componente 01 spec.
2
+ * Scopes de autorización del RBAC: PLATFORM > TENANT > (niveles genéricos de la aplicación).
5
3
  *
6
- * Modelo genérico de aplicación (DEC-RBAC-032): además de los niveles legacy
7
- * (RETAILER/STORE/GROUP, atados a tenant-types concretos), una aplicación define
8
- * su jerarquía DEBAJO de TENANT con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3,
9
- * cuyo `displayName` lo decide cada aplicación (ver LevelDef en application/Application).
4
+ * Modelo genérico de aplicación (DEC-RBAC-032): una aplicación define su jerarquía DEBAJO de TENANT
5
+ * con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3, cuyo `displayName` lo decide cada aplicación
6
+ * (ver LevelDef en application/Application).
10
7
  *
11
- * DEC-RBAC-091 (Fase 1): RETAILER/STORE/GROUP quedan `@deprecated` — el modelo correcto es
12
- * LEVEL_N (DEC-RBAC-090, funcionando E2E). Se conservan por ahora para no romper a los consumidores
13
- * (platform-rbac-business, gateway-adapter, jwt-inyector-trigger, referral-business, webapps) que se
14
- * migran por fases; se REMUEVEN en Fase 5 (bump MAJOR) cuando ninguno los use.
8
+ * DEC-RBAC-091 (Fase 5): removidos los scopes legacy RETAILER/STORE/GROUP (estaban atados a
9
+ * tenant-types concretos). El modelo correcto es LEVEL_N (DEC-RBAC-090). Bump MINOR (3.x): los
10
+ * consumidores son internos y se migran en el mismo batch coordinado.
15
11
  */
16
12
  export declare enum PermissionScope {
17
13
  PLATFORM = "PLATFORM",
18
14
  TENANT = "TENANT",
19
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
20
- RETAILER = "RETAILER",
21
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
22
- STORE = "STORE",
23
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
24
- GROUP = "GROUP",
25
15
  LEVEL_1 = "LEVEL_1",
26
16
  LEVEL_2 = "LEVEL_2",
27
17
  LEVEL_3 = "LEVEL_3"
@@ -2,30 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PermissionScope = void 0;
4
4
  /**
5
- * Jerarquía retail: PLATFORM > TENANT > RETAILER > STORE.
6
- * Jerarquía agents: PLATFORM > TENANT > GROUP.
7
- * Componente 01 spec.
5
+ * Scopes de autorización del RBAC: PLATFORM > TENANT > (niveles genéricos de la aplicación).
8
6
  *
9
- * Modelo genérico de aplicación (DEC-RBAC-032): además de los niveles legacy
10
- * (RETAILER/STORE/GROUP, atados a tenant-types concretos), una aplicación define
11
- * su jerarquía DEBAJO de TENANT con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3,
12
- * cuyo `displayName` lo decide cada aplicación (ver LevelDef en application/Application).
7
+ * Modelo genérico de aplicación (DEC-RBAC-032): una aplicación define su jerarquía DEBAJO de TENANT
8
+ * con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3, cuyo `displayName` lo decide cada aplicación
9
+ * (ver LevelDef en application/Application).
13
10
  *
14
- * DEC-RBAC-091 (Fase 1): RETAILER/STORE/GROUP quedan `@deprecated` — el modelo correcto es
15
- * LEVEL_N (DEC-RBAC-090, funcionando E2E). Se conservan por ahora para no romper a los consumidores
16
- * (platform-rbac-business, gateway-adapter, jwt-inyector-trigger, referral-business, webapps) que se
17
- * migran por fases; se REMUEVEN en Fase 5 (bump MAJOR) cuando ninguno los use.
11
+ * DEC-RBAC-091 (Fase 5): removidos los scopes legacy RETAILER/STORE/GROUP (estaban atados a
12
+ * tenant-types concretos). El modelo correcto es LEVEL_N (DEC-RBAC-090). Bump MINOR (3.x): los
13
+ * consumidores son internos y se migran en el mismo batch coordinado.
18
14
  */
19
15
  var PermissionScope;
20
16
  (function (PermissionScope) {
21
17
  PermissionScope["PLATFORM"] = "PLATFORM";
22
18
  PermissionScope["TENANT"] = "TENANT";
23
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
24
- PermissionScope["RETAILER"] = "RETAILER";
25
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
26
- PermissionScope["STORE"] = "STORE";
27
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
28
- PermissionScope["GROUP"] = "GROUP";
29
19
  PermissionScope["LEVEL_1"] = "LEVEL_1";
30
20
  PermissionScope["LEVEL_2"] = "LEVEL_2";
31
21
  PermissionScope["LEVEL_3"] = "LEVEL_3";
@@ -44,6 +44,7 @@ export * from './enums/PermissionKind';
44
44
  export type { LevelDef, ApplicationSecurityPolicyDefault, ApplicationBrandingDefault, AutoregisterAllowedRole, AutoregisterConfig, ApplicationDefaults, SeedRole, Application, } from './application/Application';
45
45
  export type { ApplicationPermission } from './application/ApplicationPermission';
46
46
  export type { CreateApplicationRequest, UpdateApplicationRequest, UpsertApplicationPermissionRequest, } from './application/requests';
47
+ export type { RoleScopeRecompute, InconsistentAssignment, CascadeTenantFailure, CascadeReport, UpdateApplicationPermissionResponse, } from './application/cascade';
47
48
  export * from './dtos/SelfRegisterStartRequest';
48
49
  export * from './dtos/SelfRegisterVerifyOtpRequest';
49
50
  export * from './dtos/SelfRegisterCompleteRequest';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.146.0",
3
+ "version": "3.148.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,51 @@
1
+ import { PermissionScope } from '../enums/PermissionScope';
2
+ import { ApplicationPermission } from './ApplicationPermission';
3
+
4
+ /**
5
+ * DEC-RBAC-092: al actualizar el `scope` de un permiso del catálogo de una app, el backend recalcula
6
+ * en cascada el scope de los roles que lo usan en todos los tenants de esa app y REPORTA (no modifica)
7
+ * las asignaciones que quedaron inconsistentes (Opción A). Estos tipos son el contrato de ese reporte.
8
+ */
9
+
10
+ /** Un rol cuyo scope se recalculó (y cambió) por el cascade. */
11
+ export interface RoleScopeRecompute {
12
+ tenantId: string;
13
+ roleId: string;
14
+ previousScope: PermissionScope;
15
+ newScope: PermissionScope;
16
+ }
17
+
18
+ /**
19
+ * Asignación que quedó inconsistente: su `scope` almacenado ya no coincide con el nuevo scope del rol.
20
+ * NO se modifica; se reporta para que el admin reasigne (DEC-RBAC-092, Opción A).
21
+ */
22
+ export interface InconsistentAssignment {
23
+ tenantId: string;
24
+ roleId: string;
25
+ assignmentId: string;
26
+ cognitoSub: string;
27
+ assignmentScope: PermissionScope;
28
+ assignmentScopeRef: string;
29
+ }
30
+
31
+ /** Un silo (tenant) cuyo recálculo falló (best-effort — no aborta el resto). */
32
+ export interface CascadeTenantFailure {
33
+ tenantId: string;
34
+ error: string;
35
+ }
36
+
37
+ /** Resumen del cascade de recálculo de scope de roles (DEC-RBAC-092). */
38
+ export interface CascadeReport {
39
+ rolesRecomputed: RoleScopeRecompute[];
40
+ inconsistentAssignments: InconsistentAssignment[];
41
+ failedTenants: CascadeTenantFailure[];
42
+ }
43
+
44
+ /**
45
+ * Respuesta de `PUT /applications/{id}/permissions/{key}`: el permiso actualizado + (si el cambio de
46
+ * scope disparó el cascade) el resumen. `cascade` ausente si el update no cambió el scope.
47
+ */
48
+ export interface UpdateApplicationPermissionResponse {
49
+ permission: ApplicationPermission;
50
+ cascade?: CascadeReport;
51
+ }
@@ -1,27 +1,17 @@
1
1
  /**
2
- * Jerarquía retail: PLATFORM > TENANT > RETAILER > STORE.
3
- * Jerarquía agents: PLATFORM > TENANT > GROUP.
4
- * Componente 01 spec.
2
+ * Scopes de autorización del RBAC: PLATFORM > TENANT > (niveles genéricos de la aplicación).
5
3
  *
6
- * Modelo genérico de aplicación (DEC-RBAC-032): además de los niveles legacy
7
- * (RETAILER/STORE/GROUP, atados a tenant-types concretos), una aplicación define
8
- * su jerarquía DEBAJO de TENANT con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3,
9
- * cuyo `displayName` lo decide cada aplicación (ver LevelDef en application/Application).
4
+ * Modelo genérico de aplicación (DEC-RBAC-032): una aplicación define su jerarquía DEBAJO de TENANT
5
+ * con niveles genéricos LEVEL_1 > LEVEL_2 > LEVEL_3, cuyo `displayName` lo decide cada aplicación
6
+ * (ver LevelDef en application/Application).
10
7
  *
11
- * DEC-RBAC-091 (Fase 1): RETAILER/STORE/GROUP quedan `@deprecated` — el modelo correcto es
12
- * LEVEL_N (DEC-RBAC-090, funcionando E2E). Se conservan por ahora para no romper a los consumidores
13
- * (platform-rbac-business, gateway-adapter, jwt-inyector-trigger, referral-business, webapps) que se
14
- * migran por fases; se REMUEVEN en Fase 5 (bump MAJOR) cuando ninguno los use.
8
+ * DEC-RBAC-091 (Fase 5): removidos los scopes legacy RETAILER/STORE/GROUP (estaban atados a
9
+ * tenant-types concretos). El modelo correcto es LEVEL_N (DEC-RBAC-090). Bump MINOR (3.x): los
10
+ * consumidores son internos y se migran en el mismo batch coordinado.
15
11
  */
16
12
  export enum PermissionScope {
17
13
  PLATFORM = 'PLATFORM',
18
14
  TENANT = 'TENANT',
19
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
20
- RETAILER = 'RETAILER',
21
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
22
- STORE = 'STORE',
23
- /** @deprecated DEC-RBAC-091: usar LEVEL_N. Se remueve en Fase 5 (MAJOR). */
24
- GROUP = 'GROUP',
25
15
  LEVEL_1 = 'LEVEL_1',
26
16
  LEVEL_2 = 'LEVEL_2',
27
17
  LEVEL_3 = 'LEVEL_3',
@@ -106,6 +106,13 @@ export type {
106
106
  UpdateApplicationRequest,
107
107
  UpsertApplicationPermissionRequest,
108
108
  } from './application/requests';
109
+ export type {
110
+ RoleScopeRecompute,
111
+ InconsistentAssignment,
112
+ CascadeTenantFailure,
113
+ CascadeReport,
114
+ UpdateApplicationPermissionResponse,
115
+ } from './application/cascade';
109
116
 
110
117
  // Autoregistro self-service por tenant (DEC-RBAC-030..034). Los Request llevan decoradores
111
118
  // class-validator (export de valor — se hidratan con plainToInstance); los Response son interfaces