@fiado/type-kit 3.118.0 → 3.120.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 (70) hide show
  1. package/_test_/unit/platformRbac/dtos/CreateTenantRequest.test.ts +4 -11
  2. package/_test_/unit/platformRbac/dtos/UpdateTenantAutoregisterRequest.test.ts +71 -0
  3. package/_test_/unit/platformRbac/enums/__snapshots__/permissionBits.test.ts.snap +2 -1
  4. package/_test_/unit/platformRbac/enums/autoregisterPermission.test.ts +15 -0
  5. package/bin/index.d.ts +2 -0
  6. package/bin/index.js +4 -2
  7. package/bin/offices/dtos/CreateOfficeRequest.d.ts +15 -0
  8. package/bin/offices/dtos/CreateOfficeRequest.js +58 -0
  9. package/bin/offices/dtos/OfficeDto.d.ts +16 -0
  10. package/bin/offices/dtos/OfficeDto.js +10 -0
  11. package/bin/offices/dtos/UpdateOfficeRequest.d.ts +15 -0
  12. package/bin/offices/dtos/UpdateOfficeRequest.js +60 -0
  13. package/bin/offices/enums/OfficeStatusEnum.d.ts +4 -0
  14. package/bin/offices/enums/OfficeStatusEnum.js +8 -0
  15. package/bin/offices/index.d.ts +4 -0
  16. package/bin/offices/index.js +22 -0
  17. package/bin/places/dtos/EstablishmentDto.d.ts +20 -0
  18. package/bin/places/dtos/EstablishmentDto.js +10 -0
  19. package/bin/places/dtos/GetNearbyPlacesRequest.d.ts +10 -0
  20. package/bin/places/dtos/GetNearbyPlacesRequest.js +39 -0
  21. package/bin/places/dtos/GetNearbyPlacesResponse.d.ts +9 -0
  22. package/bin/places/dtos/GetNearbyPlacesResponse.js +9 -0
  23. package/bin/places/dtos/ReportPlaceRequest.d.ts +12 -0
  24. package/bin/places/dtos/ReportPlaceRequest.js +44 -0
  25. package/bin/places/dtos/ReportedPlaceDto.d.ts +14 -0
  26. package/bin/places/dtos/ReportedPlaceDto.js +10 -0
  27. package/bin/places/dtos/ResolveReportedPlaceRequest.d.ts +10 -0
  28. package/bin/places/dtos/ResolveReportedPlaceRequest.js +35 -0
  29. package/bin/places/enums/EstablishmentBrandEnum.d.ts +6 -0
  30. package/bin/places/enums/EstablishmentBrandEnum.js +11 -0
  31. package/bin/places/enums/PlaceTypeEnum.d.ts +4 -0
  32. package/bin/places/enums/PlaceTypeEnum.js +8 -0
  33. package/bin/places/enums/ReportReasonEnum.d.ts +5 -0
  34. package/bin/places/enums/ReportReasonEnum.js +9 -0
  35. package/bin/places/enums/ResolveReportedActionEnum.d.ts +4 -0
  36. package/bin/places/enums/ResolveReportedActionEnum.js +8 -0
  37. package/bin/places/index.d.ts +10 -0
  38. package/bin/places/index.js +28 -0
  39. package/bin/platformRbac/application/Application.d.ts +0 -10
  40. package/bin/platformRbac/dtos/CreateTenantRequest.d.ts +0 -2
  41. package/bin/platformRbac/dtos/CreateTenantRequest.js +0 -13
  42. package/bin/platformRbac/dtos/UpdateTenantAutoregisterRequest.d.ts +26 -0
  43. package/bin/platformRbac/dtos/UpdateTenantAutoregisterRequest.js +73 -0
  44. package/bin/platformRbac/enums/Permission.d.ts +1 -0
  45. package/bin/platformRbac/enums/Permission.js +6 -0
  46. package/bin/platformRbac/index.d.ts +1 -0
  47. package/bin/platformRbac/index.js +4 -0
  48. package/package.json +1 -1
  49. package/src/index.ts +2 -0
  50. package/src/offices/dtos/CreateOfficeRequest.ts +39 -0
  51. package/src/offices/dtos/OfficeDto.ts +17 -0
  52. package/src/offices/dtos/UpdateOfficeRequest.ts +41 -0
  53. package/src/offices/enums/OfficeStatusEnum.ts +4 -0
  54. package/src/offices/index.ts +7 -0
  55. package/src/places/dtos/EstablishmentDto.ts +21 -0
  56. package/src/places/dtos/GetNearbyPlacesRequest.ts +23 -0
  57. package/src/places/dtos/GetNearbyPlacesResponse.ts +10 -0
  58. package/src/places/dtos/ReportPlaceRequest.ts +27 -0
  59. package/src/places/dtos/ReportedPlaceDto.ts +14 -0
  60. package/src/places/dtos/ResolveReportedPlaceRequest.ts +19 -0
  61. package/src/places/enums/EstablishmentBrandEnum.ts +7 -0
  62. package/src/places/enums/PlaceTypeEnum.ts +4 -0
  63. package/src/places/enums/ReportReasonEnum.ts +5 -0
  64. package/src/places/enums/ResolveReportedActionEnum.ts +4 -0
  65. package/src/places/index.ts +13 -0
  66. package/src/platformRbac/application/Application.ts +4 -5
  67. package/src/platformRbac/dtos/CreateTenantRequest.ts +4 -3
  68. package/src/platformRbac/dtos/UpdateTenantAutoregisterRequest.ts +46 -0
  69. package/src/platformRbac/enums/Permission.ts +6 -0
  70. package/src/platformRbac/index.ts +5 -0
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EstablishmentBrandEnum = void 0;
4
+ var EstablishmentBrandEnum;
5
+ (function (EstablishmentBrandEnum) {
6
+ EstablishmentBrandEnum["WALMART"] = "WALMART";
7
+ EstablishmentBrandEnum["SEVEN_ELEVEN"] = "SEVEN_ELEVEN";
8
+ EstablishmentBrandEnum["CVS"] = "CVS";
9
+ EstablishmentBrandEnum["DOLLAR_TREE"] = "DOLLAR_TREE";
10
+ // RITE_AID eliminada (2026-06-24): la cadena desapareció tras su bancarrota de 2025.
11
+ })(EstablishmentBrandEnum || (exports.EstablishmentBrandEnum = EstablishmentBrandEnum = {}));
@@ -0,0 +1,4 @@
1
+ export declare enum PlaceTypeEnum {
2
+ CashInUs = "CashInUs",
3
+ OfficeFiado = "OfficeFiado"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaceTypeEnum = void 0;
4
+ var PlaceTypeEnum;
5
+ (function (PlaceTypeEnum) {
6
+ PlaceTypeEnum["CashInUs"] = "CashInUs";
7
+ PlaceTypeEnum["OfficeFiado"] = "OfficeFiado";
8
+ })(PlaceTypeEnum || (exports.PlaceTypeEnum = PlaceTypeEnum = {}));
@@ -0,0 +1,5 @@
1
+ export declare enum ReportReasonEnum {
2
+ NO_EXISTE = "NO_EXISTE",
3
+ CERRADO = "CERRADO",
4
+ UBICACION_INCORRECTA = "UBICACION_INCORRECTA"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportReasonEnum = void 0;
4
+ var ReportReasonEnum;
5
+ (function (ReportReasonEnum) {
6
+ ReportReasonEnum["NO_EXISTE"] = "NO_EXISTE";
7
+ ReportReasonEnum["CERRADO"] = "CERRADO";
8
+ ReportReasonEnum["UBICACION_INCORRECTA"] = "UBICACION_INCORRECTA";
9
+ })(ReportReasonEnum || (exports.ReportReasonEnum = ReportReasonEnum = {}));
@@ -0,0 +1,4 @@
1
+ export declare enum ResolveReportedActionEnum {
2
+ CONFIRM = "CONFIRM",
3
+ DISMISS = "DISMISS"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResolveReportedActionEnum = void 0;
4
+ var ResolveReportedActionEnum;
5
+ (function (ResolveReportedActionEnum) {
6
+ ResolveReportedActionEnum["CONFIRM"] = "CONFIRM";
7
+ ResolveReportedActionEnum["DISMISS"] = "DISMISS";
8
+ })(ResolveReportedActionEnum || (exports.ResolveReportedActionEnum = ResolveReportedActionEnum = {}));
@@ -0,0 +1,10 @@
1
+ export * from './dtos/EstablishmentDto';
2
+ export * from './dtos/GetNearbyPlacesRequest';
3
+ export * from './dtos/GetNearbyPlacesResponse';
4
+ export * from './dtos/ReportPlaceRequest';
5
+ export * from './dtos/ReportedPlaceDto';
6
+ export * from './dtos/ResolveReportedPlaceRequest';
7
+ export * from './enums/PlaceTypeEnum';
8
+ export * from './enums/EstablishmentBrandEnum';
9
+ export * from './enums/ReportReasonEnum';
10
+ export * from './enums/ResolveReportedActionEnum';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ //dtos
18
+ __exportStar(require("./dtos/EstablishmentDto"), exports);
19
+ __exportStar(require("./dtos/GetNearbyPlacesRequest"), exports);
20
+ __exportStar(require("./dtos/GetNearbyPlacesResponse"), exports);
21
+ __exportStar(require("./dtos/ReportPlaceRequest"), exports);
22
+ __exportStar(require("./dtos/ReportedPlaceDto"), exports);
23
+ __exportStar(require("./dtos/ResolveReportedPlaceRequest"), exports);
24
+ //enums
25
+ __exportStar(require("./enums/PlaceTypeEnum"), exports);
26
+ __exportStar(require("./enums/EstablishmentBrandEnum"), exports);
27
+ __exportStar(require("./enums/ReportReasonEnum"), exports);
28
+ __exportStar(require("./enums/ResolveReportedActionEnum"), exports);
@@ -8,16 +8,7 @@ export interface LevelDef {
8
8
  }
9
9
  export interface ApplicationSecurityPolicyDefault {
10
10
  mfaEnabled?: boolean;
11
- mfaRequired?: boolean;
12
11
  methodsAllowed?: Array<'TOTP' | 'EMAIL'>;
13
- defaultPreferred?: 'TOTP' | 'EMAIL';
14
- sessionTimeoutMin?: number;
15
- passwordPolicy?: {
16
- minLength: number;
17
- requireSymbol: boolean;
18
- requireNumber: boolean;
19
- requireUppercase: boolean;
20
- };
21
12
  }
22
13
  export interface ApplicationBrandingDefault {
23
14
  logoUrl?: string;
@@ -26,7 +17,6 @@ export interface ApplicationBrandingDefault {
26
17
  accentColor?: string;
27
18
  logoWidth?: number;
28
19
  faviconUrl?: string;
29
- webappBaseUrl?: string;
30
20
  }
31
21
  export interface AutoregisterAllowedRole {
32
22
  roleId: string;
@@ -14,8 +14,6 @@ export declare class CreateTenantRequest {
14
14
  adminEmail: string;
15
15
  adminName: string;
16
16
  region: string;
17
- mfaRequired?: boolean;
18
- passwordMinLength?: number;
19
17
  tokenValidationMode?: TokenValidationMode;
20
18
  /** Tipo de tenant a crear. Si se omite, el onboarding aplica su default (hoy: retail). */
21
19
  tenantType?: TenantType;
@@ -55,19 +55,6 @@ __decorate([
55
55
  (0, class_validator_1.IsString)(),
56
56
  __metadata("design:type", String)
57
57
  ], CreateTenantRequest.prototype, "region", void 0);
58
- __decorate([
59
- (0, class_transformer_1.Expose)(),
60
- (0, class_validator_1.IsOptional)(),
61
- (0, class_validator_1.IsBoolean)(),
62
- __metadata("design:type", Boolean)
63
- ], CreateTenantRequest.prototype, "mfaRequired", void 0);
64
- __decorate([
65
- (0, class_transformer_1.Expose)(),
66
- (0, class_validator_1.IsOptional)(),
67
- (0, class_validator_1.IsInt)(),
68
- (0, class_validator_1.Min)(8),
69
- __metadata("design:type", Number)
70
- ], CreateTenantRequest.prototype, "passwordMinLength", void 0);
71
58
  __decorate([
72
59
  (0, class_transformer_1.Expose)(),
73
60
  (0, class_validator_1.IsOptional)(),
@@ -0,0 +1,26 @@
1
+ import { PermissionScope } from '../enums/PermissionScope';
2
+ /**
3
+ * Un rol auto-asignable de la allowlist anti-escalación (DEC-RBAC-038). Espejo validado de
4
+ * `AutoregisterAllowedRole` (interface plain de application/Application), usado como body de un
5
+ * endpoint backoffice → se hidrata con plainToInstance y se valida con class-validator.
6
+ */
7
+ export declare class UpdateTenantAutoregisterAllowedRole {
8
+ roleId: string;
9
+ scope: PermissionScope;
10
+ allowedScopeRefs?: string[];
11
+ }
12
+ /**
13
+ * Body del PUT /tenants/{tenantId}/autoregister (backoffice, operación solo-platform — DEC-RBAC-050).
14
+ * Edita la config de autoregistro self-service del tenant (DEC-RBAC-038): master switch `enabled`,
15
+ * la allowlist anti-escalación `allowedRoles` (cada rol ⊆ roles del tenant — validado server-side) y
16
+ * el TTL del OTP. El permiso requerido es `platform.tenant.autoregister.manage` (scope PLATFORM): la
17
+ * allowlist es un catálogo centralizado/platform, no una config cosmética per-tenant.
18
+ *
19
+ * Se separa de `AutoregisterConfig` (interface plain, sin validators) porque éste es un boundary de
20
+ * entrada del lambda y debe validarse con class-validator (regla entradas tipadas + validadas).
21
+ */
22
+ export declare class UpdateTenantAutoregisterRequest {
23
+ enabled: boolean;
24
+ allowedRoles: UpdateTenantAutoregisterAllowedRole[];
25
+ otpTtlSeconds?: number;
26
+ }
@@ -0,0 +1,73 @@
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.UpdateTenantAutoregisterRequest = exports.UpdateTenantAutoregisterAllowedRole = 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
+ * Un rol auto-asignable de la allowlist anti-escalación (DEC-RBAC-038). Espejo validado de
18
+ * `AutoregisterAllowedRole` (interface plain de application/Application), usado como body de un
19
+ * endpoint backoffice → se hidrata con plainToInstance y se valida con class-validator.
20
+ */
21
+ class UpdateTenantAutoregisterAllowedRole {
22
+ }
23
+ exports.UpdateTenantAutoregisterAllowedRole = UpdateTenantAutoregisterAllowedRole;
24
+ __decorate([
25
+ (0, class_transformer_1.Expose)(),
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsNotEmpty)(),
28
+ __metadata("design:type", String)
29
+ ], UpdateTenantAutoregisterAllowedRole.prototype, "roleId", void 0);
30
+ __decorate([
31
+ (0, class_transformer_1.Expose)(),
32
+ (0, class_validator_1.IsEnum)(PermissionScope_1.PermissionScope),
33
+ __metadata("design:type", String)
34
+ ], UpdateTenantAutoregisterAllowedRole.prototype, "scope", void 0);
35
+ __decorate([
36
+ (0, class_transformer_1.Expose)(),
37
+ (0, class_validator_1.IsOptional)(),
38
+ (0, class_validator_1.IsArray)(),
39
+ (0, class_validator_1.IsString)({ each: true }),
40
+ __metadata("design:type", Array)
41
+ ], UpdateTenantAutoregisterAllowedRole.prototype, "allowedScopeRefs", void 0);
42
+ /**
43
+ * Body del PUT /tenants/{tenantId}/autoregister (backoffice, operación solo-platform — DEC-RBAC-050).
44
+ * Edita la config de autoregistro self-service del tenant (DEC-RBAC-038): master switch `enabled`,
45
+ * la allowlist anti-escalación `allowedRoles` (cada rol ⊆ roles del tenant — validado server-side) y
46
+ * el TTL del OTP. El permiso requerido es `platform.tenant.autoregister.manage` (scope PLATFORM): la
47
+ * allowlist es un catálogo centralizado/platform, no una config cosmética per-tenant.
48
+ *
49
+ * Se separa de `AutoregisterConfig` (interface plain, sin validators) porque éste es un boundary de
50
+ * entrada del lambda y debe validarse con class-validator (regla entradas tipadas + validadas).
51
+ */
52
+ class UpdateTenantAutoregisterRequest {
53
+ }
54
+ exports.UpdateTenantAutoregisterRequest = UpdateTenantAutoregisterRequest;
55
+ __decorate([
56
+ (0, class_transformer_1.Expose)(),
57
+ (0, class_validator_1.IsBoolean)(),
58
+ __metadata("design:type", Boolean)
59
+ ], UpdateTenantAutoregisterRequest.prototype, "enabled", void 0);
60
+ __decorate([
61
+ (0, class_transformer_1.Expose)(),
62
+ (0, class_validator_1.IsArray)(),
63
+ (0, class_validator_1.ValidateNested)({ each: true }),
64
+ (0, class_transformer_1.Type)(() => UpdateTenantAutoregisterAllowedRole),
65
+ __metadata("design:type", Array)
66
+ ], UpdateTenantAutoregisterRequest.prototype, "allowedRoles", void 0);
67
+ __decorate([
68
+ (0, class_transformer_1.Expose)(),
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsInt)(),
71
+ (0, class_validator_1.Min)(1),
72
+ __metadata("design:type", Number)
73
+ ], UpdateTenantAutoregisterRequest.prototype, "otpTtlSeconds", void 0);
@@ -53,6 +53,7 @@ export declare enum Permission {
53
53
  PLATFORM_ROLE_DELETE = "platform.role.delete",
54
54
  PLATFORM_AUDIT_VIEW = "platform.audit.view",
55
55
  PLATFORM_TENANT_USERFIELDS_MANAGE = "platform.tenant.userfields.manage",
56
+ PLATFORM_TENANT_AUTOREGISTER_MANAGE = "platform.tenant.autoregister.manage",
56
57
  PLATFORM_APPLICATION_MANAGE = "platform.application.manage",
57
58
  TENANT_USER_CREATE = "tenant.user.create",
58
59
  TENANT_USER_CREATE_LATERAL = "tenant.user.create.lateral",
@@ -68,6 +68,9 @@ var Permission;
68
68
  Permission["PLATFORM_ROLE_DELETE"] = "platform.role.delete";
69
69
  Permission["PLATFORM_AUDIT_VIEW"] = "platform.audit.view";
70
70
  Permission["PLATFORM_TENANT_USERFIELDS_MANAGE"] = "platform.tenant.userfields.manage";
71
+ // DEC-RBAC-050: edición del autoregistro self-service del tenant (allowlist anti-escalación
72
+ // centralizada/platform). Espejo EXACTO de PLATFORM_TENANT_USERFIELDS_MANAGE (scope PLATFORM).
73
+ Permission["PLATFORM_TENANT_AUTOREGISTER_MANAGE"] = "platform.tenant.autoregister.manage";
71
74
  // DEC-RBAC-036: gestión de aplicaciones (plantillas) — reemplaza el reuso de rbac.catalog.manage en /applications.
72
75
  Permission["PLATFORM_APPLICATION_MANAGE"] = "platform.application.manage";
73
76
  // ====================================================
@@ -349,6 +352,9 @@ exports.PERMISSION_BIT_ORDER = [
349
352
  // Append-only 2026-06-24 (DEC-RBAC-038): gestión de scope-entities de nivel genérico (scope-bound).
350
353
  // Al FINAL para no correr bits existentes (PERMS_VERSION cambia, índices previos se conservan).
351
354
  Permission.TENANT_LEVEL_MANAGE,
355
+ // Append-only 2026-06-25 (DEC-RBAC-050): edición del autoregistro self-service del tenant (allowlist
356
+ // anti-escalación). Al FINAL para no correr bits existentes (PERMS_VERSION cambia, índices previos se conservan).
357
+ Permission.PLATFORM_TENANT_AUTOREGISTER_MANAGE,
352
358
  ];
353
359
  function djb2(input) {
354
360
  let h = 5381;
@@ -28,6 +28,7 @@ export * from './dtos/CreateTenantRequest';
28
28
  export type { CreateTenantResponse } from './dtos/CreateTenantResponse';
29
29
  export * from './dtos/UpdateTenantSecurityPolicyRequest';
30
30
  export type { TenantSecurityPolicyResponse } from './dtos/TenantSecurityPolicyResponse';
31
+ export * from './dtos/UpdateTenantAutoregisterRequest';
31
32
  export { TenantType, TENANT_TYPES, levelsOf, tableSuffixForLevel, scopeRankOrder } from './tenantTypes';
32
33
  export { UserFieldType } from './enums/UserFieldType';
33
34
  export type { UserFieldDef } from './dtos/UserFieldDef';
@@ -64,6 +64,10 @@ __exportStar(require("./dtos/CreateTenantRequest"), exports);
64
64
  // UpdateTenantSecurityPolicyRequest lleva decoradores class-validator → export de valor;
65
65
  // TenantSecurityPolicyResponse es interface plain → type-only.
66
66
  __exportStar(require("./dtos/UpdateTenantSecurityPolicyRequest"), exports);
67
+ // Autoregistro editable por tenant (DEC-RBAC-050) — body del PUT backoffice /tenants/{id}/autoregister.
68
+ // UpdateTenantAutoregisterRequest + su nested AutoregisterAllowedRole llevan decoradores class-validator
69
+ // → export de valor (se hidratan con plainToInstance en runtime).
70
+ __exportStar(require("./dtos/UpdateTenantAutoregisterRequest"), exports);
67
71
  // A1 — registro data-driven de tenant-types (niveles debajo de TENANT, por tipo).
68
72
  // Consumido por ScopeValidationService._rank vía scopeRankOrder() y por los seeds.
69
73
  // Accesible bajo el namespace PlatformRbac (el index raíz hace export * as PlatformRbac).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.118.0",
3
+ "version": "3.120.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
package/src/index.ts CHANGED
@@ -3,6 +3,8 @@ export * as Account from './account';
3
3
  export * as Activity from './activity';
4
4
  export * as Beneficiary from './beneficiary';
5
5
  export * as Address from './address';
6
+ export * as Places from './places';
7
+ export * as Offices from './offices';
6
8
  export * as App from './app';
7
9
  export * as Authentication from './authentication';
8
10
  export * as Card from './card';
@@ -0,0 +1,39 @@
1
+ import { IsArray, IsEnum, IsNotEmpty, IsNumber, IsOptional, IsString, Max, Min } from 'class-validator';
2
+ import { OperationSchedule } from '../../address/dtos/OperationSchedule';
3
+ import { OfficeStatusEnum } from '../enums/OfficeStatusEnum';
4
+
5
+ /**
6
+ * Alta de oficina desde backoffice. El backoffice envía lat/lng directo (Opción A);
7
+ * el lambda calcula el h3Cell. NO se geocodifica.
8
+ */
9
+ export class CreateOfficeRequest {
10
+ @IsString()
11
+ @IsNotEmpty()
12
+ name: string;
13
+
14
+ @IsString()
15
+ @IsNotEmpty()
16
+ address: string;
17
+
18
+ @IsNumber()
19
+ @Min(-90)
20
+ @Max(90)
21
+ latitude: number;
22
+
23
+ @IsNumber()
24
+ @Min(-180)
25
+ @Max(180)
26
+ longitude: number;
27
+
28
+ @IsOptional()
29
+ @IsString()
30
+ phone?: string;
31
+
32
+ @IsOptional()
33
+ @IsArray()
34
+ schedule?: OperationSchedule[];
35
+
36
+ @IsOptional()
37
+ @IsEnum(OfficeStatusEnum)
38
+ status?: OfficeStatusEnum;
39
+ }
@@ -0,0 +1,17 @@
1
+ import { OperationSchedule } from '../../address/dtos/OperationSchedule';
2
+ import { OfficeStatusEnum } from '../enums/OfficeStatusEnum';
3
+
4
+ /**
5
+ * Oficina de Fiado, gestionada por el backoffice (fuente de verdad, no HERE).
6
+ * Response DTO — sin decoradores.
7
+ */
8
+ export class OfficeDto {
9
+ officeId: string;
10
+ name: string;
11
+ address: string;
12
+ latitude: number;
13
+ longitude: number;
14
+ phone?: string;
15
+ schedule?: OperationSchedule[];
16
+ status: OfficeStatusEnum;
17
+ }
@@ -0,0 +1,41 @@
1
+ import { IsArray, IsEnum, IsNumber, IsOptional, IsString, Max, Min } from 'class-validator';
2
+ import { OperationSchedule } from '../../address/dtos/OperationSchedule';
3
+ import { OfficeStatusEnum } from '../enums/OfficeStatusEnum';
4
+
5
+ /**
6
+ * Edición de oficina desde backoffice. Todos los campos opcionales.
7
+ * Si cambian lat/lng, el lambda recalcula el h3Cell.
8
+ */
9
+ export class UpdateOfficeRequest {
10
+ @IsOptional()
11
+ @IsString()
12
+ name?: string;
13
+
14
+ @IsOptional()
15
+ @IsString()
16
+ address?: string;
17
+
18
+ @IsOptional()
19
+ @IsNumber()
20
+ @Min(-90)
21
+ @Max(90)
22
+ latitude?: number;
23
+
24
+ @IsOptional()
25
+ @IsNumber()
26
+ @Min(-180)
27
+ @Max(180)
28
+ longitude?: number;
29
+
30
+ @IsOptional()
31
+ @IsString()
32
+ phone?: string;
33
+
34
+ @IsOptional()
35
+ @IsArray()
36
+ schedule?: OperationSchedule[];
37
+
38
+ @IsOptional()
39
+ @IsEnum(OfficeStatusEnum)
40
+ status?: OfficeStatusEnum;
41
+ }
@@ -0,0 +1,4 @@
1
+ export enum OfficeStatusEnum {
2
+ ACTIVE = 'ACTIVE',
3
+ INACTIVE = 'INACTIVE',
4
+ }
@@ -0,0 +1,7 @@
1
+ //dtos
2
+ export * from './dtos/OfficeDto';
3
+ export * from './dtos/CreateOfficeRequest';
4
+ export * from './dtos/UpdateOfficeRequest';
5
+
6
+ //enums
7
+ export * from './enums/OfficeStatusEnum';
@@ -0,0 +1,21 @@
1
+ import { EstablishmentBrandEnum } from '../enums/EstablishmentBrandEnum';
2
+
3
+ /**
4
+ * Establecimiento (tienda de cash-in) servido desde el cache de HERE.
5
+ * Response DTO — sin decoradores de validación.
6
+ */
7
+ export class EstablishmentDto {
8
+ placeId: string;
9
+ name: string;
10
+ brand: EstablishmentBrandEnum;
11
+ latitude: number;
12
+ longitude: number;
13
+ address: string;
14
+ categories: string[];
15
+ isOpen: boolean | null;
16
+ /** epoch ms del último refresco desde HERE (UI "verificado hace X días") */
17
+ lastRefreshed: number;
18
+ /** true si la celda alcanzó el umbral de reportes de "no existe" */
19
+ reportedMissing?: boolean;
20
+ reportCount?: number;
21
+ }
@@ -0,0 +1,23 @@
1
+ import { ArrayNotEmpty, IsArray, IsEnum, IsNumber, Max, Min } from 'class-validator';
2
+ import { PlaceTypeEnum } from '../enums/PlaceTypeEnum';
3
+
4
+ /**
5
+ * Búsqueda unificada de lugares cercanos.
6
+ * `types` indica qué devolver: CashInUs (tiendas) y/o OfficeFiado (oficinas).
7
+ */
8
+ export class GetNearbyPlacesRequest {
9
+ @IsNumber()
10
+ @Min(-90)
11
+ @Max(90)
12
+ latitude: number;
13
+
14
+ @IsNumber()
15
+ @Min(-180)
16
+ @Max(180)
17
+ longitude: number;
18
+
19
+ @IsArray()
20
+ @ArrayNotEmpty()
21
+ @IsEnum(PlaceTypeEnum, { each: true })
22
+ types: PlaceTypeEnum[];
23
+ }
@@ -0,0 +1,10 @@
1
+ import { EstablishmentDto } from './EstablishmentDto';
2
+ import { OfficeDto } from '../../offices/dtos/OfficeDto';
3
+
4
+ /**
5
+ * Respuesta de la búsqueda unificada. Solo se incluyen los tipos pedidos en `types`.
6
+ */
7
+ export class GetNearbyPlacesResponse {
8
+ cashInUs?: EstablishmentDto[];
9
+ officeFiado?: OfficeDto[];
10
+ }
@@ -0,0 +1,27 @@
1
+ import { IsEnum, IsNotEmpty, IsNumber, IsOptional, IsString, Max, Min } from 'class-validator';
2
+ import { ReportReasonEnum } from '../enums/ReportReasonEnum';
3
+
4
+ /**
5
+ * Reporte del usuario de que una tienda no existe / está cerrada.
6
+ * Se cuenta solo si el usuario está cerca del lugar (validado en el lambda).
7
+ * El identificador del usuario sale del token (directoryId), NO de este request.
8
+ */
9
+ export class ReportPlaceRequest {
10
+ @IsString()
11
+ @IsNotEmpty()
12
+ placeId: string;
13
+
14
+ @IsNumber()
15
+ @Min(-90)
16
+ @Max(90)
17
+ latitude: number;
18
+
19
+ @IsNumber()
20
+ @Min(-180)
21
+ @Max(180)
22
+ longitude: number;
23
+
24
+ @IsOptional()
25
+ @IsEnum(ReportReasonEnum)
26
+ reason?: ReportReasonEnum;
27
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tienda reportada como inexistente, para revisión en backoffice.
3
+ * Response DTO — sin decoradores.
4
+ */
5
+ export class ReportedPlaceDto {
6
+ placeId: string;
7
+ h3Cell: string;
8
+ name: string;
9
+ reportCount: number;
10
+ flagged: boolean;
11
+ suppressed: boolean;
12
+ /** epoch ms del último reporte */
13
+ lastReportAt: number;
14
+ }
@@ -0,0 +1,19 @@
1
+ import { IsEnum, IsNotEmpty, IsString } from 'class-validator';
2
+ import { ResolveReportedActionEnum } from '../enums/ResolveReportedActionEnum';
3
+
4
+ /**
5
+ * Resolución del backoffice sobre una tienda reportada.
6
+ * CONFIRM = ocultar definitivo (sobrevive al refresco de HERE); DISMISS = limpiar.
7
+ */
8
+ export class ResolveReportedPlaceRequest {
9
+ @IsString()
10
+ @IsNotEmpty()
11
+ placeId: string;
12
+
13
+ @IsString()
14
+ @IsNotEmpty()
15
+ h3Cell: string;
16
+
17
+ @IsEnum(ResolveReportedActionEnum)
18
+ action: ResolveReportedActionEnum;
19
+ }
@@ -0,0 +1,7 @@
1
+ export enum EstablishmentBrandEnum {
2
+ WALMART = 'WALMART',
3
+ SEVEN_ELEVEN = 'SEVEN_ELEVEN',
4
+ CVS = 'CVS',
5
+ DOLLAR_TREE = 'DOLLAR_TREE',
6
+ // RITE_AID eliminada (2026-06-24): la cadena desapareció tras su bancarrota de 2025.
7
+ }
@@ -0,0 +1,4 @@
1
+ export enum PlaceTypeEnum {
2
+ CashInUs = 'CashInUs',
3
+ OfficeFiado = 'OfficeFiado',
4
+ }
@@ -0,0 +1,5 @@
1
+ export enum ReportReasonEnum {
2
+ NO_EXISTE = 'NO_EXISTE',
3
+ CERRADO = 'CERRADO',
4
+ UBICACION_INCORRECTA = 'UBICACION_INCORRECTA',
5
+ }
@@ -0,0 +1,4 @@
1
+ export enum ResolveReportedActionEnum {
2
+ CONFIRM = 'CONFIRM',
3
+ DISMISS = 'DISMISS',
4
+ }
@@ -0,0 +1,13 @@
1
+ //dtos
2
+ export * from './dtos/EstablishmentDto';
3
+ export * from './dtos/GetNearbyPlacesRequest';
4
+ export * from './dtos/GetNearbyPlacesResponse';
5
+ export * from './dtos/ReportPlaceRequest';
6
+ export * from './dtos/ReportedPlaceDto';
7
+ export * from './dtos/ResolveReportedPlaceRequest';
8
+
9
+ //enums
10
+ export * from './enums/PlaceTypeEnum';
11
+ export * from './enums/EstablishmentBrandEnum';
12
+ export * from './enums/ReportReasonEnum';
13
+ export * from './enums/ResolveReportedActionEnum';
@@ -11,16 +11,15 @@ export interface LevelDef {
11
11
  export interface ApplicationSecurityPolicyDefault {
12
12
  // DEC-RBAC-045: 2FA master switch por tenant. Ausente ⇒ habilitado (secure-by-default).
13
13
  mfaEnabled?: boolean;
14
- mfaRequired?: boolean;
15
14
  methodsAllowed?: Array<'TOTP' | 'EMAIL'>;
16
- defaultPreferred?: 'TOTP' | 'EMAIL';
17
- sessionTimeoutMin?: number;
18
- passwordPolicy?: { minLength: number; requireSymbol: boolean; requireNumber: boolean; requireUppercase: boolean };
15
+ // DEC-RBAC-051: purgados mfaRequired / defaultPreferred / sessionTimeoutMin (write-only sin enforcement).
16
+ // DEC-RBAC-052: passwordPolicy deja de ser per-tenant → política global por env vars (Cognito enforce).
19
17
  }
20
18
 
21
19
  export interface ApplicationBrandingDefault {
22
20
  logoUrl?: string; primaryColor?: string; secondaryColor?: string; accentColor?: string;
23
- logoWidth?: number; faviconUrl?: string; webappBaseUrl?: string;
21
+ logoWidth?: number; faviconUrl?: string;
22
+ // DEC-RBAC-053: webappBaseUrl purgado (write-only/muerto, nadie lo consume).
24
23
  }
25
24
 
26
25
  // DEC-RBAC-038: config de autoregistro self-service. Promovido desde el tipo local