@fiado/type-kit 3.71.0 → 3.72.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/bin/platformRbac/dtos/CreateTenantRequest.d.ts +2 -0
- package/bin/platformRbac/dtos/CreateTenantRequest.js +7 -0
- package/bin/platformRbac/enums/Permission.d.ts +24 -1
- package/bin/platformRbac/enums/Permission.js +24 -1
- package/bin/platformRbac/enums/TokenValidationMode.d.ts +13 -0
- package/bin/platformRbac/enums/TokenValidationMode.js +17 -0
- package/bin/platformRbac/index.d.ts +1 -0
- package/bin/platformRbac/index.js +1 -0
- package/package.json +1 -1
- package/src/platformRbac/dtos/CreateTenantRequest.ts +3 -1
- package/src/platformRbac/enums/Permission.ts +24 -1
- package/src/platformRbac/enums/TokenValidationMode.ts +13 -0
- package/src/platformRbac/index.ts +1 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TokenValidationMode } from '../enums/TokenValidationMode';
|
|
1
2
|
/**
|
|
2
3
|
* Input del POST backoffice de creación de tenant (F-11 — onboarding de tenant en SureKeep).
|
|
3
4
|
* Consumido por el controller `backofficeCreateTenant` del platform-rbac-business y, a futuro,
|
|
@@ -14,4 +15,5 @@ export declare class CreateTenantRequest {
|
|
|
14
15
|
region: string;
|
|
15
16
|
mfaRequired?: boolean;
|
|
16
17
|
passwordMinLength?: number;
|
|
18
|
+
tokenValidationMode?: TokenValidationMode;
|
|
17
19
|
}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.CreateTenantRequest = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
+
const TokenValidationMode_1 = require("../enums/TokenValidationMode");
|
|
15
16
|
/**
|
|
16
17
|
* Input del POST backoffice de creación de tenant (F-11 — onboarding de tenant en SureKeep).
|
|
17
18
|
* Consumido por el controller `backofficeCreateTenant` del platform-rbac-business y, a futuro,
|
|
@@ -66,3 +67,9 @@ __decorate([
|
|
|
66
67
|
(0, class_validator_1.Min)(8),
|
|
67
68
|
__metadata("design:type", Number)
|
|
68
69
|
], CreateTenantRequest.prototype, "passwordMinLength", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, class_transformer_1.Expose)(),
|
|
72
|
+
(0, class_validator_1.IsOptional)(),
|
|
73
|
+
(0, class_validator_1.IsEnum)(TokenValidationMode_1.TokenValidationMode),
|
|
74
|
+
__metadata("design:type", String)
|
|
75
|
+
], CreateTenantRequest.prototype, "tokenValidationMode", void 0);
|
|
@@ -6,7 +6,25 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Copy-paste literal de los valores del spec (DEC-003).
|
|
8
8
|
* Convención: `<category>.<resource>.<action>` (snake_case en action si multi-palabra).
|
|
9
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ ESTE ES EL CATÁLOGO GLOBAL Y ÚNICO. Todo permiso del sistema vive acá. Los tenants
|
|
11
|
+
* NO inventan permisos: cada `tenantType` arma su lista (techo) ELIGIENDO de este catálogo
|
|
12
|
+
* (`TenantTypePermissionCatalog_GT` en platform-rbac-business, DEC-062), y cada tenant arma
|
|
13
|
+
* sus roles combinando esos permisos. El vocabulario es global; lo que varía por tenant es
|
|
14
|
+
* QUÉ permisos usa, no CUÁLES existen.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️⚠️ AL AGREGAR / QUITAR / RENOMBRAR UN PERMISO — PROCEDIMIENTO OBLIGATORIO:
|
|
17
|
+
* 1. Agregar el valor a ESTE enum.
|
|
18
|
+
* 2. Agregarlo TAMBIÉN al FINAL de `PERMISSION_BIT_ORDER` (abajo) — append-only, NUNCA en
|
|
19
|
+
* el medio ni reordenando: ese array define el bit de cada permiso en el token (bitset).
|
|
20
|
+
* Reordenar/insertar en medio desalinea TODOS los tokens ya emitidos (escalada/pérdida
|
|
21
|
+
* de permisos silenciosa). Un permiso deprecado CONSERVA su posición (no se borra del array).
|
|
22
|
+
* 3. Recién entonces un `tenantType` puede incluirlo en su lista. Un permiso que NO esté en
|
|
23
|
+
* este enum + bit-order NO tiene bit → no viaja en el token (el gateway-adapter no lo ve).
|
|
24
|
+
* 4. `PERMS_VERSION` (hash del orden) cambia solo → bump minor del type-kit + redeploy de
|
|
25
|
+
* consumers (jwt-inyector-trigger, gateway-adapter, platform-rbac-business). Tokens viejos
|
|
26
|
+
* caen al fallback (resolver DDB) hasta refrescar — by-design, no rompe.
|
|
27
|
+
* El test `permissionBits.test.ts` falla si el enum y `PERMISSION_BIT_ORDER` se desincronizan.
|
|
10
28
|
*
|
|
11
29
|
* Coexiste con módulo `rbac/` oficial cuando yhonhansen publique componente 01 — TD-RBAC-002.
|
|
12
30
|
*/
|
|
@@ -107,6 +125,11 @@ export declare enum Permission {
|
|
|
107
125
|
* Índice de cada permiso = su posición de bit. NUNCA reordenar ni borrar:
|
|
108
126
|
* deprecados CONSERVAN su posición; los nuevos van SIEMPRE al final.
|
|
109
127
|
* Derivado explícitamente (no Object.values, frágil ante edición del enum).
|
|
128
|
+
*
|
|
129
|
+
* ⚠️ Si agregás un permiso al enum `Permission` (arriba), agregalo TAMBIÉN acá, AL FINAL.
|
|
130
|
+
* Ver el procedimiento completo en el JSDoc del enum `Permission`. El test
|
|
131
|
+
* `permissionBits.test.ts` rompe si esto y el enum no coinciden, y el snapshot del orden
|
|
132
|
+
* completo rompe si reordenás (guard anti-desalineamiento de tokens emitidos).
|
|
110
133
|
*/
|
|
111
134
|
export declare const PERMISSION_BIT_ORDER: readonly Permission[];
|
|
112
135
|
/** Versión del catálogo = hash del orden. Cambia solo si el orden cambia. */
|
|
@@ -11,7 +11,25 @@ exports.bitsToPermissions = bitsToPermissions;
|
|
|
11
11
|
*
|
|
12
12
|
* Copy-paste literal de los valores del spec (DEC-003).
|
|
13
13
|
* Convención: `<category>.<resource>.<action>` (snake_case en action si multi-palabra).
|
|
14
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ ESTE ES EL CATÁLOGO GLOBAL Y ÚNICO. Todo permiso del sistema vive acá. Los tenants
|
|
16
|
+
* NO inventan permisos: cada `tenantType` arma su lista (techo) ELIGIENDO de este catálogo
|
|
17
|
+
* (`TenantTypePermissionCatalog_GT` en platform-rbac-business, DEC-062), y cada tenant arma
|
|
18
|
+
* sus roles combinando esos permisos. El vocabulario es global; lo que varía por tenant es
|
|
19
|
+
* QUÉ permisos usa, no CUÁLES existen.
|
|
20
|
+
*
|
|
21
|
+
* ⚠️⚠️ AL AGREGAR / QUITAR / RENOMBRAR UN PERMISO — PROCEDIMIENTO OBLIGATORIO:
|
|
22
|
+
* 1. Agregar el valor a ESTE enum.
|
|
23
|
+
* 2. Agregarlo TAMBIÉN al FINAL de `PERMISSION_BIT_ORDER` (abajo) — append-only, NUNCA en
|
|
24
|
+
* el medio ni reordenando: ese array define el bit de cada permiso en el token (bitset).
|
|
25
|
+
* Reordenar/insertar en medio desalinea TODOS los tokens ya emitidos (escalada/pérdida
|
|
26
|
+
* de permisos silenciosa). Un permiso deprecado CONSERVA su posición (no se borra del array).
|
|
27
|
+
* 3. Recién entonces un `tenantType` puede incluirlo en su lista. Un permiso que NO esté en
|
|
28
|
+
* este enum + bit-order NO tiene bit → no viaja en el token (el gateway-adapter no lo ve).
|
|
29
|
+
* 4. `PERMS_VERSION` (hash del orden) cambia solo → bump minor del type-kit + redeploy de
|
|
30
|
+
* consumers (jwt-inyector-trigger, gateway-adapter, platform-rbac-business). Tokens viejos
|
|
31
|
+
* caen al fallback (resolver DDB) hasta refrescar — by-design, no rompe.
|
|
32
|
+
* El test `permissionBits.test.ts` falla si el enum y `PERMISSION_BIT_ORDER` se desincronizan.
|
|
15
33
|
*
|
|
16
34
|
* Coexiste con módulo `rbac/` oficial cuando yhonhansen publique componente 01 — TD-RBAC-002.
|
|
17
35
|
*/
|
|
@@ -142,6 +160,11 @@ var Permission;
|
|
|
142
160
|
* Índice de cada permiso = su posición de bit. NUNCA reordenar ni borrar:
|
|
143
161
|
* deprecados CONSERVAN su posición; los nuevos van SIEMPRE al final.
|
|
144
162
|
* Derivado explícitamente (no Object.values, frágil ante edición del enum).
|
|
163
|
+
*
|
|
164
|
+
* ⚠️ Si agregás un permiso al enum `Permission` (arriba), agregalo TAMBIÉN acá, AL FINAL.
|
|
165
|
+
* Ver el procedimiento completo en el JSDoc del enum `Permission`. El test
|
|
166
|
+
* `permissionBits.test.ts` rompe si esto y el enum no coinciden, y el snapshot del orden
|
|
167
|
+
* completo rompe si reordenás (guard anti-desalineamiento de tokens emitidos).
|
|
145
168
|
*/
|
|
146
169
|
exports.PERMISSION_BIT_ORDER = [
|
|
147
170
|
Permission.RBAC_CATALOG_MANAGE,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modo de validación de tokens por tenant (DEC-RBAC-002 del rbac-authorizer-trigger).
|
|
3
|
+
* Persistido como atributo no-key en PlatformTenantConfig_GT. Los valores string SON el
|
|
4
|
+
* contrato: el authorizer los espeja con un tipo local (no depende de type-kit, DT-7).
|
|
5
|
+
* - OFFLINE: solo firma (JWKS) + permsEpoch. Default. No pega a Cognito.
|
|
6
|
+
* - ONLINE_PREFERRED: AdminGetUser; negativo definitivo → Deny; fallo de infra → cae a offline.
|
|
7
|
+
* - ONLINE_STRICT: AdminGetUser; negativo definitivo O fallo de infra → Deny (fail-closed, regulado).
|
|
8
|
+
*/
|
|
9
|
+
export declare enum TokenValidationMode {
|
|
10
|
+
OFFLINE = "offline",
|
|
11
|
+
ONLINE_PREFERRED = "online_preferred",
|
|
12
|
+
ONLINE_STRICT = "online_strict"
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenValidationMode = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Modo de validación de tokens por tenant (DEC-RBAC-002 del rbac-authorizer-trigger).
|
|
6
|
+
* Persistido como atributo no-key en PlatformTenantConfig_GT. Los valores string SON el
|
|
7
|
+
* contrato: el authorizer los espeja con un tipo local (no depende de type-kit, DT-7).
|
|
8
|
+
* - OFFLINE: solo firma (JWKS) + permsEpoch. Default. No pega a Cognito.
|
|
9
|
+
* - ONLINE_PREFERRED: AdminGetUser; negativo definitivo → Deny; fallo de infra → cae a offline.
|
|
10
|
+
* - ONLINE_STRICT: AdminGetUser; negativo definitivo O fallo de infra → Deny (fail-closed, regulado).
|
|
11
|
+
*/
|
|
12
|
+
var TokenValidationMode;
|
|
13
|
+
(function (TokenValidationMode) {
|
|
14
|
+
TokenValidationMode["OFFLINE"] = "offline";
|
|
15
|
+
TokenValidationMode["ONLINE_PREFERRED"] = "online_preferred";
|
|
16
|
+
TokenValidationMode["ONLINE_STRICT"] = "online_strict";
|
|
17
|
+
})(TokenValidationMode || (exports.TokenValidationMode = TokenValidationMode = {}));
|
|
@@ -6,6 +6,7 @@ export type { RoleAssignmentInfo } from './dtos/RoleAssignmentInfo';
|
|
|
6
6
|
export type { PermissionMeta } from './dtos/PermissionMeta';
|
|
7
7
|
export type { EffectivePermissionsResponse } from './dtos/EffectivePermissionsResponse';
|
|
8
8
|
export * from './enums/MfaMethodEnum';
|
|
9
|
+
export * from './enums/TokenValidationMode';
|
|
9
10
|
export * from './enums/ChallengeNameEnum';
|
|
10
11
|
export * from './auth/DefineNextChallengeRequest';
|
|
11
12
|
export * from './auth/DefineNextChallengeResponse';
|
|
@@ -37,6 +37,7 @@ Object.defineProperty(exports, "PermissionCategory", { enumerable: true, get: fu
|
|
|
37
37
|
// Fase 1 — Custom Auth Challenge (Email OTP + TOTP) + MFA self-service.
|
|
38
38
|
// Class values (no type-only) — los DTOs llevan decoradores class-validator y se hidratan con plainToInstance en runtime.
|
|
39
39
|
__exportStar(require("./enums/MfaMethodEnum"), exports);
|
|
40
|
+
__exportStar(require("./enums/TokenValidationMode"), exports);
|
|
40
41
|
__exportStar(require("./enums/ChallengeNameEnum"), exports);
|
|
41
42
|
__exportStar(require("./auth/DefineNextChallengeRequest"), exports);
|
|
42
43
|
__exportStar(require("./auth/DefineNextChallengeResponse"), exports);
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsBoolean, IsEmail, IsInt, IsOptional, IsString, Matches, Min } from 'class-validator';
|
|
2
|
+
import { IsBoolean, IsEmail, IsEnum, IsInt, IsOptional, IsString, Matches, Min } from 'class-validator';
|
|
3
|
+
import { TokenValidationMode } from '../enums/TokenValidationMode';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Input del POST backoffice de creación de tenant (F-11 — onboarding de tenant en SureKeep).
|
|
@@ -17,4 +18,5 @@ export class CreateTenantRequest {
|
|
|
17
18
|
@Expose() @IsString() region!: string;
|
|
18
19
|
@Expose() @IsOptional() @IsBoolean() mfaRequired?: boolean;
|
|
19
20
|
@Expose() @IsOptional() @IsInt() @Min(8) passwordMinLength?: number;
|
|
21
|
+
@Expose() @IsOptional() @IsEnum(TokenValidationMode) tokenValidationMode?: TokenValidationMode;
|
|
20
22
|
}
|
|
@@ -6,7 +6,25 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Copy-paste literal de los valores del spec (DEC-003).
|
|
8
8
|
* Convención: `<category>.<resource>.<action>` (snake_case en action si multi-palabra).
|
|
9
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ ESTE ES EL CATÁLOGO GLOBAL Y ÚNICO. Todo permiso del sistema vive acá. Los tenants
|
|
11
|
+
* NO inventan permisos: cada `tenantType` arma su lista (techo) ELIGIENDO de este catálogo
|
|
12
|
+
* (`TenantTypePermissionCatalog_GT` en platform-rbac-business, DEC-062), y cada tenant arma
|
|
13
|
+
* sus roles combinando esos permisos. El vocabulario es global; lo que varía por tenant es
|
|
14
|
+
* QUÉ permisos usa, no CUÁLES existen.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️⚠️ AL AGREGAR / QUITAR / RENOMBRAR UN PERMISO — PROCEDIMIENTO OBLIGATORIO:
|
|
17
|
+
* 1. Agregar el valor a ESTE enum.
|
|
18
|
+
* 2. Agregarlo TAMBIÉN al FINAL de `PERMISSION_BIT_ORDER` (abajo) — append-only, NUNCA en
|
|
19
|
+
* el medio ni reordenando: ese array define el bit de cada permiso en el token (bitset).
|
|
20
|
+
* Reordenar/insertar en medio desalinea TODOS los tokens ya emitidos (escalada/pérdida
|
|
21
|
+
* de permisos silenciosa). Un permiso deprecado CONSERVA su posición (no se borra del array).
|
|
22
|
+
* 3. Recién entonces un `tenantType` puede incluirlo en su lista. Un permiso que NO esté en
|
|
23
|
+
* este enum + bit-order NO tiene bit → no viaja en el token (el gateway-adapter no lo ve).
|
|
24
|
+
* 4. `PERMS_VERSION` (hash del orden) cambia solo → bump minor del type-kit + redeploy de
|
|
25
|
+
* consumers (jwt-inyector-trigger, gateway-adapter, platform-rbac-business). Tokens viejos
|
|
26
|
+
* caen al fallback (resolver DDB) hasta refrescar — by-design, no rompe.
|
|
27
|
+
* El test `permissionBits.test.ts` falla si el enum y `PERMISSION_BIT_ORDER` se desincronizan.
|
|
10
28
|
*
|
|
11
29
|
* Coexiste con módulo `rbac/` oficial cuando yhonhansen publique componente 01 — TD-RBAC-002.
|
|
12
30
|
*/
|
|
@@ -143,6 +161,11 @@ export enum Permission {
|
|
|
143
161
|
* Índice de cada permiso = su posición de bit. NUNCA reordenar ni borrar:
|
|
144
162
|
* deprecados CONSERVAN su posición; los nuevos van SIEMPRE al final.
|
|
145
163
|
* Derivado explícitamente (no Object.values, frágil ante edición del enum).
|
|
164
|
+
*
|
|
165
|
+
* ⚠️ Si agregás un permiso al enum `Permission` (arriba), agregalo TAMBIÉN acá, AL FINAL.
|
|
166
|
+
* Ver el procedimiento completo en el JSDoc del enum `Permission`. El test
|
|
167
|
+
* `permissionBits.test.ts` rompe si esto y el enum no coinciden, y el snapshot del orden
|
|
168
|
+
* completo rompe si reordenás (guard anti-desalineamiento de tokens emitidos).
|
|
146
169
|
*/
|
|
147
170
|
export const PERMISSION_BIT_ORDER: readonly Permission[] = [
|
|
148
171
|
Permission.RBAC_CATALOG_MANAGE,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modo de validación de tokens por tenant (DEC-RBAC-002 del rbac-authorizer-trigger).
|
|
3
|
+
* Persistido como atributo no-key en PlatformTenantConfig_GT. Los valores string SON el
|
|
4
|
+
* contrato: el authorizer los espeja con un tipo local (no depende de type-kit, DT-7).
|
|
5
|
+
* - OFFLINE: solo firma (JWKS) + permsEpoch. Default. No pega a Cognito.
|
|
6
|
+
* - ONLINE_PREFERRED: AdminGetUser; negativo definitivo → Deny; fallo de infra → cae a offline.
|
|
7
|
+
* - ONLINE_STRICT: AdminGetUser; negativo definitivo O fallo de infra → Deny (fail-closed, regulado).
|
|
8
|
+
*/
|
|
9
|
+
export enum TokenValidationMode {
|
|
10
|
+
OFFLINE = 'offline',
|
|
11
|
+
ONLINE_PREFERRED = 'online_preferred',
|
|
12
|
+
ONLINE_STRICT = 'online_strict',
|
|
13
|
+
}
|
|
@@ -26,6 +26,7 @@ export type { EffectivePermissionsResponse } from './dtos/EffectivePermissionsRe
|
|
|
26
26
|
// Fase 1 — Custom Auth Challenge (Email OTP + TOTP) + MFA self-service.
|
|
27
27
|
// Class values (no type-only) — los DTOs llevan decoradores class-validator y se hidratan con plainToInstance en runtime.
|
|
28
28
|
export * from './enums/MfaMethodEnum';
|
|
29
|
+
export * from './enums/TokenValidationMode';
|
|
29
30
|
export * from './enums/ChallengeNameEnum';
|
|
30
31
|
export * from './auth/DefineNextChallengeRequest';
|
|
31
32
|
export * from './auth/DefineNextChallengeResponse';
|