@fiado/type-kit 3.513.0 → 3.515.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 (97) hide show
  1. package/_test_/unit/rewards/backoffice.test.ts +96 -0
  2. package/_test_/unit/rewardsEligibility/domainDtos.test.ts +40 -0
  3. package/_test_/unit/rewardsEligibility/domainEnums.test.ts +35 -0
  4. package/bin/rewards/constants/BackofficeLimits.d.ts +6 -0
  5. package/bin/rewards/constants/BackofficeLimits.js +9 -0
  6. package/bin/rewards/dtos/backoffice/CatalogItemListResponse.d.ts +6 -0
  7. package/bin/rewards/dtos/backoffice/CatalogItemListResponse.js +6 -0
  8. package/bin/rewards/dtos/backoffice/CatalogItemRequest.d.ts +19 -0
  9. package/bin/rewards/dtos/backoffice/CatalogItemRequest.js +70 -0
  10. package/bin/rewards/dtos/backoffice/CatalogItemResponse.d.ts +23 -0
  11. package/bin/rewards/dtos/backoffice/CatalogItemResponse.js +6 -0
  12. package/bin/rewards/dtos/backoffice/PackageItemRequest.d.ts +4 -0
  13. package/bin/rewards/dtos/backoffice/PackageItemRequest.js +30 -0
  14. package/bin/rewards/dtos/backoffice/PackageListResponse.d.ts +6 -0
  15. package/bin/rewards/dtos/backoffice/PackageListResponse.js +6 -0
  16. package/bin/rewards/dtos/backoffice/PackageRequest.d.ts +9 -0
  17. package/bin/rewards/dtos/backoffice/PackageRequest.js +47 -0
  18. package/bin/rewards/dtos/backoffice/PackageResponse.d.ts +18 -0
  19. package/bin/rewards/dtos/backoffice/PackageResponse.js +9 -0
  20. package/bin/rewards/dtos/backoffice/RewardChargeToInput.d.ts +4 -0
  21. package/bin/rewards/dtos/backoffice/RewardChargeToInput.js +31 -0
  22. package/bin/rewards/dtos/backoffice/RewardCostInput.d.ts +5 -0
  23. package/bin/rewards/dtos/backoffice/RewardCostInput.js +29 -0
  24. package/bin/rewards/dtos/backoffice/RewardTypeResponse.d.ts +6 -0
  25. package/bin/rewards/dtos/backoffice/RewardTypeResponse.js +7 -0
  26. package/bin/rewards/index.d.ts +11 -0
  27. package/bin/rewards/index.js +13 -0
  28. package/bin/rewardsEligibility/dtos/CampaignAlerts.d.ts +4 -0
  29. package/bin/rewardsEligibility/dtos/CampaignAlerts.js +7 -0
  30. package/bin/rewardsEligibility/dtos/CampaignQuota.d.ts +8 -0
  31. package/bin/rewardsEligibility/dtos/CampaignQuota.js +7 -0
  32. package/bin/rewardsEligibility/dtos/EvaluationReward.d.ts +6 -0
  33. package/bin/rewardsEligibility/dtos/EvaluationReward.js +7 -0
  34. package/bin/rewardsEligibility/dtos/EvaluationTrigger.d.ts +14 -0
  35. package/bin/rewardsEligibility/dtos/EvaluationTrigger.js +7 -0
  36. package/bin/rewardsEligibility/dtos/GrantPolicy.d.ts +12 -0
  37. package/bin/rewardsEligibility/dtos/GrantPolicy.js +7 -0
  38. package/bin/rewardsEligibility/dtos/PopulationRef.d.ts +6 -0
  39. package/bin/rewardsEligibility/dtos/PopulationRef.js +7 -0
  40. package/bin/rewardsEligibility/enums/ApprovalModeEnum.d.ts +4 -0
  41. package/bin/rewardsEligibility/enums/ApprovalModeEnum.js +8 -0
  42. package/bin/rewardsEligibility/enums/BatchPublishStateEnum.d.ts +7 -0
  43. package/bin/rewardsEligibility/enums/BatchPublishStateEnum.js +11 -0
  44. package/bin/rewardsEligibility/enums/CampaignPausedReasonEnum.d.ts +7 -0
  45. package/bin/rewardsEligibility/enums/CampaignPausedReasonEnum.js +11 -0
  46. package/bin/rewardsEligibility/enums/CampaignStatusEnum.d.ts +8 -0
  47. package/bin/rewardsEligibility/enums/CampaignStatusEnum.js +12 -0
  48. package/bin/rewardsEligibility/enums/EvaluationStatusEnum.d.ts +6 -0
  49. package/bin/rewardsEligibility/enums/EvaluationStatusEnum.js +10 -0
  50. package/bin/rewardsEligibility/enums/GrantPeriodEnum.d.ts +5 -0
  51. package/bin/rewardsEligibility/enums/GrantPeriodEnum.js +9 -0
  52. package/bin/rewardsEligibility/enums/GrantPolicyModeEnum.d.ts +11 -0
  53. package/bin/rewardsEligibility/enums/GrantPolicyModeEnum.js +15 -0
  54. package/bin/rewardsEligibility/enums/LedgerStatusEnum.d.ts +5 -0
  55. package/bin/rewardsEligibility/enums/LedgerStatusEnum.js +9 -0
  56. package/bin/rewardsEligibility/enums/QuotaExhaustedActionEnum.d.ts +7 -0
  57. package/bin/rewardsEligibility/enums/QuotaExhaustedActionEnum.js +11 -0
  58. package/bin/rewardsEligibility/enums/QuotaPeriodEnum.d.ts +7 -0
  59. package/bin/rewardsEligibility/enums/QuotaPeriodEnum.js +11 -0
  60. package/bin/rewardsEligibility/enums/TraceOriginEnum.d.ts +5 -0
  61. package/bin/rewardsEligibility/enums/TraceOriginEnum.js +9 -0
  62. package/bin/rewardsEligibility/index.d.ts +18 -0
  63. package/bin/rewardsEligibility/index.js +21 -0
  64. package/bin/rewardsEligibility/types/RewardInputRef.d.ts +7 -0
  65. package/bin/rewardsEligibility/types/RewardInputRef.js +2 -0
  66. package/package.json +1 -1
  67. package/src/rewards/constants/BackofficeLimits.ts +6 -0
  68. package/src/rewards/dtos/backoffice/CatalogItemListResponse.ts +7 -0
  69. package/src/rewards/dtos/backoffice/CatalogItemRequest.ts +52 -0
  70. package/src/rewards/dtos/backoffice/CatalogItemResponse.ts +22 -0
  71. package/src/rewards/dtos/backoffice/PackageItemRequest.ts +15 -0
  72. package/src/rewards/dtos/backoffice/PackageListResponse.ts +7 -0
  73. package/src/rewards/dtos/backoffice/PackageRequest.ts +31 -0
  74. package/src/rewards/dtos/backoffice/PackageResponse.ts +20 -0
  75. package/src/rewards/dtos/backoffice/RewardChargeToInput.ts +16 -0
  76. package/src/rewards/dtos/backoffice/RewardCostInput.ts +14 -0
  77. package/src/rewards/dtos/backoffice/RewardTypeResponse.ts +7 -0
  78. package/src/rewards/index.ts +15 -0
  79. package/src/rewardsEligibility/dtos/CampaignAlerts.ts +4 -0
  80. package/src/rewardsEligibility/dtos/CampaignQuota.ts +9 -0
  81. package/src/rewardsEligibility/dtos/EvaluationReward.ts +7 -0
  82. package/src/rewardsEligibility/dtos/EvaluationTrigger.ts +15 -0
  83. package/src/rewardsEligibility/dtos/GrantPolicy.ts +13 -0
  84. package/src/rewardsEligibility/dtos/PopulationRef.ts +7 -0
  85. package/src/rewardsEligibility/enums/ApprovalModeEnum.ts +4 -0
  86. package/src/rewardsEligibility/enums/BatchPublishStateEnum.ts +7 -0
  87. package/src/rewardsEligibility/enums/CampaignPausedReasonEnum.ts +7 -0
  88. package/src/rewardsEligibility/enums/CampaignStatusEnum.ts +8 -0
  89. package/src/rewardsEligibility/enums/EvaluationStatusEnum.ts +6 -0
  90. package/src/rewardsEligibility/enums/GrantPeriodEnum.ts +5 -0
  91. package/src/rewardsEligibility/enums/GrantPolicyModeEnum.ts +11 -0
  92. package/src/rewardsEligibility/enums/LedgerStatusEnum.ts +5 -0
  93. package/src/rewardsEligibility/enums/QuotaExhaustedActionEnum.ts +7 -0
  94. package/src/rewardsEligibility/enums/QuotaPeriodEnum.ts +7 -0
  95. package/src/rewardsEligibility/enums/TraceOriginEnum.ts +5 -0
  96. package/src/rewardsEligibility/index.ts +24 -0
  97. package/src/rewardsEligibility/types/RewardInputRef.ts +4 -0
@@ -0,0 +1,96 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import { JsonValue } from '../../../src/common';
5
+ import { CatalogItemRequest, PackageRequest, REWARD_ITEM_KEY_MAX_LENGTH, REWARD_PACKAGE_MAX_ITEMS } from '../../../src/rewards';
6
+
7
+ const catalog = {
8
+ id: 'example-reward-a',
9
+ name: 'Recompensa A',
10
+ description: 'Recompensa de ejemplo',
11
+ type: 'ExampleType',
12
+ config: { amount: 50, nested: { list: [1, 2] } },
13
+ cost: { amount: 50, currency: 'MXN' },
14
+ chargeTo: { partnerId: 'ALIADO-001', partnerName: 'Aliado de ejemplo' },
15
+ status: 'ACTIVE',
16
+ };
17
+ const pkg = { id: 'paquete-1', name: 'Paquete 1', status: 'ACTIVE', items: [{ itemKey: 'itemA', catalogItemId: 'example-reward-a' }] };
18
+
19
+ const asCatalog = (o: Record<string, JsonValue> = {}): CatalogItemRequest =>
20
+ plainToInstance(CatalogItemRequest, { ...catalog, ...o }, { excludeExtraneousValues: true });
21
+ const asPackage = (o: Record<string, JsonValue> = {}): PackageRequest =>
22
+ plainToInstance(PackageRequest, { ...pkg, ...o }, { excludeExtraneousValues: true });
23
+ const props = async (dto: object): Promise<string[]> => (await validate(dto)).map((e) => e.property);
24
+
25
+ describe('CatalogItemRequest', () => {
26
+ it('valida una recompensa correcta y conserva el config anidado completo', async () => {
27
+ const dto = asCatalog();
28
+ expect(await validate(dto)).toHaveLength(0);
29
+ expect(dto.config).toEqual({ amount: 50, nested: { list: [1, 2] } });
30
+ });
31
+
32
+ it.each<[string, Record<string, JsonValue>, string]>([
33
+ ['id con espacios', { id: 'con espacio' }, 'id'],
34
+ ['id vacío', { id: '' }, 'id'],
35
+ ['name vacío', { name: '' }, 'name'],
36
+ ['name > 120', { name: 'x'.repeat(121) }, 'name'],
37
+ ['type vacío', { type: '' }, 'type'],
38
+ ['config que no es objeto', { config: 'texto' }, 'config'],
39
+ ['status desconocido', { status: 'BORRADO' }, 'status'],
40
+ ['costo negativo', { cost: { amount: -1, currency: 'MXN' } }, 'cost'],
41
+ ['costo con 3 decimales', { cost: { amount: 1.234, currency: 'MXN' } }, 'cost'],
42
+ ['moneda desconocida', { cost: { amount: 5, currency: 'XXX' } }, 'cost'],
43
+ ['chargeTo sin partnerId', { chargeTo: { partnerId: '', partnerName: 'A' } }, 'chargeTo'],
44
+ ])('rechaza %s', async (_nombre, override, property) => {
45
+ expect(await props(asCatalog(override))).toContain(property);
46
+ });
47
+
48
+ it('acepta costo 0 (recompensa gratuita para el aliado)', async () => {
49
+ expect(await validate(asCatalog({ cost: { amount: 0, currency: 'MXN' } }))).toHaveLength(0);
50
+ });
51
+
52
+ it('descarta campos extra (version, dependencies, updatedBy no se aceptan del cliente)', () => {
53
+ const dto = asCatalog({ version: 99, dependencies: [], updatedBy: 'hacker' });
54
+ expect('version' in dto).toBe(false);
55
+ expect('dependencies' in dto).toBe(false);
56
+ expect('updatedBy' in dto).toBe(false);
57
+ });
58
+ });
59
+
60
+ describe('PackageRequest', () => {
61
+ it('valida un paquete correcto', async () => {
62
+ expect(await validate(asPackage())).toHaveLength(0);
63
+ });
64
+
65
+ it('exige al menos un ítem', async () => {
66
+ expect(await props(asPackage({ items: [] }))).toContain('items');
67
+ });
68
+
69
+ it(`itemKey de ${REWARD_ITEM_KEY_MAX_LENGTH} caracteres entra; de ${REWARD_ITEM_KEY_MAX_LENGTH + 1} no (RW-{grantId}-{itemKey} ≤ 64)`, async () => {
70
+ const ok = asPackage({ items: [{ itemKey: 'k'.repeat(REWARD_ITEM_KEY_MAX_LENGTH), catalogItemId: 'r1' }] });
71
+ const tooLong = asPackage({ items: [{ itemKey: 'k'.repeat(REWARD_ITEM_KEY_MAX_LENGTH + 1), catalogItemId: 'r1' }] });
72
+ expect(await validate(ok)).toHaveLength(0);
73
+ expect(await props(tooLong)).toContain('items');
74
+ });
75
+
76
+ it.each(['con espacio', 'con#almohadilla', 'acentó'])('rechaza el itemKey %s (caracteres fuera de [A-Za-z0-9_-])', async (itemKey) => {
77
+ expect(await props(asPackage({ items: [{ itemKey, catalogItemId: 'r1' }] }))).toContain('items');
78
+ });
79
+
80
+ it('REWARD_ITEM_KEY_MAX_LENGTH es 28 (igual que REWARDS_MAX_ITEM_KEY_LENGTH de api-invoker)', () => {
81
+ expect(REWARD_ITEM_KEY_MAX_LENGTH).toBe(28);
82
+ });
83
+
84
+ it('REWARD_PACKAGE_MAX_ITEMS es 4 (igual que MAX_ITEMS_PER_PACKAGE del worker, B-12): 4 ítems entran, 5 no', async () => {
85
+ expect(REWARD_PACKAGE_MAX_ITEMS).toBe(4);
86
+ const itemsOf = (n: number): JsonValue[] =>
87
+ Array.from({ length: n }, (_, i) => ({ itemKey: `item${i}`, catalogItemId: 'example-reward-a' }));
88
+ expect(await validate(asPackage({ items: itemsOf(REWARD_PACKAGE_MAX_ITEMS) }))).toHaveLength(0);
89
+ expect(await props(asPackage({ items: itemsOf(REWARD_PACKAGE_MAX_ITEMS + 1) }))).toContain('items');
90
+ });
91
+
92
+ it('acepta el MISMO catalogItemId en dos itemKey distintos (decisión de la Parte 2: cada ítem tiene su transactionNumber)', async () => {
93
+ const items = [{ itemKey: 'itemA', catalogItemId: 'example-reward-a' }, { itemKey: 'itemB', catalogItemId: 'example-reward-a' }];
94
+ expect(await validate(asPackage({ items }))).toHaveLength(0);
95
+ });
96
+ });
@@ -0,0 +1,40 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ ApprovalModeEnum,
4
+ CampaignAlerts,
5
+ CampaignQuota,
6
+ EvaluationReward,
7
+ EvaluationTrigger,
8
+ GrantPeriodEnum,
9
+ GrantPolicy,
10
+ GrantPolicyModeEnum,
11
+ QuotaPeriodEnum,
12
+ RewardInputRef,
13
+ TriggerTypeEnum,
14
+ } from '../../../src/rewardsEligibility';
15
+
16
+ // Son formas de lo que se guarda como JSON en las tablas: el compilador es el test principal (ts-jest falla si cambian).
17
+ describe('DTOs de configuracion de rewardsEligibility', () => {
18
+ it('modelan el caso phone-sales del spec B 5.1 (PER_REFERENCE + disparador EVENT + inputs const/input)', () => {
19
+ const policy: GrantPolicy = { mode: GrantPolicyModeEnum.PER_REFERENCE, referenceInput: 'saleId' };
20
+ const trigger: EvaluationTrigger = { type: TriggerTypeEnum.EVENT, eventKey: 'PHONE_SALES_CODE_REDEEMED', approval: ApprovalModeEnum.AUTO };
21
+ const fromConst: RewardInputRef = { const: true };
22
+ const fromInput: RewardInputRef = { input: 'saleId' };
23
+ const reward: EvaluationReward = { packageId: 'paquete-referido', inputs: { topup: { accountNumberMatchesOperator: fromConst, ref: fromInput } } };
24
+ expect(policy.referenceInput).toBe('saleId');
25
+ expect(trigger.eventKey).toBe('PHONE_SALES_CODE_REDEEMED');
26
+ expect(reward.inputs.topup?.ref).toEqual({ input: 'saleId' });
27
+ });
28
+
29
+ it('modelan el caso de los lunes (PER_PERIOD WEEK) y los cupos de campania', () => {
30
+ const policy: GrantPolicy = { mode: GrantPolicyModeEnum.PER_PERIOD, period: GrantPeriodEnum.WEEK };
31
+ const quotas: CampaignQuota[] = [
32
+ { id: 'primeros-500', limit: 500, period: QuotaPeriodEnum.TOTAL },
33
+ { id: 'semanal', limit: 100, period: QuotaPeriodEnum.WEEK },
34
+ ];
35
+ const alerts: CampaignAlerts = { thresholds: [0.8, 1] };
36
+ expect(policy.period).toBe('WEEK');
37
+ expect(quotas.map((q) => q.id)).toEqual(['primeros-500', 'semanal']);
38
+ expect(alerts.thresholds).toHaveLength(2);
39
+ });
40
+ });
@@ -0,0 +1,35 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ ApprovalModeEnum,
4
+ BatchPublishStateEnum,
5
+ CampaignPausedReasonEnum,
6
+ CampaignStatusEnum,
7
+ EvaluationStatusEnum,
8
+ GrantPeriodEnum,
9
+ GrantPolicyModeEnum,
10
+ LedgerStatusEnum,
11
+ QuotaExhaustedActionEnum,
12
+ QuotaPeriodEnum,
13
+ TraceOriginEnum,
14
+ } from '../../../src/rewardsEligibility';
15
+
16
+ // Los valores se guardan en DynamoDB y viajan por colas: cambiarlos rompe datos. Este test los fija.
17
+ describe('enums del dominio de rewardsEligibility (spec B 5.1, 5.5, 5.6, 5.8)', () => {
18
+ it.each<[string, Record<string, string>, string[]]>([
19
+ ['CampaignStatusEnum', CampaignStatusEnum, ['DRAFT', 'ACTIVE', 'PAUSED', 'ENDED', 'ARCHIVED']],
20
+ ['CampaignPausedReasonEnum', CampaignPausedReasonEnum, ['MANUAL', 'QUOTA_EXHAUSTED']],
21
+ ['EvaluationStatusEnum', EvaluationStatusEnum, ['DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED']],
22
+ ['GrantPolicyModeEnum', GrantPolicyModeEnum, ['ONCE', 'PER_PERIOD', 'PER_REFERENCE', 'MAX_N']],
23
+ ['GrantPeriodEnum', GrantPeriodEnum, ['WEEK', 'MONTH']],
24
+ ['QuotaPeriodEnum', QuotaPeriodEnum, ['TOTAL', 'DAY', 'WEEK', 'MONTH']],
25
+ ['QuotaExhaustedActionEnum', QuotaExhaustedActionEnum, ['PAUSE_CAMPAIGN', 'RECORD_ONLY']],
26
+ ['ApprovalModeEnum', ApprovalModeEnum, ['AUTO', 'REQUIRED']],
27
+ ['LedgerStatusEnum', LedgerStatusEnum, ['RESERVED', 'RELEASED']],
28
+ ['BatchPublishStateEnum', BatchPublishStateEnum, ['PENDING_APPROVAL', 'PENDING', 'PUBLISHED', 'CANCELLED']],
29
+ ['TraceOriginEnum', TraceOriginEnum, ['PREFETCHED', 'RESOLVED']],
30
+ ])('%s tiene exactamente los valores del spec', (_name, enumObject, values) => {
31
+ expect(Object.values(enumObject).sort()).toEqual([...values].sort());
32
+ // cada miembro vale su propio nombre (el valor viaja como string)
33
+ for (const [key, value] of Object.entries(enumObject)) expect(value).toBe(key);
34
+ });
35
+ });
@@ -0,0 +1,6 @@
1
+ /** Máximo del `itemKey` de un paquete: `RW-{grantId(32)}-{itemKey}` ≤ 64 (igual que REWARDS_MAX_ITEM_KEY_LENGTH de api-invoker). */
2
+ export declare const REWARD_ITEM_KEY_MAX_LENGTH = 28;
3
+ export declare const REWARD_ITEM_KEY_PATTERN: RegExp;
4
+ export declare const REWARD_ID_PATTERN: RegExp;
5
+ /** Máximo de ítems de un paquete (B-12 de rewards-business: presupuesto de tiempo del worker). Igual a `MAX_ITEMS_PER_PACKAGE` del lambda. */
6
+ export declare const REWARD_PACKAGE_MAX_ITEMS = 4;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REWARD_PACKAGE_MAX_ITEMS = exports.REWARD_ID_PATTERN = exports.REWARD_ITEM_KEY_PATTERN = exports.REWARD_ITEM_KEY_MAX_LENGTH = void 0;
4
+ /** Máximo del `itemKey` de un paquete: `RW-{grantId(32)}-{itemKey}` ≤ 64 (igual que REWARDS_MAX_ITEM_KEY_LENGTH de api-invoker). */
5
+ exports.REWARD_ITEM_KEY_MAX_LENGTH = 28;
6
+ exports.REWARD_ITEM_KEY_PATTERN = new RegExp(`^[A-Za-z0-9_-]{1,${exports.REWARD_ITEM_KEY_MAX_LENGTH}}$`);
7
+ exports.REWARD_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
8
+ /** Máximo de ítems de un paquete (B-12 de rewards-business: presupuesto de tiempo del worker). Igual a `MAX_ITEMS_PER_PACKAGE` del lambda. */
9
+ exports.REWARD_PACKAGE_MAX_ITEMS = 4;
@@ -0,0 +1,6 @@
1
+ import { CatalogItemResponse } from './CatalogItemResponse';
2
+ export declare class CatalogItemListResponse {
3
+ items: CatalogItemResponse[];
4
+ /** Cursor opaco de la página siguiente; ausente en la última página. */
5
+ nextCursor?: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CatalogItemListResponse = void 0;
4
+ class CatalogItemListResponse {
5
+ }
6
+ exports.CatalogItemListResponse = CatalogItemListResponse;
@@ -0,0 +1,19 @@
1
+ import { JsonValue } from '../../../common';
2
+ import { RewardStatusEnum } from '../../enums/RewardStatusEnum';
3
+ import { RewardChargeToInput } from './RewardChargeToInput';
4
+ import { RewardCostInput } from './RewardCostInput';
5
+ /** Crear (POST) o reemplazar (PUT) una recompensa del catálogo. `version`, `dependencies` y `updatedBy` los pone el servidor. */
6
+ export declare class CatalogItemRequest {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ /** `type` del adaptador (IRewardType.type). Inmutable una vez creada la recompensa. */
11
+ type: string;
12
+ /** Forma definida por cada tipo; el lambda la valida con `IRewardType.validateConfig`. */
13
+ config: {
14
+ [key: string]: JsonValue;
15
+ };
16
+ cost: RewardCostInput;
17
+ chargeTo: RewardChargeToInput;
18
+ status: RewardStatusEnum;
19
+ }
@@ -0,0 +1,70 @@
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.CatalogItemRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const BackofficeLimits_1 = require("../../constants/BackofficeLimits");
16
+ const RewardStatusEnum_1 = require("../../enums/RewardStatusEnum");
17
+ const RewardChargeToInput_1 = require("./RewardChargeToInput");
18
+ const RewardCostInput_1 = require("./RewardCostInput");
19
+ /** Crear (POST) o reemplazar (PUT) una recompensa del catálogo. `version`, `dependencies` y `updatedBy` los pone el servidor. */
20
+ class CatalogItemRequest {
21
+ }
22
+ exports.CatalogItemRequest = CatalogItemRequest;
23
+ __decorate([
24
+ (0, class_transformer_1.Expose)(),
25
+ (0, class_validator_1.IsString)(),
26
+ (0, class_validator_1.Matches)(BackofficeLimits_1.REWARD_ID_PATTERN),
27
+ __metadata("design:type", String)
28
+ ], CatalogItemRequest.prototype, "id", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsString)(),
32
+ (0, class_validator_1.IsNotEmpty)(),
33
+ (0, class_validator_1.MaxLength)(120),
34
+ __metadata("design:type", String)
35
+ ], CatalogItemRequest.prototype, "name", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ (0, class_validator_1.IsString)(),
39
+ (0, class_validator_1.MaxLength)(500),
40
+ __metadata("design:type", String)
41
+ ], CatalogItemRequest.prototype, "description", void 0);
42
+ __decorate([
43
+ (0, class_transformer_1.Expose)(),
44
+ (0, class_validator_1.IsString)(),
45
+ (0, class_validator_1.IsNotEmpty)(),
46
+ (0, class_validator_1.MaxLength)(60),
47
+ __metadata("design:type", String)
48
+ ], CatalogItemRequest.prototype, "type", void 0);
49
+ __decorate([
50
+ (0, class_transformer_1.Expose)(),
51
+ (0, class_validator_1.IsObject)(),
52
+ __metadata("design:type", Object)
53
+ ], CatalogItemRequest.prototype, "config", void 0);
54
+ __decorate([
55
+ (0, class_transformer_1.Expose)(),
56
+ (0, class_validator_1.ValidateNested)(),
57
+ (0, class_transformer_1.Type)(() => RewardCostInput_1.RewardCostInput),
58
+ __metadata("design:type", RewardCostInput_1.RewardCostInput)
59
+ ], CatalogItemRequest.prototype, "cost", void 0);
60
+ __decorate([
61
+ (0, class_transformer_1.Expose)(),
62
+ (0, class_validator_1.ValidateNested)(),
63
+ (0, class_transformer_1.Type)(() => RewardChargeToInput_1.RewardChargeToInput),
64
+ __metadata("design:type", RewardChargeToInput_1.RewardChargeToInput)
65
+ ], CatalogItemRequest.prototype, "chargeTo", void 0);
66
+ __decorate([
67
+ (0, class_transformer_1.Expose)(),
68
+ (0, class_validator_1.IsEnum)(RewardStatusEnum_1.RewardStatusEnum),
69
+ __metadata("design:type", String)
70
+ ], CatalogItemRequest.prototype, "status", void 0);
@@ -0,0 +1,23 @@
1
+ import { JsonValue } from '../../../common';
2
+ import { RewardStatusEnum } from '../../enums/RewardStatusEnum';
3
+ import { RewardChargeTo } from '../RewardChargeTo';
4
+ import { RewardCost } from '../RewardCost';
5
+ import { RewardDependency } from '../RewardDependency';
6
+ export declare class CatalogItemResponse {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ type: string;
11
+ config: {
12
+ [key: string]: JsonValue;
13
+ };
14
+ cost: RewardCost;
15
+ chargeTo: RewardChargeTo;
16
+ /** Solo lectura: las calcula el tipo a partir de `config`. */
17
+ dependencies: RewardDependency[];
18
+ status: RewardStatusEnum;
19
+ version: number;
20
+ updatedBy: string;
21
+ createdAt: number;
22
+ updatedAt: number;
23
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CatalogItemResponse = void 0;
4
+ class CatalogItemResponse {
5
+ }
6
+ exports.CatalogItemResponse = CatalogItemResponse;
@@ -0,0 +1,4 @@
1
+ export declare class PackageItemRequest {
2
+ itemKey: string;
3
+ catalogItemId: string;
4
+ }
@@ -0,0 +1,30 @@
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.PackageItemRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const BackofficeLimits_1 = require("../../constants/BackofficeLimits");
16
+ class PackageItemRequest {
17
+ }
18
+ exports.PackageItemRequest = PackageItemRequest;
19
+ __decorate([
20
+ (0, class_transformer_1.Expose)(),
21
+ (0, class_validator_1.IsString)(),
22
+ (0, class_validator_1.Matches)(BackofficeLimits_1.REWARD_ITEM_KEY_PATTERN),
23
+ __metadata("design:type", String)
24
+ ], PackageItemRequest.prototype, "itemKey", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.Matches)(BackofficeLimits_1.REWARD_ID_PATTERN),
29
+ __metadata("design:type", String)
30
+ ], PackageItemRequest.prototype, "catalogItemId", void 0);
@@ -0,0 +1,6 @@
1
+ import { PackageResponse } from './PackageResponse';
2
+ export declare class PackageListResponse {
3
+ items: PackageResponse[];
4
+ /** Cursor opaco de la página siguiente; ausente en la última página. */
5
+ nextCursor?: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackageListResponse = void 0;
4
+ class PackageListResponse {
5
+ }
6
+ exports.PackageListResponse = PackageListResponse;
@@ -0,0 +1,9 @@
1
+ import { RewardStatusEnum } from '../../enums/RewardStatusEnum';
2
+ import { PackageItemRequest } from './PackageItemRequest';
3
+ export declare class PackageRequest {
4
+ id: string;
5
+ name: string;
6
+ status: RewardStatusEnum;
7
+ /** Ordenada: el orden es el de ejecución. De 1 a 4 ítems (el tope depende del presupuesto de tiempo del worker, B-12; el lambda lo valida otra vez). */
8
+ items: PackageItemRequest[];
9
+ }
@@ -0,0 +1,47 @@
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.PackageRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const BackofficeLimits_1 = require("../../constants/BackofficeLimits");
16
+ const RewardStatusEnum_1 = require("../../enums/RewardStatusEnum");
17
+ const PackageItemRequest_1 = require("./PackageItemRequest");
18
+ class PackageRequest {
19
+ }
20
+ exports.PackageRequest = PackageRequest;
21
+ __decorate([
22
+ (0, class_transformer_1.Expose)(),
23
+ (0, class_validator_1.IsString)(),
24
+ (0, class_validator_1.Matches)(BackofficeLimits_1.REWARD_ID_PATTERN),
25
+ __metadata("design:type", String)
26
+ ], PackageRequest.prototype, "id", void 0);
27
+ __decorate([
28
+ (0, class_transformer_1.Expose)(),
29
+ (0, class_validator_1.IsString)(),
30
+ (0, class_validator_1.IsNotEmpty)(),
31
+ (0, class_validator_1.MaxLength)(120),
32
+ __metadata("design:type", String)
33
+ ], PackageRequest.prototype, "name", void 0);
34
+ __decorate([
35
+ (0, class_transformer_1.Expose)(),
36
+ (0, class_validator_1.IsEnum)(RewardStatusEnum_1.RewardStatusEnum),
37
+ __metadata("design:type", String)
38
+ ], PackageRequest.prototype, "status", void 0);
39
+ __decorate([
40
+ (0, class_transformer_1.Expose)(),
41
+ (0, class_validator_1.IsArray)(),
42
+ (0, class_validator_1.ArrayMinSize)(1),
43
+ (0, class_validator_1.ArrayMaxSize)(BackofficeLimits_1.REWARD_PACKAGE_MAX_ITEMS),
44
+ (0, class_validator_1.ValidateNested)({ each: true }),
45
+ (0, class_transformer_1.Type)(() => PackageItemRequest_1.PackageItemRequest),
46
+ __metadata("design:type", Array)
47
+ ], PackageRequest.prototype, "items", void 0);
@@ -0,0 +1,18 @@
1
+ import { RewardStatusEnum } from '../../enums/RewardStatusEnum';
2
+ import { RewardCost } from '../RewardCost';
3
+ export declare class PackageItemResponse {
4
+ itemKey: string;
5
+ catalogItemId: string;
6
+ }
7
+ export declare class PackageResponse {
8
+ id: string;
9
+ name: string;
10
+ status: RewardStatusEnum;
11
+ version: number;
12
+ items: PackageItemResponse[];
13
+ /** Costo total declarado por moneda (spec 5.2). */
14
+ totalCost: RewardCost[];
15
+ updatedBy: string;
16
+ createdAt: number;
17
+ updatedAt: number;
18
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PackageResponse = exports.PackageItemResponse = void 0;
4
+ class PackageItemResponse {
5
+ }
6
+ exports.PackageItemResponse = PackageItemResponse;
7
+ class PackageResponse {
8
+ }
9
+ exports.PackageResponse = PackageResponse;
@@ -0,0 +1,4 @@
1
+ export declare class RewardChargeToInput {
2
+ partnerId: string;
3
+ partnerName: string;
4
+ }
@@ -0,0 +1,31 @@
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.RewardChargeToInput = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ class RewardChargeToInput {
16
+ }
17
+ exports.RewardChargeToInput = RewardChargeToInput;
18
+ __decorate([
19
+ (0, class_transformer_1.Expose)(),
20
+ (0, class_validator_1.IsString)(),
21
+ (0, class_validator_1.IsNotEmpty)(),
22
+ (0, class_validator_1.MaxLength)(64),
23
+ __metadata("design:type", String)
24
+ ], RewardChargeToInput.prototype, "partnerId", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.IsNotEmpty)(),
29
+ (0, class_validator_1.MaxLength)(120),
30
+ __metadata("design:type", String)
31
+ ], RewardChargeToInput.prototype, "partnerName", void 0);
@@ -0,0 +1,5 @@
1
+ import { CurrencyId } from '../../../currency';
2
+ export declare class RewardCostInput {
3
+ amount: number;
4
+ currency: CurrencyId;
5
+ }
@@ -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.RewardCostInput = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const currency_1 = require("../../../currency");
16
+ class RewardCostInput {
17
+ }
18
+ exports.RewardCostInput = RewardCostInput;
19
+ __decorate([
20
+ (0, class_transformer_1.Expose)(),
21
+ (0, class_validator_1.IsNumber)({ maxDecimalPlaces: 2 }),
22
+ (0, class_validator_1.Min)(0),
23
+ __metadata("design:type", Number)
24
+ ], RewardCostInput.prototype, "amount", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsEnum)(currency_1.CurrencyId),
28
+ __metadata("design:type", String)
29
+ ], RewardCostInput.prototype, "currency", void 0);
@@ -0,0 +1,6 @@
1
+ import { InputField } from '../../../dynamicForm/dtos/InputField';
2
+ /** `GET /reward-types`: un tipo registrado y el formulario dinámico de su `config`. */
3
+ export declare class RewardTypeResponse {
4
+ type: string;
5
+ configFields: InputField[];
6
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RewardTypeResponse = void 0;
4
+ /** `GET /reward-types`: un tipo registrado y el formulario dinámico de su `config`. */
5
+ class RewardTypeResponse {
6
+ }
7
+ exports.RewardTypeResponse = RewardTypeResponse;
@@ -22,3 +22,14 @@ export * from './dtos/responses/PackageContractResponse';
22
22
  export * from './dtos/responses/GrantAttemptResponse';
23
23
  export * from './dtos/responses/GrantItemResponse';
24
24
  export * from './dtos/responses/GrantResponse';
25
+ export * from './constants/BackofficeLimits';
26
+ export * from './dtos/backoffice/RewardCostInput';
27
+ export * from './dtos/backoffice/RewardChargeToInput';
28
+ export * from './dtos/backoffice/CatalogItemRequest';
29
+ export * from './dtos/backoffice/CatalogItemResponse';
30
+ export * from './dtos/backoffice/PackageItemRequest';
31
+ export * from './dtos/backoffice/PackageRequest';
32
+ export * from './dtos/backoffice/PackageResponse';
33
+ export * from './dtos/backoffice/RewardTypeResponse';
34
+ export * from './dtos/backoffice/CatalogItemListResponse';
35
+ export * from './dtos/backoffice/PackageListResponse';
@@ -45,3 +45,16 @@ __exportStar(require("./dtos/responses/PackageContractResponse"), exports);
45
45
  __exportStar(require("./dtos/responses/GrantAttemptResponse"), exports);
46
46
  __exportStar(require("./dtos/responses/GrantItemResponse"), exports);
47
47
  __exportStar(require("./dtos/responses/GrantResponse"), exports);
48
+ //Constants backoffice
49
+ __exportStar(require("./constants/BackofficeLimits"), exports);
50
+ //DTOs backoffice
51
+ __exportStar(require("./dtos/backoffice/RewardCostInput"), exports);
52
+ __exportStar(require("./dtos/backoffice/RewardChargeToInput"), exports);
53
+ __exportStar(require("./dtos/backoffice/CatalogItemRequest"), exports);
54
+ __exportStar(require("./dtos/backoffice/CatalogItemResponse"), exports);
55
+ __exportStar(require("./dtos/backoffice/PackageItemRequest"), exports);
56
+ __exportStar(require("./dtos/backoffice/PackageRequest"), exports);
57
+ __exportStar(require("./dtos/backoffice/PackageResponse"), exports);
58
+ __exportStar(require("./dtos/backoffice/RewardTypeResponse"), exports);
59
+ __exportStar(require("./dtos/backoffice/CatalogItemListResponse"), exports);
60
+ __exportStar(require("./dtos/backoffice/PackageListResponse"), exports);
@@ -0,0 +1,4 @@
1
+ /** Umbrales de consumo (0 a 1) que avisan a los operadores (spec B 5.6). */
2
+ export declare class CampaignAlerts {
3
+ thresholds: number[];
4
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CampaignAlerts = void 0;
4
+ /** Umbrales de consumo (0 a 1) que avisan a los operadores (spec B 5.6). */
5
+ class CampaignAlerts {
6
+ }
7
+ exports.CampaignAlerts = CampaignAlerts;
@@ -0,0 +1,8 @@
1
+ import { QuotaPeriodEnum } from '../enums/QuotaPeriodEnum';
2
+ /** Un cupo de campania: cantidad maxima de premios (no dinero) en un periodo (spec B 5.6). */
3
+ export declare class CampaignQuota {
4
+ /** Unico dentro de la campania (ej. `primeros-500`). Entra en la llave del consumo (`{id}#{periodo}`). */
5
+ id: string;
6
+ limit: number;
7
+ period: QuotaPeriodEnum;
8
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CampaignQuota = void 0;
4
+ /** Un cupo de campania: cantidad maxima de premios (no dinero) en un periodo (spec B 5.6). */
5
+ class CampaignQuota {
6
+ }
7
+ exports.CampaignQuota = CampaignQuota;