@fiado/type-kit 3.141.0 → 3.142.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.
Files changed (42) hide show
  1. package/_test_/unit/platformRbac/dtos/CreateTenantRequest.test.ts +6 -5
  2. package/_test_/unit/platformRbac/enums/__snapshots__/permissionBits.test.ts.snap +1 -73
  3. package/_test_/unit/platformRbac/tenantTypes.test.ts +5 -40
  4. package/bin/platformRbac/dtos/CreateTenantRequest.d.ts +5 -4
  5. package/bin/platformRbac/dtos/CreateTenantRequest.js +1 -2
  6. package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +22 -0
  7. package/bin/{walletFunding/dtos/CancelFundingRequest.js → platformRbac/dtos/ResendOtpRequest.js} +16 -13
  8. package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +11 -0
  9. package/bin/{cognitoBackofficeConnector/dtos/MfaPoolConfig.js → platformRbac/dtos/ResendSelfRegisterOtpRequest.js} +18 -18
  10. package/bin/platformRbac/enums/Permission.d.ts +0 -77
  11. package/bin/platformRbac/enums/Permission.js +8 -186
  12. package/bin/platformRbac/enums/PermissionCategory.d.ts +0 -7
  13. package/bin/platformRbac/enums/PermissionCategory.js +4 -9
  14. package/bin/platformRbac/tenantTypes.d.ts +18 -13
  15. package/bin/platformRbac/tenantTypes.js +20 -30
  16. package/package.json +1 -1
  17. package/src/platformRbac/dtos/CreateTenantRequest.ts +5 -4
  18. package/src/platformRbac/enums/Permission.ts +8 -191
  19. package/src/platformRbac/enums/PermissionCategory.ts +4 -9
  20. package/src/platformRbac/tenantTypes.ts +21 -32
  21. package/bin/cognitoBackofficeConnector/dtos/MfaPoolConfig.d.ts +0 -7
  22. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.d.ts +0 -20
  23. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.js +0 -11
  24. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.d.ts +0 -4
  25. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.js +0 -6
  26. package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.d.ts +0 -17
  27. package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.js +0 -39
  28. package/bin/rbac/enums/PoolKind.d.ts +0 -16
  29. package/bin/rbac/enums/PoolKind.js +0 -20
  30. package/bin/rbac/index.d.ts +0 -1
  31. package/bin/rbac/index.js +0 -17
  32. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +0 -5
  33. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +0 -31
  34. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +0 -7
  35. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +0 -6
  36. package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +0 -11
  37. package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +0 -14
  38. package/bin/walletFunding/dtos/CancelFundingResponse.js +0 -12
  39. package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +0 -3
  40. package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +0 -21
  41. package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +0 -7
  42. package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +0 -6
@@ -2,7 +2,6 @@ import 'reflect-metadata';
2
2
  import { plainToInstance } from 'class-transformer';
3
3
  import { validate } from 'class-validator';
4
4
  import { CreateTenantRequest } from '../../../../src/platformRbac/dtos/CreateTenantRequest';
5
- import { TenantType } from '../../../../src/platformRbac/tenantTypes';
6
5
 
7
6
  describe('CreateTenantRequest', () => {
8
7
  const valid = {
@@ -47,15 +46,17 @@ describe('CreateTenantRequest', () => {
47
46
  expect(errors.some(e => e.property === 'tenantId')).toBe(true);
48
47
  });
49
48
 
50
- it('valida con tenantType opcional = agents', async () => {
49
+ it('valida con tenantType opcional (legacy string libre — DEC-RBAC-062/063, purga v4.0.0)', async () => {
50
+ // Tras la purga de los tenant-types de dominio, tenantType es string libre por back-compat
51
+ // del shape del body (el alta se hace por applicationId). Cualquier string valida.
51
52
  const dto = plainToInstance(CreateTenantRequest, { ...valid, tenantType: 'agents' });
52
53
  const errors = await validate(dto);
53
54
  expect(errors).toEqual([]);
54
- expect(dto.tenantType).toBe(TenantType.AGENTS);
55
+ expect(dto.tenantType).toBe('agents');
55
56
  });
56
57
 
57
- it('falla si tenantType no es un TenantType válido', async () => {
58
- const dto = plainToInstance(CreateTenantRequest, { ...valid, tenantType: 'inexistente' });
58
+ it('falla si tenantType no es string', async () => {
59
+ const dto = plainToInstance(CreateTenantRequest, { ...valid, tenantType: 123 });
59
60
  const errors = await validate(dto);
60
61
  expect(errors.some(e => e.property === 'tenantType')).toBe(true);
61
62
  });
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
- exports[`PERMISSION_BIT_ORDER PERMS_VERSION es número estable 1`] = `1703336986`;
3
+ exports[`PERMISSION_BIT_ORDER PERMS_VERSION es número estable 1`] = `1018014330`;
4
4
 
5
5
  exports[`PERMISSION_BIT_ORDER append-only: snapshot del ORDEN COMPLETO (rompe ante cualquier reorden/inserción) 1`] = `
6
6
  [
@@ -49,79 +49,7 @@ exports[`PERMISSION_BIT_ORDER append-only: snapshot del ORDEN COMPLETO (rompe an
49
49
  "tenant.security.policy.manage",
50
50
  "tenant.branding.manage",
51
51
  "tenant.audit.view",
52
- "retail.user.create",
53
- "retail.user.create.lateral",
54
- "retail.user.read",
55
- "retail.user.update",
56
- "retail.user.status",
57
- "retail.user.delete",
58
- "retail.user.password.reset",
59
- "retail.user.mfa.reset",
60
- "retail.product.create",
61
- "retail.product.list",
62
- "retail.product.view",
63
- "retail.product.update",
64
- "retail.product.delete",
65
- "retail.product.mdm_config",
66
- "retail.inventory.list",
67
- "retail.inventory.view",
68
- "retail.inventory.update",
69
- "retail.sale.create",
70
- "retail.sale.list",
71
- "retail.sale.cancel",
72
- "retail.store.manage",
73
- "retail.retailer.manage",
74
- "lend.credit.create",
75
- "lend.credit.list",
76
- "lend.credit.view",
77
- "lend.credit.update",
78
- "lend.credit.liquidate",
79
- "lend.credit.restructure",
80
- "lend.payment.apply",
81
- "lend.payment.list",
82
- "lend.payment.reverse",
83
- "lend.installment.view",
84
- "mdm.device.enroll",
85
- "mdm.device.release",
86
- "mdm.device.archive",
87
- "mdm.device.deactivate",
88
- "mdm.device.lock.manual",
89
- "mdm.device.unlock.manual",
90
- "mdm.device.pin_unlock",
91
- "mdm.device.extend_validity",
92
- "mdm.device.notify",
93
- "mdm.device.status.view",
94
- "mdm.operation_log.view",
95
- "mdm.test",
96
- "pay.transaction.view",
97
- "agents.agent.list",
98
- "agents.agent.create",
99
- "agents.agent.create_bulk",
100
- "agents.agent.move",
101
- "agents.agent.delete",
102
- "agents.referral.view",
103
- "agents.ranking.view",
104
- "agents.production.view",
105
- "agents.person.search",
106
- "agents.person.view",
107
- "agents.person.update",
108
- "agents.document.view",
109
- "agents.document.upload",
110
- "agents.address.view",
111
- "agents.address.manage",
112
- "agents.beneficiary.view",
113
- "agents.beneficiary.manage",
114
- "agents.card.issue",
115
- "agents.chat.view",
116
- "agents.chat.send",
117
- "agents.notification.send",
118
- "agents.export.run",
119
- "agents.catalog.view",
120
- "agents.group.manage",
121
- "agents.group.user.manage",
122
- "agents.person.create",
123
52
  "platform.tenant.userfields.manage",
124
- "agents.app.access",
125
53
  "platform.user.create.lateral",
126
54
  "platform.application.manage",
127
55
  "tenant.level.manage",
@@ -1,58 +1,23 @@
1
- import { TenantType, TENANT_TYPES, levelsOf, tableSuffixForLevel, scopeRankOrder } from '../../../src/platformRbac/tenantTypes';
1
+ import { TENANT_TYPES, scopeRankOrder } from '../../../src/platformRbac/tenantTypes';
2
2
  import { PermissionScope } from '../../../src/platformRbac/enums/PermissionScope';
3
3
 
4
- describe('tenantTypes', () => {
5
- it('retail define RETAILER>STORE', () => {
6
- expect(levelsOf(TenantType.RETAIL)).toEqual([PermissionScope.RETAILER, PermissionScope.STORE]);
4
+ describe('tenantTypes (post-purga v4.0.0 — solo niveles genéricos)', () => {
5
+ it('TENANT_TYPES quedó vacío tras purgar los tipos de dominio (retail/agents)', () => {
6
+ expect(Object.keys(TENANT_TYPES)).toHaveLength(0);
7
7
  });
8
8
 
9
- it('scopeRankOrder = [PLATFORM, TENANT, RETAILER, STORE, GROUP, LEVEL_1, LEVEL_2, LEVEL_3]', () => {
9
+ it('scopeRankOrder = [PLATFORM, TENANT, LEVEL_1, LEVEL_2, LEVEL_3]', () => {
10
10
  expect(scopeRankOrder()).toEqual([
11
11
  PermissionScope.PLATFORM,
12
12
  PermissionScope.TENANT,
13
- PermissionScope.RETAILER,
14
- PermissionScope.STORE,
15
- PermissionScope.GROUP,
16
13
  PermissionScope.LEVEL_1,
17
14
  PermissionScope.LEVEL_2,
18
15
  PermissionScope.LEVEL_3,
19
16
  ]);
20
17
  });
21
18
 
22
- it('tableSuffixForLevel mapea cada nivel de retail a su sufijo de tabla', () => {
23
- expect(tableSuffixForLevel(TenantType.RETAIL, PermissionScope.RETAILER)).toBe('SharedRetailer');
24
- expect(tableSuffixForLevel(TenantType.RETAIL, PermissionScope.STORE)).toBe('SharedStore');
25
- });
26
-
27
- it('tableSuffixForLevel devuelve undefined para un nivel no mapeado (PLATFORM/TENANT son fijos)', () => {
28
- expect(tableSuffixForLevel(TenantType.RETAIL, PermissionScope.PLATFORM)).toBeUndefined();
29
- expect(tableSuffixForLevel(TenantType.RETAIL, PermissionScope.TENANT)).toBeUndefined();
30
- });
31
-
32
19
  it('scopeRankOrder no produce duplicados', () => {
33
20
  const order = scopeRankOrder();
34
21
  expect(new Set(order).size).toBe(order.length);
35
22
  });
36
-
37
- it('agents define un único nivel GROUP debajo de TENANT', () => {
38
- expect(levelsOf(TenantType.AGENTS)).toEqual([PermissionScope.GROUP]);
39
- });
40
-
41
- it('agents mapea GROUP a su sufijo de tabla SharedGroup', () => {
42
- expect(TENANT_TYPES[TenantType.AGENTS].tableSuffix).toEqual({ [PermissionScope.GROUP]: 'SharedGroup' });
43
- expect(tableSuffixForLevel(TenantType.AGENTS, PermissionScope.GROUP)).toBe('SharedGroup');
44
- });
45
-
46
- it('scopeRankOrder incluye GROUP (vía los levels de agents) seguido de los niveles genéricos LEVEL_1/2/3', () => {
47
- expect(scopeRankOrder()).toEqual([
48
- PermissionScope.PLATFORM,
49
- PermissionScope.TENANT,
50
- PermissionScope.RETAILER,
51
- PermissionScope.STORE,
52
- PermissionScope.GROUP,
53
- PermissionScope.LEVEL_1,
54
- PermissionScope.LEVEL_2,
55
- PermissionScope.LEVEL_3,
56
- ]);
57
- });
58
23
  });
@@ -1,5 +1,4 @@
1
1
  import { TokenValidationMode } from '../enums/TokenValidationMode';
2
- import { TenantType } from '../tenantTypes';
3
2
  /**
4
3
  * Punto inicial de la política 2FA elegido en el alta del tenant (DEC-RBAC-064). Para el CREATE
5
4
  * ambos campos son OPCIONALES: es un override del punto de partida — si se omite, el onboarding
@@ -35,10 +34,12 @@ export declare class CreateTenantRequest {
35
34
  region: string;
36
35
  tokenValidationMode?: TokenValidationMode;
37
36
  /**
38
- * Tipo de tenant a crear. Si se omite, el onboarding aplica su default (hoy: retail).
39
- * @deprecated DEC-RBAC-062/063: el alta se hace por `applicationId`; `tenantType` se elimina al consolidar niveles. Migración pendiente; no usar en código nuevo.
37
+ * Tipo de tenant a crear (legacy). El alta se hace por `applicationId`.
38
+ * @deprecated DEC-RBAC-062/063: los tenant-types de dominio fueron purgados (v4.0.0, BREAKING).
39
+ * El alta se hace por `applicationId`; `tenantType` queda como string libre solo por back-compat
40
+ * del shape del body. No usar en código nuevo.
40
41
  */
41
- tenantType?: TenantType;
42
+ tenantType?: string;
42
43
  /** DEC-RBAC-034: aplicación (plantilla) de la que se crea el tenant; opcional, fallback a tenantType (back-compat). */
43
44
  applicationId?: string;
44
45
  /**
@@ -13,7 +13,6 @@ exports.CreateTenantRequest = exports.CreateTenantSecurityPolicy = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const TokenValidationMode_1 = require("../enums/TokenValidationMode");
16
- const tenantTypes_1 = require("../tenantTypes");
17
16
  /**
18
17
  * Punto inicial de la política 2FA elegido en el alta del tenant (DEC-RBAC-064). Para el CREATE
19
18
  * ambos campos son OPCIONALES: es un override del punto de partida — si se omite, el onboarding
@@ -91,7 +90,7 @@ __decorate([
91
90
  __decorate([
92
91
  (0, class_transformer_1.Expose)(),
93
92
  (0, class_validator_1.IsOptional)(),
94
- (0, class_validator_1.IsEnum)(tenantTypes_1.TenantType),
93
+ (0, class_validator_1.IsString)(),
95
94
  __metadata("design:type", String)
96
95
  ], CreateTenantRequest.prototype, "tenantType", void 0);
97
96
  __decorate([
@@ -0,0 +1,22 @@
1
+ import { MfaMethodEnum } from '../enums/MfaMethodEnum';
2
+ /**
3
+ * Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
4
+ * Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
5
+ * identidad SIN password. `tenantId` obligatorio (DEC-064 — el picker ya lo resolvió, NO "solo email").
6
+ * El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
7
+ * siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
8
+ */
9
+ export declare class ResendOtpRequest {
10
+ email: string;
11
+ tenantId: string;
12
+ }
13
+ /**
14
+ * Respuesta del resend-otp. `session`/`mfaMethod` frescos del nuevo challenge CUSTOM_AUTH.
15
+ * Plain sin validators (no validamos lo que mandamos al cliente — fiado-validation-and-dtos § 7).
16
+ * Ambos opcionales: en los caminos de rechazo silencioso (anti-enumeración) o ramas sin CUSTOM_AUTH
17
+ * el server responde 200 genérico sin session ni método.
18
+ */
19
+ export interface ResendOtpResponse {
20
+ session?: string;
21
+ mfaMethod?: MfaMethodEnum;
22
+ }
@@ -9,25 +9,28 @@ 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.CancelFundingRequest = void 0;
12
+ exports.ResendOtpRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
13
14
  const class_validator_1 = require("class-validator");
14
15
  /**
15
- * Request del cancel via Centro de Beneficios (spec 13 v2.0).
16
- * `fundingId` viaja en el path, `directoryId` se resuelve del JWT.
17
- * `providerModuleName` permite al marketplace rutear al publisher correcto
18
- * sin tener que persistir el mapping (el wallet-app sabe el moduleName
19
- * porque vino en la respuesta del authorize).
16
+ * Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
17
+ * Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
18
+ * identidad SIN password. `tenantId` obligatorio (DEC-064 el picker ya lo resolvió, NO "solo email").
19
+ * El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
20
+ * siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
20
21
  */
21
- class CancelFundingRequest {
22
+ class ResendOtpRequest {
22
23
  }
23
- exports.CancelFundingRequest = CancelFundingRequest;
24
+ exports.ResendOtpRequest = ResendOtpRequest;
24
25
  __decorate([
25
- (0, class_validator_1.IsString)(),
26
- (0, class_validator_1.MaxLength)(64),
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsEmail)(),
28
+ (0, class_validator_1.IsNotEmpty)(),
27
29
  __metadata("design:type", String)
28
- ], CancelFundingRequest.prototype, "idempotencyKey", void 0);
30
+ ], ResendOtpRequest.prototype, "email", void 0);
29
31
  __decorate([
32
+ (0, class_transformer_1.Expose)(),
30
33
  (0, class_validator_1.IsString)(),
31
- (0, class_validator_1.MaxLength)(128),
34
+ (0, class_validator_1.IsNotEmpty)(),
32
35
  __metadata("design:type", String)
33
- ], CancelFundingRequest.prototype, "providerModuleName", void 0);
36
+ ], ResendOtpRequest.prototype, "tenantId", void 0);
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
3
+ * Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
4
+ * `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
5
+ * server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
6
+ * scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
7
+ */
8
+ export declare class ResendSelfRegisterOtpRequest {
9
+ tenantId: string;
10
+ email: string;
11
+ }
@@ -9,28 +9,28 @@ 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.MfaPoolConfig = void 0;
12
+ exports.ResendSelfRegisterOtpRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
- const MfaTypesRequiresOne_1 = require("../validators/MfaTypesRequiresOne");
16
- // EMAIL_OTP removido (3.41.0): el cognito-backoffice-connector no provisiona
17
- // EmailMfaConfiguration a nivel pool (requiere infra SES que no está montada
18
- // y la integración con messages-lambda aún no tiene diseño). Ver TD-020 +
19
- // DEC-001 en cognito-backoffice-connector/docs/. Si se reintroduce, agregar
20
- // 'EMAIL_OTP' a este array.
21
- const ALLOWED_MFA_TYPES = ['SOFTWARE_TOKEN_MFA'];
22
- class MfaPoolConfig {
15
+ /**
16
+ * Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
17
+ * Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
18
+ * `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
19
+ * server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
20
+ * scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
21
+ */
22
+ class ResendSelfRegisterOtpRequest {
23
23
  }
24
- exports.MfaPoolConfig = MfaPoolConfig;
24
+ exports.ResendSelfRegisterOtpRequest = ResendSelfRegisterOtpRequest;
25
25
  __decorate([
26
26
  (0, class_transformer_1.Expose)(),
27
- (0, class_validator_1.IsBoolean)(),
28
- __metadata("design:type", Boolean)
29
- ], MfaPoolConfig.prototype, "requireMfa", void 0);
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.IsNotEmpty)(),
29
+ __metadata("design:type", String)
30
+ ], ResendSelfRegisterOtpRequest.prototype, "tenantId", void 0);
30
31
  __decorate([
31
32
  (0, class_transformer_1.Expose)(),
32
- (0, class_validator_1.IsArray)(),
33
- (0, class_validator_1.IsIn)(ALLOWED_MFA_TYPES, { each: true }),
34
- (0, class_validator_1.Validate)(MfaTypesRequiresOne_1.MfaTypesRequiresOne),
35
- __metadata("design:type", Array)
36
- ], MfaPoolConfig.prototype, "mfaTypes", void 0);
33
+ (0, class_validator_1.IsEmail)(),
34
+ (0, class_validator_1.IsNotEmpty)(),
35
+ __metadata("design:type", String)
36
+ ], ResendSelfRegisterOtpRequest.prototype, "email", void 0);
@@ -79,83 +79,6 @@ export declare enum Permission {
79
79
  TENANT_BRANDING_MANAGE = "tenant.branding.manage",
80
80
  TENANT_AUDIT_VIEW = "tenant.audit.view",
81
81
  TENANT_LEVEL_MANAGE = "tenant.level.manage",
82
- RETAIL_USER_CREATE = "retail.user.create",
83
- RETAIL_USER_CREATE_LATERAL = "retail.user.create.lateral",
84
- RETAIL_USER_READ = "retail.user.read",
85
- RETAIL_USER_UPDATE = "retail.user.update",
86
- RETAIL_USER_STATUS = "retail.user.status",
87
- RETAIL_USER_DELETE = "retail.user.delete",
88
- RETAIL_USER_PASSWORD_RESET = "retail.user.password.reset",
89
- RETAIL_USER_MFA_RESET = "retail.user.mfa.reset",
90
- RETAIL_PRODUCT_CREATE = "retail.product.create",
91
- RETAIL_PRODUCT_LIST = "retail.product.list",
92
- RETAIL_PRODUCT_VIEW = "retail.product.view",
93
- RETAIL_PRODUCT_UPDATE = "retail.product.update",
94
- RETAIL_PRODUCT_DELETE = "retail.product.delete",
95
- /** @deprecated DEC-RBAC-061: se renombrará a 'retail.product.mdm.config' (naming con puntos). Migración de datos coordinada por backend pendiente; no usar en código nuevo. */
96
- RETAIL_PRODUCT_MDM_CONFIG = "retail.product.mdm_config",
97
- RETAIL_INVENTORY_LIST = "retail.inventory.list",
98
- RETAIL_INVENTORY_VIEW = "retail.inventory.view",
99
- RETAIL_INVENTORY_UPDATE = "retail.inventory.update",
100
- RETAIL_SALE_CREATE = "retail.sale.create",
101
- RETAIL_SALE_LIST = "retail.sale.list",
102
- RETAIL_SALE_CANCEL = "retail.sale.cancel",
103
- RETAIL_STORE_MANAGE = "retail.store.manage",
104
- RETAIL_RETAILER_MANAGE = "retail.retailer.manage",
105
- LEND_CREDIT_CREATE = "lend.credit.create",
106
- LEND_CREDIT_LIST = "lend.credit.list",
107
- LEND_CREDIT_VIEW = "lend.credit.view",
108
- LEND_CREDIT_UPDATE = "lend.credit.update",
109
- LEND_CREDIT_LIQUIDATE = "lend.credit.liquidate",
110
- LEND_CREDIT_RESTRUCTURE = "lend.credit.restructure",
111
- LEND_PAYMENT_APPLY = "lend.payment.apply",
112
- LEND_PAYMENT_LIST = "lend.payment.list",
113
- LEND_PAYMENT_REVERSE = "lend.payment.reverse",
114
- LEND_INSTALLMENT_VIEW = "lend.installment.view",
115
- MDM_DEVICE_ENROLL = "mdm.device.enroll",
116
- MDM_DEVICE_RELEASE = "mdm.device.release",
117
- MDM_DEVICE_ARCHIVE = "mdm.device.archive",
118
- MDM_DEVICE_DEACTIVATE = "mdm.device.deactivate",
119
- MDM_DEVICE_LOCK_MANUAL = "mdm.device.lock.manual",
120
- MDM_DEVICE_UNLOCK_MANUAL = "mdm.device.unlock.manual",
121
- /** @deprecated DEC-RBAC-061: se renombrará a 'mdm.device.pin.unlock' (naming con puntos). Migración de datos coordinada por backend pendiente; no usar en código nuevo. */
122
- MDM_DEVICE_PIN_UNLOCK = "mdm.device.pin_unlock",
123
- /** @deprecated DEC-RBAC-061: se renombrará a 'mdm.device.extend.validity' (naming con puntos). Migración de datos coordinada por backend pendiente; no usar en código nuevo. */
124
- MDM_DEVICE_EXTEND_VALIDITY = "mdm.device.extend_validity",
125
- MDM_DEVICE_NOTIFY = "mdm.device.notify",
126
- MDM_DEVICE_STATUS_VIEW = "mdm.device.status.view",
127
- /** @deprecated DEC-RBAC-061: se renombrará a 'mdm.operation.log.view' (naming con puntos). Migración de datos coordinada por backend pendiente; no usar en código nuevo. */
128
- MDM_OPERATION_LOG_VIEW = "mdm.operation_log.view",
129
- MDM_TEST = "mdm.test",
130
- PAY_TRANSACTION_VIEW = "pay.transaction.view",
131
- AGENTS_APP_ACCESS = "agents.app.access",
132
- AGENTS_AGENT_LIST = "agents.agent.list",
133
- AGENTS_AGENT_CREATE = "agents.agent.create",
134
- /** @deprecated DEC-RBAC-061: se renombrará a 'agents.agent.create.bulk' (naming con puntos). Migración de datos coordinada por backend pendiente; no usar en código nuevo. */
135
- AGENTS_AGENT_CREATE_BULK = "agents.agent.create_bulk",
136
- AGENTS_AGENT_MOVE = "agents.agent.move",
137
- AGENTS_AGENT_DELETE = "agents.agent.delete",
138
- AGENTS_REFERRAL_VIEW = "agents.referral.view",
139
- AGENTS_RANKING_VIEW = "agents.ranking.view",
140
- AGENTS_PRODUCTION_VIEW = "agents.production.view",
141
- AGENTS_PERSON_SEARCH = "agents.person.search",
142
- AGENTS_PERSON_VIEW = "agents.person.view",
143
- AGENTS_PERSON_UPDATE = "agents.person.update",
144
- AGENTS_PERSON_CREATE = "agents.person.create",
145
- AGENTS_DOCUMENT_VIEW = "agents.document.view",
146
- AGENTS_DOCUMENT_UPLOAD = "agents.document.upload",
147
- AGENTS_ADDRESS_VIEW = "agents.address.view",
148
- AGENTS_ADDRESS_MANAGE = "agents.address.manage",
149
- AGENTS_BENEFICIARY_VIEW = "agents.beneficiary.view",
150
- AGENTS_BENEFICIARY_MANAGE = "agents.beneficiary.manage",
151
- AGENTS_CARD_ISSUE = "agents.card.issue",
152
- AGENTS_CHAT_VIEW = "agents.chat.view",
153
- AGENTS_CHAT_SEND = "agents.chat.send",
154
- AGENTS_NOTIFICATION_SEND = "agents.notification.send",
155
- AGENTS_EXPORT_RUN = "agents.export.run",
156
- AGENTS_CATALOG_VIEW = "agents.catalog.view",
157
- AGENTS_GROUP_MANAGE = "agents.group.manage",
158
- AGENTS_GROUP_USER_MANAGE = "agents.group.user.manage",
159
82
  LEVEL1_USER_CREATE = "level1.user.create",
160
83
  LEVEL1_USER_READ = "level1.user.read",
161
84
  LEVEL1_USER_UPDATE = "level1.user.update",