@fiado/type-kit 3.13.9 → 3.15.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 (41) hide show
  1. package/bin/benefitCenter/dtos/BackofficeLeafDetailResponse.d.ts +32 -0
  2. package/bin/benefitCenter/dtos/BackofficeLeafDetailResponse.js +13 -0
  3. package/bin/benefitCenter/dtos/BackofficeLeafListItem.d.ts +21 -0
  4. package/bin/benefitCenter/dtos/BackofficeLeafListItem.js +10 -0
  5. package/bin/benefitCenter/dtos/BackofficeLeafListResponse.d.ts +6 -0
  6. package/bin/benefitCenter/dtos/BackofficeLeafListResponse.js +6 -0
  7. package/bin/benefitCenter/dtos/BackofficeLeafOverrideUpsertRequest.d.ts +22 -0
  8. package/bin/benefitCenter/dtos/BackofficeLeafOverrideUpsertRequest.js +91 -0
  9. package/bin/benefitCenter/dtos/BannerUploadUrlRequest.d.ts +14 -0
  10. package/bin/benefitCenter/dtos/BannerUploadUrlRequest.js +37 -0
  11. package/bin/benefitCenter/dtos/BannerUploadUrlResponse.d.ts +15 -0
  12. package/bin/benefitCenter/dtos/BannerUploadUrlResponse.js +14 -0
  13. package/bin/benefitCenter/dtos/ConnectorCatalogItem.d.ts +4 -0
  14. package/bin/benefitCenter/dtos/FieldOverrideRequest.d.ts +19 -0
  15. package/bin/benefitCenter/dtos/FieldOverrideRequest.js +80 -0
  16. package/bin/benefitCenter/dtos/InputSchemaOverrideRequest.d.ts +9 -0
  17. package/bin/benefitCenter/dtos/InputSchemaOverrideRequest.js +29 -0
  18. package/bin/benefitCenter/dtos/ServiceLeaf.d.ts +4 -0
  19. package/bin/benefitCenter/enums/BannerAssetKindEnum.d.ts +11 -0
  20. package/bin/benefitCenter/enums/BannerAssetKindEnum.js +15 -0
  21. package/bin/benefitCenter/enums/LeafOverrideStatusEnum.d.ts +10 -0
  22. package/bin/benefitCenter/enums/LeafOverrideStatusEnum.js +14 -0
  23. package/bin/benefitCenter/index.d.ts +10 -0
  24. package/bin/benefitCenter/index.js +12 -0
  25. package/bin/card/validations/CardUpdateKeyConstraint.js +2 -2
  26. package/bin/card/validations/IsPhoneNumberConstraint.js +2 -2
  27. package/bin/index.js +17 -7
  28. package/package.json +1 -1
  29. package/src/benefitCenter/dtos/BackofficeLeafDetailResponse.ts +37 -0
  30. package/src/benefitCenter/dtos/BackofficeLeafListItem.ts +28 -0
  31. package/src/benefitCenter/dtos/BackofficeLeafListResponse.ts +8 -0
  32. package/src/benefitCenter/dtos/BackofficeLeafOverrideUpsertRequest.ts +77 -0
  33. package/src/benefitCenter/dtos/BannerUploadUrlRequest.ts +23 -0
  34. package/src/benefitCenter/dtos/BannerUploadUrlResponse.ts +15 -0
  35. package/src/benefitCenter/dtos/ConnectorCatalogItem.ts +6 -0
  36. package/src/benefitCenter/dtos/FieldOverrideRequest.ts +67 -0
  37. package/src/benefitCenter/dtos/InputSchemaOverrideRequest.ts +15 -0
  38. package/src/benefitCenter/dtos/ServiceLeaf.ts +6 -0
  39. package/src/benefitCenter/enums/BannerAssetKindEnum.ts +11 -0
  40. package/src/benefitCenter/enums/LeafOverrideStatusEnum.ts +10 -0
  41. package/src/benefitCenter/index.ts +12 -0
@@ -0,0 +1,32 @@
1
+ import { ConnectorCatalogItem } from "./ConnectorCatalogItem";
2
+ import { LeafOverrideStatusEnum } from "../enums/LeafOverrideStatusEnum";
3
+ /**
4
+ * Override que vive en BenefitLeafOverride_GT (forma plana del item de DynamoDB).
5
+ * Los slots están definidos del lado lambda en BenefitLeafOverrideDocument;
6
+ * acá lo tipamos como Record opaco para no duplicar la definición.
7
+ *
8
+ * Los consumers del type-kit no necesitan el detalle interno — usan `effective`
9
+ * para ver el resultado final y `override` solo para saber qué campos están
10
+ * seteados.
11
+ */
12
+ export type BenefitLeafOverridePayload = Record<string, unknown>;
13
+ /**
14
+ * Response del detalle del backoffice. Trae 3 visiones del leaf:
15
+ * - base: lo que devuelve el conector (sin merge).
16
+ * - override: lo que hay en BenefitLeafOverride_GT (null si nunca se editó).
17
+ * - effective: el merge (lo que ve la app).
18
+ * Si status === ORPHANED, base y effective son null.
19
+ */
20
+ export declare class BackofficeLeafDetailResponse {
21
+ leafId: string;
22
+ benefitId: string;
23
+ moduleName: string;
24
+ serviceId: string;
25
+ base: ConnectorCatalogItem | null;
26
+ override: BenefitLeafOverridePayload | null;
27
+ effective: ConnectorCatalogItem | null;
28
+ status: LeafOverrideStatusEnum;
29
+ updatedBy: string | null;
30
+ createdAt: number | null;
31
+ updatedAt: number | null;
32
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackofficeLeafDetailResponse = void 0;
4
+ /**
5
+ * Response del detalle del backoffice. Trae 3 visiones del leaf:
6
+ * - base: lo que devuelve el conector (sin merge).
7
+ * - override: lo que hay en BenefitLeafOverride_GT (null si nunca se editó).
8
+ * - effective: el merge (lo que ve la app).
9
+ * Si status === ORPHANED, base y effective son null.
10
+ */
11
+ class BackofficeLeafDetailResponse {
12
+ }
13
+ exports.BackofficeLeafDetailResponse = BackofficeLeafDetailResponse;
@@ -0,0 +1,21 @@
1
+ import { LeafOverrideStatusEnum } from "../enums/LeafOverrideStatusEnum";
2
+ /**
3
+ * Item del listado del backoffice de leaves. Combina el estado efectivo
4
+ * (post-merge) que verá la app con metadata del override (si existe).
5
+ */
6
+ export declare class BackofficeLeafListItem {
7
+ leafId: string;
8
+ benefitId: string;
9
+ moduleName: string;
10
+ serviceId: string;
11
+ serviceName: string;
12
+ category: string;
13
+ subcategory: string;
14
+ enabled: boolean;
15
+ logo?: string;
16
+ hasOverride: boolean;
17
+ overriddenFields: string[];
18
+ status: LeafOverrideStatusEnum;
19
+ updatedBy?: string;
20
+ updatedAt?: number;
21
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackofficeLeafListItem = void 0;
4
+ /**
5
+ * Item del listado del backoffice de leaves. Combina el estado efectivo
6
+ * (post-merge) que verá la app con metadata del override (si existe).
7
+ */
8
+ class BackofficeLeafListItem {
9
+ }
10
+ exports.BackofficeLeafListItem = BackofficeLeafListItem;
@@ -0,0 +1,6 @@
1
+ import { BackofficeLeafListItem } from "./BackofficeLeafListItem";
2
+ export declare class BackofficeLeafListResponse {
3
+ items: BackofficeLeafListItem[];
4
+ /** Cursor opaco para la próxima página. Ausente → no hay más páginas. */
5
+ index?: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackofficeLeafListResponse = void 0;
4
+ class BackofficeLeafListResponse {
5
+ }
6
+ exports.BackofficeLeafListResponse = BackofficeLeafListResponse;
@@ -0,0 +1,22 @@
1
+ import { InputSchemaOverrideRequest } from "./InputSchemaOverrideRequest";
2
+ /**
3
+ * Body de PUT /backoffice/leaves/{leafId}. Upsert parcial:
4
+ * - undefined → no se toca
5
+ * - string/number/boolean seteado → pisa el valor previo del override
6
+ * - null NO se acepta (para borrar un campo, usar DELETE /fields/{fieldName})
7
+ *
8
+ * Si todos los campos llegan undefined → 400 INVALID_PATCH_PAYLOAD.
9
+ */
10
+ export declare class BackofficeLeafOverrideUpsertRequest {
11
+ serviceName?: string;
12
+ logo?: string;
13
+ description?: string;
14
+ helpText?: string;
15
+ serviceOrder?: number;
16
+ subcategoryOrder?: number;
17
+ enabled?: boolean;
18
+ category?: string;
19
+ subcategory?: string;
20
+ requiresReferenceVerification?: boolean;
21
+ inputSchema?: InputSchemaOverrideRequest;
22
+ }
@@ -0,0 +1,91 @@
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.BackofficeLeafOverrideUpsertRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const InputSchemaOverrideRequest_1 = require("./InputSchemaOverrideRequest");
16
+ /**
17
+ * Body de PUT /backoffice/leaves/{leafId}. Upsert parcial:
18
+ * - undefined → no se toca
19
+ * - string/number/boolean seteado → pisa el valor previo del override
20
+ * - null NO se acepta (para borrar un campo, usar DELETE /fields/{fieldName})
21
+ *
22
+ * Si todos los campos llegan undefined → 400 INVALID_PATCH_PAYLOAD.
23
+ */
24
+ class BackofficeLeafOverrideUpsertRequest {
25
+ }
26
+ exports.BackofficeLeafOverrideUpsertRequest = BackofficeLeafOverrideUpsertRequest;
27
+ __decorate([
28
+ (0, class_validator_1.IsOptional)(),
29
+ (0, class_validator_1.IsString)(),
30
+ (0, class_validator_1.MaxLength)(120),
31
+ __metadata("design:type", String)
32
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "serviceName", void 0);
33
+ __decorate([
34
+ (0, class_validator_1.IsOptional)(),
35
+ (0, class_validator_1.IsUrl)({ protocols: ["https"], require_protocol: true }),
36
+ (0, class_validator_1.MaxLength)(500),
37
+ __metadata("design:type", String)
38
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "logo", void 0);
39
+ __decorate([
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.MaxLength)(2000),
43
+ __metadata("design:type", String)
44
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "description", void 0);
45
+ __decorate([
46
+ (0, class_validator_1.IsOptional)(),
47
+ (0, class_validator_1.IsString)(),
48
+ (0, class_validator_1.MaxLength)(1000),
49
+ __metadata("design:type", String)
50
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "helpText", void 0);
51
+ __decorate([
52
+ (0, class_validator_1.IsOptional)(),
53
+ (0, class_validator_1.IsInt)(),
54
+ (0, class_validator_1.Min)(0),
55
+ __metadata("design:type", Number)
56
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "serviceOrder", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsInt)(),
60
+ (0, class_validator_1.Min)(0),
61
+ __metadata("design:type", Number)
62
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "subcategoryOrder", void 0);
63
+ __decorate([
64
+ (0, class_validator_1.IsOptional)(),
65
+ (0, class_validator_1.IsBoolean)(),
66
+ __metadata("design:type", Boolean)
67
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "enabled", void 0);
68
+ __decorate([
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsString)(),
71
+ (0, class_validator_1.MaxLength)(60),
72
+ (0, class_validator_1.Matches)(/^[A-Z][A-Z0-9_ ]*$/, { message: "category must be uppercase with underscores or spaces" }),
73
+ __metadata("design:type", String)
74
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "category", void 0);
75
+ __decorate([
76
+ (0, class_validator_1.IsOptional)(),
77
+ (0, class_validator_1.IsString)(),
78
+ (0, class_validator_1.MaxLength)(60),
79
+ __metadata("design:type", String)
80
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "subcategory", void 0);
81
+ __decorate([
82
+ (0, class_validator_1.IsOptional)(),
83
+ (0, class_validator_1.IsBoolean)(),
84
+ __metadata("design:type", Boolean)
85
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "requiresReferenceVerification", void 0);
86
+ __decorate([
87
+ (0, class_validator_1.IsOptional)(),
88
+ (0, class_validator_1.ValidateNested)(),
89
+ (0, class_transformer_1.Type)(() => InputSchemaOverrideRequest_1.InputSchemaOverrideRequest),
90
+ __metadata("design:type", InputSchemaOverrideRequest_1.InputSchemaOverrideRequest)
91
+ ], BackofficeLeafOverrideUpsertRequest.prototype, "inputSchema", void 0);
@@ -0,0 +1,14 @@
1
+ import { BannerAssetKindEnum } from "../enums/BannerAssetKindEnum";
2
+ /**
3
+ * Solicitud del backoffice para subir directamente un asset de banner
4
+ * (imagen, video o poster). El backend responde con una presigned URL
5
+ * de S3 a la que el cliente sube el binario por PUT, y devuelve también
6
+ * la URL pública final (CloudFront) que se guarda en el banner.
7
+ */
8
+ export declare class BannerUploadUrlRequest {
9
+ kind: BannerAssetKindEnum;
10
+ /** MIME type del archivo. Debe estar en el whitelist correspondiente al `kind`. */
11
+ contentType: string;
12
+ /** Extensión sin punto (ej. "png", "mp4"). Se usa para componer la key en S3. */
13
+ fileExtension: string;
14
+ }
@@ -0,0 +1,37 @@
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.BannerUploadUrlRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const BannerAssetKindEnum_1 = require("../enums/BannerAssetKindEnum");
15
+ /**
16
+ * Solicitud del backoffice para subir directamente un asset de banner
17
+ * (imagen, video o poster). El backend responde con una presigned URL
18
+ * de S3 a la que el cliente sube el binario por PUT, y devuelve también
19
+ * la URL pública final (CloudFront) que se guarda en el banner.
20
+ */
21
+ class BannerUploadUrlRequest {
22
+ }
23
+ exports.BannerUploadUrlRequest = BannerUploadUrlRequest;
24
+ __decorate([
25
+ (0, class_validator_1.IsEnum)(BannerAssetKindEnum_1.BannerAssetKindEnum),
26
+ __metadata("design:type", String)
27
+ ], BannerUploadUrlRequest.prototype, "kind", void 0);
28
+ __decorate([
29
+ (0, class_validator_1.IsString)(),
30
+ (0, class_validator_1.IsNotEmpty)(),
31
+ __metadata("design:type", String)
32
+ ], BannerUploadUrlRequest.prototype, "contentType", void 0);
33
+ __decorate([
34
+ (0, class_validator_1.IsString)(),
35
+ (0, class_validator_1.IsNotEmpty)(),
36
+ __metadata("design:type", String)
37
+ ], BannerUploadUrlRequest.prototype, "fileExtension", void 0);
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Respuesta con la presigned URL para subir el asset directamente a S3.
3
+ * El backoffice debe hacer `PUT uploadUrl` con header `Content-Type` exacto
4
+ * al que se solicitó, y body binario del archivo (≤ maxSizeBytes).
5
+ *
6
+ * `publicUrl` es la URL final servida vía CloudFront — esa es la que se
7
+ * guarda en `imageUrl` / `videoUrl` / `posterUrl` del banner.
8
+ */
9
+ export declare class BannerUploadUrlResponse {
10
+ uploadUrl: string;
11
+ publicUrl: string;
12
+ key: string;
13
+ expiresAt: string;
14
+ maxSizeBytes: number;
15
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BannerUploadUrlResponse = void 0;
4
+ /**
5
+ * Respuesta con la presigned URL para subir el asset directamente a S3.
6
+ * El backoffice debe hacer `PUT uploadUrl` con header `Content-Type` exacto
7
+ * al que se solicitó, y body binario del archivo (≤ maxSizeBytes).
8
+ *
9
+ * `publicUrl` es la URL final servida vía CloudFront — esa es la que se
10
+ * guarda en `imageUrl` / `videoUrl` / `posterUrl` del banner.
11
+ */
12
+ class BannerUploadUrlResponse {
13
+ }
14
+ exports.BannerUploadUrlResponse = BannerUploadUrlResponse;
@@ -24,4 +24,8 @@ export declare class ConnectorCatalogItem {
24
24
  products: ProductItem[];
25
25
  inputSchema: InputSchema;
26
26
  updatedAt: number;
27
+ /** Campo editorial solo-marketplace. Vive en BenefitLeafOverride_GT y el merger lo agrega al item devuelto. */
28
+ description?: string;
29
+ /** Campo editorial solo-marketplace. Texto corto inline en el form de pago. */
30
+ helpText?: string;
27
31
  }
@@ -0,0 +1,19 @@
1
+ import { InputFieldTypeEnum } from "../enums/InputFieldTypeEnum";
2
+ import { InputValidation } from "./InputValidation";
3
+ import { SelectOption } from "./SelectOption";
4
+ /**
5
+ * Override parcial de un field individual del `inputSchema` por `key`.
6
+ * El admin no puede agregar ni quitar fields — solo editar los existentes.
7
+ */
8
+ export declare class FieldOverrideRequest {
9
+ key: string;
10
+ type?: InputFieldTypeEnum;
11
+ label?: string;
12
+ placeholder?: string;
13
+ required?: boolean;
14
+ helpImage?: string;
15
+ showHelp?: boolean;
16
+ options?: SelectOption[];
17
+ dependsOn?: string;
18
+ validation?: InputValidation;
19
+ }
@@ -0,0 +1,80 @@
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.FieldOverrideRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const InputFieldTypeEnum_1 = require("../enums/InputFieldTypeEnum");
16
+ const InputValidation_1 = require("./InputValidation");
17
+ const SelectOption_1 = require("./SelectOption");
18
+ /**
19
+ * Override parcial de un field individual del `inputSchema` por `key`.
20
+ * El admin no puede agregar ni quitar fields — solo editar los existentes.
21
+ */
22
+ class FieldOverrideRequest {
23
+ }
24
+ exports.FieldOverrideRequest = FieldOverrideRequest;
25
+ __decorate([
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsNotEmpty)(),
28
+ __metadata("design:type", String)
29
+ ], FieldOverrideRequest.prototype, "key", void 0);
30
+ __decorate([
31
+ (0, class_validator_1.IsOptional)(),
32
+ (0, class_validator_1.IsEnum)(InputFieldTypeEnum_1.InputFieldTypeEnum),
33
+ __metadata("design:type", String)
34
+ ], FieldOverrideRequest.prototype, "type", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsOptional)(),
37
+ (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.MaxLength)(120),
39
+ __metadata("design:type", String)
40
+ ], FieldOverrideRequest.prototype, "label", void 0);
41
+ __decorate([
42
+ (0, class_validator_1.IsOptional)(),
43
+ (0, class_validator_1.IsString)(),
44
+ (0, class_validator_1.MaxLength)(120),
45
+ __metadata("design:type", String)
46
+ ], FieldOverrideRequest.prototype, "placeholder", void 0);
47
+ __decorate([
48
+ (0, class_validator_1.IsOptional)(),
49
+ (0, class_validator_1.IsBoolean)(),
50
+ __metadata("design:type", Boolean)
51
+ ], FieldOverrideRequest.prototype, "required", void 0);
52
+ __decorate([
53
+ (0, class_validator_1.IsOptional)(),
54
+ (0, class_validator_1.IsUrl)({ protocols: ["https"], require_protocol: true }),
55
+ __metadata("design:type", String)
56
+ ], FieldOverrideRequest.prototype, "helpImage", void 0);
57
+ __decorate([
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsBoolean)(),
60
+ __metadata("design:type", Boolean)
61
+ ], FieldOverrideRequest.prototype, "showHelp", void 0);
62
+ __decorate([
63
+ (0, class_validator_1.IsOptional)(),
64
+ (0, class_validator_1.IsArray)(),
65
+ (0, class_validator_1.ValidateNested)({ each: true }),
66
+ (0, class_transformer_1.Type)(() => SelectOption_1.SelectOption),
67
+ __metadata("design:type", Array)
68
+ ], FieldOverrideRequest.prototype, "options", void 0);
69
+ __decorate([
70
+ (0, class_validator_1.IsOptional)(),
71
+ (0, class_validator_1.IsString)(),
72
+ (0, class_validator_1.MaxLength)(60),
73
+ __metadata("design:type", String)
74
+ ], FieldOverrideRequest.prototype, "dependsOn", void 0);
75
+ __decorate([
76
+ (0, class_validator_1.IsOptional)(),
77
+ (0, class_validator_1.ValidateNested)(),
78
+ (0, class_transformer_1.Type)(() => InputValidation_1.InputValidation),
79
+ __metadata("design:type", InputValidation_1.InputValidation)
80
+ ], FieldOverrideRequest.prototype, "validation", void 0);
@@ -0,0 +1,9 @@
1
+ import { FieldOverrideRequest } from "./FieldOverrideRequest";
2
+ /**
3
+ * Override del inputSchema completo. El array `fieldOverrides[]` lista overrides
4
+ * parciales por `key`. La validación cruzada de que cada `key` exista en el
5
+ * inputSchema del conector la hace el manager (no se puede expresar con class-validator).
6
+ */
7
+ export declare class InputSchemaOverrideRequest {
8
+ fieldOverrides: FieldOverrideRequest[];
9
+ }
@@ -0,0 +1,29 @@
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.InputSchemaOverrideRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const FieldOverrideRequest_1 = require("./FieldOverrideRequest");
16
+ /**
17
+ * Override del inputSchema completo. El array `fieldOverrides[]` lista overrides
18
+ * parciales por `key`. La validación cruzada de que cada `key` exista en el
19
+ * inputSchema del conector la hace el manager (no se puede expresar con class-validator).
20
+ */
21
+ class InputSchemaOverrideRequest {
22
+ }
23
+ exports.InputSchemaOverrideRequest = InputSchemaOverrideRequest;
24
+ __decorate([
25
+ (0, class_validator_1.IsArray)(),
26
+ (0, class_validator_1.ValidateNested)({ each: true }),
27
+ (0, class_transformer_1.Type)(() => FieldOverrideRequest_1.FieldOverrideRequest),
28
+ __metadata("design:type", Array)
29
+ ], InputSchemaOverrideRequest.prototype, "fieldOverrides", void 0);
@@ -10,4 +10,8 @@ export declare class ServiceLeaf {
10
10
  products: ProductItem[];
11
11
  inputSchema: InputSchema;
12
12
  updatedAt: number;
13
+ /** Campo editorial solo-marketplace. Vive en BenefitLeafOverride_GT y el merger lo agrega al item devuelto. */
14
+ description?: string;
15
+ /** Campo editorial solo-marketplace. Texto corto inline en el form de pago. */
16
+ helpText?: string;
13
17
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tipo de asset que el backoffice quiere subir para un banner.
3
+ *
4
+ * Determina el whitelist de MIME types y el tamaño máximo permitido por la
5
+ * presigned URL que devuelve el backend.
6
+ */
7
+ export declare enum BannerAssetKindEnum {
8
+ IMAGE = "IMAGE",
9
+ VIDEO = "VIDEO",
10
+ POSTER = "POSTER"
11
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BannerAssetKindEnum = void 0;
4
+ /**
5
+ * Tipo de asset que el backoffice quiere subir para un banner.
6
+ *
7
+ * Determina el whitelist de MIME types y el tamaño máximo permitido por la
8
+ * presigned URL que devuelve el backend.
9
+ */
10
+ var BannerAssetKindEnum;
11
+ (function (BannerAssetKindEnum) {
12
+ BannerAssetKindEnum["IMAGE"] = "IMAGE";
13
+ BannerAssetKindEnum["VIDEO"] = "VIDEO";
14
+ BannerAssetKindEnum["POSTER"] = "POSTER";
15
+ })(BannerAssetKindEnum || (exports.BannerAssetKindEnum = BannerAssetKindEnum = {}));
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Estado de un leaf en el listado del backoffice de overrides.
3
+ *
4
+ * - ACTIVE: el override (si existe) tiene un base correspondiente en el catálogo del conector.
5
+ * - ORPHANED: existe override pero el conector ya no devuelve este leafId — el provider lo retiró.
6
+ */
7
+ export declare enum LeafOverrideStatusEnum {
8
+ ACTIVE = "ACTIVE",
9
+ ORPHANED = "ORPHANED"
10
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LeafOverrideStatusEnum = void 0;
4
+ /**
5
+ * Estado de un leaf en el listado del backoffice de overrides.
6
+ *
7
+ * - ACTIVE: el override (si existe) tiene un base correspondiente en el catálogo del conector.
8
+ * - ORPHANED: existe override pero el conector ya no devuelve este leafId — el provider lo retiró.
9
+ */
10
+ var LeafOverrideStatusEnum;
11
+ (function (LeafOverrideStatusEnum) {
12
+ LeafOverrideStatusEnum["ACTIVE"] = "ACTIVE";
13
+ LeafOverrideStatusEnum["ORPHANED"] = "ORPHANED";
14
+ })(LeafOverrideStatusEnum || (exports.LeafOverrideStatusEnum = LeafOverrideStatusEnum = {}));
@@ -10,6 +10,8 @@ export * from "./enums/BannerTemplateVariantEnum";
10
10
  export * from "./enums/FavoriteDisabledReasonEnum";
11
11
  export * from "./enums/BenefitPaymentStatusEnum";
12
12
  export * from "./enums/BenefitPaymentErrorCodeEnum";
13
+ export * from "./enums/LeafOverrideStatusEnum";
14
+ export * from "./enums/BannerAssetKindEnum";
13
15
  export * from "./dtos/BenefitItem";
14
16
  export * from "./dtos/BenefitListResponse";
15
17
  export * from "./dtos/BenefitSummary";
@@ -52,3 +54,11 @@ export * from "./dtos/BenefitPaymentRequest";
52
54
  export * from "./dtos/BenefitPaymentResponse";
53
55
  export * from "./dtos/AuthorizeBenefitsMarketplaceTransactionRequest";
54
56
  export * from "./dtos/FavoriteUpsertContext";
57
+ export * from "./dtos/FieldOverrideRequest";
58
+ export * from "./dtos/InputSchemaOverrideRequest";
59
+ export * from "./dtos/BackofficeLeafOverrideUpsertRequest";
60
+ export * from "./dtos/BackofficeLeafListItem";
61
+ export * from "./dtos/BackofficeLeafListResponse";
62
+ export * from "./dtos/BackofficeLeafDetailResponse";
63
+ export * from "./dtos/BannerUploadUrlRequest";
64
+ export * from "./dtos/BannerUploadUrlResponse";
@@ -27,6 +27,8 @@ __exportStar(require("./enums/BannerTemplateVariantEnum"), exports);
27
27
  __exportStar(require("./enums/FavoriteDisabledReasonEnum"), exports);
28
28
  __exportStar(require("./enums/BenefitPaymentStatusEnum"), exports);
29
29
  __exportStar(require("./enums/BenefitPaymentErrorCodeEnum"), exports);
30
+ __exportStar(require("./enums/LeafOverrideStatusEnum"), exports);
31
+ __exportStar(require("./enums/BannerAssetKindEnum"), exports);
30
32
  //DTOs
31
33
  __exportStar(require("./dtos/BenefitItem"), exports);
32
34
  __exportStar(require("./dtos/BenefitListResponse"), exports);
@@ -73,3 +75,13 @@ __exportStar(require("./dtos/BenefitPaymentRequest"), exports);
73
75
  __exportStar(require("./dtos/BenefitPaymentResponse"), exports);
74
76
  __exportStar(require("./dtos/AuthorizeBenefitsMarketplaceTransactionRequest"), exports);
75
77
  __exportStar(require("./dtos/FavoriteUpsertContext"), exports);
78
+ //Leaf overrides (admin backoffice) (v3.14.0)
79
+ __exportStar(require("./dtos/FieldOverrideRequest"), exports);
80
+ __exportStar(require("./dtos/InputSchemaOverrideRequest"), exports);
81
+ __exportStar(require("./dtos/BackofficeLeafOverrideUpsertRequest"), exports);
82
+ __exportStar(require("./dtos/BackofficeLeafListItem"), exports);
83
+ __exportStar(require("./dtos/BackofficeLeafListResponse"), exports);
84
+ __exportStar(require("./dtos/BackofficeLeafDetailResponse"), exports);
85
+ //Banner assets upload (presigned PUT)
86
+ __exportStar(require("./dtos/BannerUploadUrlRequest"), exports);
87
+ __exportStar(require("./dtos/BannerUploadUrlResponse"), exports);
@@ -6,7 +6,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.IsValueValid = exports.CardUpdateKeyConstraint = exports.IsReasonRequiredForCancelledStatusConstraint = void 0;
9
+ exports.CardUpdateKeyConstraint = exports.IsReasonRequiredForCancelledStatusConstraint = void 0;
10
+ exports.IsValueValid = IsValueValid;
10
11
  const class_validator_1 = require("class-validator");
11
12
  const Status_1 = require("../enums/Status");
12
13
  const UpdateKey_1 = require("../enums/UpdateKey");
@@ -70,4 +71,3 @@ function IsValueValid(validationOptions) {
70
71
  });
71
72
  };
72
73
  }
73
- exports.IsValueValid = IsValueValid;
@@ -6,7 +6,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.IsPhoneNumberFiado = exports.IsPhoneNumberConstraint = void 0;
9
+ exports.IsPhoneNumberConstraint = void 0;
10
+ exports.IsPhoneNumberFiado = IsPhoneNumberFiado;
10
11
  const class_validator_1 = require("class-validator");
11
12
  const regex_1 = require("../../helpers/constans/regex");
12
13
  let IsPhoneNumberConstraint = class IsPhoneNumberConstraint {
@@ -36,4 +37,3 @@ function IsPhoneNumberFiado(validationOptions) {
36
37
  });
37
38
  };
38
39
  }
39
- exports.IsPhoneNumberFiado = IsPhoneNumberFiado;
package/bin/index.js CHANGED
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = exports.IssuanceBusiness = exports.Blacklist = exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.App = exports.Address = exports.Beneficiary = exports.Activity = exports.Account = exports.Crypto = void 0;
27
37
  exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.13.9",
3
+ "version": "3.15.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,37 @@
1
+ import { ConnectorCatalogItem } from "./ConnectorCatalogItem";
2
+ import { LeafOverrideStatusEnum } from "../enums/LeafOverrideStatusEnum";
3
+
4
+ /**
5
+ * Override que vive en BenefitLeafOverride_GT (forma plana del item de DynamoDB).
6
+ * Los slots están definidos del lado lambda en BenefitLeafOverrideDocument;
7
+ * acá lo tipamos como Record opaco para no duplicar la definición.
8
+ *
9
+ * Los consumers del type-kit no necesitan el detalle interno — usan `effective`
10
+ * para ver el resultado final y `override` solo para saber qué campos están
11
+ * seteados.
12
+ */
13
+ export type BenefitLeafOverridePayload = Record<string, unknown>;
14
+
15
+ /**
16
+ * Response del detalle del backoffice. Trae 3 visiones del leaf:
17
+ * - base: lo que devuelve el conector (sin merge).
18
+ * - override: lo que hay en BenefitLeafOverride_GT (null si nunca se editó).
19
+ * - effective: el merge (lo que ve la app).
20
+ * Si status === ORPHANED, base y effective son null.
21
+ */
22
+ export class BackofficeLeafDetailResponse {
23
+ leafId: string;
24
+ benefitId: string;
25
+ moduleName: string;
26
+ serviceId: string;
27
+
28
+ base: ConnectorCatalogItem | null;
29
+ override: BenefitLeafOverridePayload | null;
30
+ effective: ConnectorCatalogItem | null;
31
+
32
+ status: LeafOverrideStatusEnum;
33
+
34
+ updatedBy: string | null;
35
+ createdAt: number | null;
36
+ updatedAt: number | null;
37
+ }
@@ -0,0 +1,28 @@
1
+ import { LeafOverrideStatusEnum } from "../enums/LeafOverrideStatusEnum";
2
+
3
+ /**
4
+ * Item del listado del backoffice de leaves. Combina el estado efectivo
5
+ * (post-merge) que verá la app con metadata del override (si existe).
6
+ */
7
+ export class BackofficeLeafListItem {
8
+ leafId: string;
9
+ benefitId: string;
10
+ moduleName: string;
11
+ serviceId: string;
12
+
13
+ // Effective (post-merge) — lo que vería el cliente
14
+ serviceName: string;
15
+ category: string;
16
+ subcategory: string;
17
+ enabled: boolean;
18
+ logo?: string;
19
+
20
+ // Metadata de override
21
+ hasOverride: boolean;
22
+ overriddenFields: string[];
23
+ status: LeafOverrideStatusEnum;
24
+
25
+ // Audit ligera
26
+ updatedBy?: string;
27
+ updatedAt?: number;
28
+ }
@@ -0,0 +1,8 @@
1
+ import { BackofficeLeafListItem } from "./BackofficeLeafListItem";
2
+
3
+ export class BackofficeLeafListResponse {
4
+ items: BackofficeLeafListItem[];
5
+
6
+ /** Cursor opaco para la próxima página. Ausente → no hay más páginas. */
7
+ index?: string;
8
+ }
@@ -0,0 +1,77 @@
1
+ import {
2
+ IsBoolean,
3
+ IsInt,
4
+ IsOptional,
5
+ IsString,
6
+ IsUrl,
7
+ Matches,
8
+ MaxLength,
9
+ Min,
10
+ ValidateNested,
11
+ } from "class-validator";
12
+ import { Type } from "class-transformer";
13
+ import { InputSchemaOverrideRequest } from "./InputSchemaOverrideRequest";
14
+
15
+ /**
16
+ * Body de PUT /backoffice/leaves/{leafId}. Upsert parcial:
17
+ * - undefined → no se toca
18
+ * - string/number/boolean seteado → pisa el valor previo del override
19
+ * - null NO se acepta (para borrar un campo, usar DELETE /fields/{fieldName})
20
+ *
21
+ * Si todos los campos llegan undefined → 400 INVALID_PATCH_PAYLOAD.
22
+ */
23
+ export class BackofficeLeafOverrideUpsertRequest {
24
+ @IsOptional()
25
+ @IsString()
26
+ @MaxLength(120)
27
+ serviceName?: string;
28
+
29
+ @IsOptional()
30
+ @IsUrl({ protocols: ["https"], require_protocol: true })
31
+ @MaxLength(500)
32
+ logo?: string;
33
+
34
+ @IsOptional()
35
+ @IsString()
36
+ @MaxLength(2000)
37
+ description?: string;
38
+
39
+ @IsOptional()
40
+ @IsString()
41
+ @MaxLength(1000)
42
+ helpText?: string;
43
+
44
+ @IsOptional()
45
+ @IsInt()
46
+ @Min(0)
47
+ serviceOrder?: number;
48
+
49
+ @IsOptional()
50
+ @IsInt()
51
+ @Min(0)
52
+ subcategoryOrder?: number;
53
+
54
+ @IsOptional()
55
+ @IsBoolean()
56
+ enabled?: boolean;
57
+
58
+ @IsOptional()
59
+ @IsString()
60
+ @MaxLength(60)
61
+ @Matches(/^[A-Z][A-Z0-9_ ]*$/, { message: "category must be uppercase with underscores or spaces" })
62
+ category?: string;
63
+
64
+ @IsOptional()
65
+ @IsString()
66
+ @MaxLength(60)
67
+ subcategory?: string;
68
+
69
+ @IsOptional()
70
+ @IsBoolean()
71
+ requiresReferenceVerification?: boolean;
72
+
73
+ @IsOptional()
74
+ @ValidateNested()
75
+ @Type(() => InputSchemaOverrideRequest)
76
+ inputSchema?: InputSchemaOverrideRequest;
77
+ }
@@ -0,0 +1,23 @@
1
+ import { IsEnum, IsNotEmpty, IsString } from "class-validator";
2
+ import { BannerAssetKindEnum } from "../enums/BannerAssetKindEnum";
3
+
4
+ /**
5
+ * Solicitud del backoffice para subir directamente un asset de banner
6
+ * (imagen, video o poster). El backend responde con una presigned URL
7
+ * de S3 a la que el cliente sube el binario por PUT, y devuelve también
8
+ * la URL pública final (CloudFront) que se guarda en el banner.
9
+ */
10
+ export class BannerUploadUrlRequest {
11
+ @IsEnum(BannerAssetKindEnum)
12
+ kind!: BannerAssetKindEnum;
13
+
14
+ /** MIME type del archivo. Debe estar en el whitelist correspondiente al `kind`. */
15
+ @IsString()
16
+ @IsNotEmpty()
17
+ contentType!: string;
18
+
19
+ /** Extensión sin punto (ej. "png", "mp4"). Se usa para componer la key en S3. */
20
+ @IsString()
21
+ @IsNotEmpty()
22
+ fileExtension!: string;
23
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Respuesta con la presigned URL para subir el asset directamente a S3.
3
+ * El backoffice debe hacer `PUT uploadUrl` con header `Content-Type` exacto
4
+ * al que se solicitó, y body binario del archivo (≤ maxSizeBytes).
5
+ *
6
+ * `publicUrl` es la URL final servida vía CloudFront — esa es la que se
7
+ * guarda en `imageUrl` / `videoUrl` / `posterUrl` del banner.
8
+ */
9
+ export class BannerUploadUrlResponse {
10
+ uploadUrl: string;
11
+ publicUrl: string;
12
+ key: string;
13
+ expiresAt: string;
14
+ maxSizeBytes: number;
15
+ }
@@ -32,4 +32,10 @@ export class ConnectorCatalogItem {
32
32
  products: ProductItem[];
33
33
  inputSchema: InputSchema;
34
34
  updatedAt: number;
35
+
36
+ /** Campo editorial solo-marketplace. Vive en BenefitLeafOverride_GT y el merger lo agrega al item devuelto. */
37
+ description?: string;
38
+
39
+ /** Campo editorial solo-marketplace. Texto corto inline en el form de pago. */
40
+ helpText?: string;
35
41
  }
@@ -0,0 +1,67 @@
1
+ import {
2
+ IsArray,
3
+ IsBoolean,
4
+ IsEnum,
5
+ IsNotEmpty,
6
+ IsOptional,
7
+ IsString,
8
+ IsUrl,
9
+ MaxLength,
10
+ ValidateNested,
11
+ } from "class-validator";
12
+ import { Type } from "class-transformer";
13
+ import { InputFieldTypeEnum } from "../enums/InputFieldTypeEnum";
14
+ import { InputValidation } from "./InputValidation";
15
+ import { SelectOption } from "./SelectOption";
16
+
17
+ /**
18
+ * Override parcial de un field individual del `inputSchema` por `key`.
19
+ * El admin no puede agregar ni quitar fields — solo editar los existentes.
20
+ */
21
+ export class FieldOverrideRequest {
22
+ @IsString()
23
+ @IsNotEmpty()
24
+ key!: string;
25
+
26
+ @IsOptional()
27
+ @IsEnum(InputFieldTypeEnum)
28
+ type?: InputFieldTypeEnum;
29
+
30
+ @IsOptional()
31
+ @IsString()
32
+ @MaxLength(120)
33
+ label?: string;
34
+
35
+ @IsOptional()
36
+ @IsString()
37
+ @MaxLength(120)
38
+ placeholder?: string;
39
+
40
+ @IsOptional()
41
+ @IsBoolean()
42
+ required?: boolean;
43
+
44
+ @IsOptional()
45
+ @IsUrl({ protocols: ["https"], require_protocol: true })
46
+ helpImage?: string;
47
+
48
+ @IsOptional()
49
+ @IsBoolean()
50
+ showHelp?: boolean;
51
+
52
+ @IsOptional()
53
+ @IsArray()
54
+ @ValidateNested({ each: true })
55
+ @Type(() => SelectOption)
56
+ options?: SelectOption[];
57
+
58
+ @IsOptional()
59
+ @IsString()
60
+ @MaxLength(60)
61
+ dependsOn?: string;
62
+
63
+ @IsOptional()
64
+ @ValidateNested()
65
+ @Type(() => InputValidation)
66
+ validation?: InputValidation;
67
+ }
@@ -0,0 +1,15 @@
1
+ import { IsArray, ValidateNested } from "class-validator";
2
+ import { Type } from "class-transformer";
3
+ import { FieldOverrideRequest } from "./FieldOverrideRequest";
4
+
5
+ /**
6
+ * Override del inputSchema completo. El array `fieldOverrides[]` lista overrides
7
+ * parciales por `key`. La validación cruzada de que cada `key` exista en el
8
+ * inputSchema del conector la hace el manager (no se puede expresar con class-validator).
9
+ */
10
+ export class InputSchemaOverrideRequest {
11
+ @IsArray()
12
+ @ValidateNested({ each: true })
13
+ @Type(() => FieldOverrideRequest)
14
+ fieldOverrides!: FieldOverrideRequest[];
15
+ }
@@ -11,4 +11,10 @@ export class ServiceLeaf {
11
11
  products: ProductItem[];
12
12
  inputSchema: InputSchema;
13
13
  updatedAt: number;
14
+
15
+ /** Campo editorial solo-marketplace. Vive en BenefitLeafOverride_GT y el merger lo agrega al item devuelto. */
16
+ description?: string;
17
+
18
+ /** Campo editorial solo-marketplace. Texto corto inline en el form de pago. */
19
+ helpText?: string;
14
20
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tipo de asset que el backoffice quiere subir para un banner.
3
+ *
4
+ * Determina el whitelist de MIME types y el tamaño máximo permitido por la
5
+ * presigned URL que devuelve el backend.
6
+ */
7
+ export enum BannerAssetKindEnum {
8
+ IMAGE = "IMAGE",
9
+ VIDEO = "VIDEO",
10
+ POSTER = "POSTER",
11
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Estado de un leaf en el listado del backoffice de overrides.
3
+ *
4
+ * - ACTIVE: el override (si existe) tiene un base correspondiente en el catálogo del conector.
5
+ * - ORPHANED: existe override pero el conector ya no devuelve este leafId — el provider lo retiró.
6
+ */
7
+ export enum LeafOverrideStatusEnum {
8
+ ACTIVE = "ACTIVE",
9
+ ORPHANED = "ORPHANED",
10
+ }
@@ -11,6 +11,8 @@ export * from "./enums/BannerTemplateVariantEnum";
11
11
  export * from "./enums/FavoriteDisabledReasonEnum";
12
12
  export * from "./enums/BenefitPaymentStatusEnum";
13
13
  export * from "./enums/BenefitPaymentErrorCodeEnum";
14
+ export * from "./enums/LeafOverrideStatusEnum";
15
+ export * from "./enums/BannerAssetKindEnum";
14
16
 
15
17
  //DTOs
16
18
  export * from "./dtos/BenefitItem";
@@ -58,3 +60,13 @@ export * from "./dtos/BenefitPaymentRequest";
58
60
  export * from "./dtos/BenefitPaymentResponse";
59
61
  export * from "./dtos/AuthorizeBenefitsMarketplaceTransactionRequest";
60
62
  export * from "./dtos/FavoriteUpsertContext";
63
+ //Leaf overrides (admin backoffice) (v3.14.0)
64
+ export * from "./dtos/FieldOverrideRequest";
65
+ export * from "./dtos/InputSchemaOverrideRequest";
66
+ export * from "./dtos/BackofficeLeafOverrideUpsertRequest";
67
+ export * from "./dtos/BackofficeLeafListItem";
68
+ export * from "./dtos/BackofficeLeafListResponse";
69
+ export * from "./dtos/BackofficeLeafDetailResponse";
70
+ //Banner assets upload (presigned PUT)
71
+ export * from "./dtos/BannerUploadUrlRequest";
72
+ export * from "./dtos/BannerUploadUrlResponse";