@fiado/type-kit 3.354.0 → 3.355.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_test_/unit/webhookBusiness/WebhookEventEnvelope.test.ts +147 -0
- package/_test_/unit/webhookBusiness/webhookEvents.test.ts +197 -0
- package/_test_/unit/webhookBusiness/webhookSubscriptionRequests.test.ts +60 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +5 -1
- package/bin/productCatalog/enums/ProductSubtypeEnum.d.ts +1 -1
- package/bin/productCatalog/enums/ProductSubtypeEnum.js +2 -2
- package/bin/productCatalog/enums/ProductTypeEnum.d.ts +4 -4
- package/bin/productCatalog/enums/ProductTypeEnum.js +4 -4
- package/bin/transactionProcessor/dtos/{AuthorizeWelcomeBonusRequest.d.ts → AuthorizeBonusRequest.d.ts} +3 -3
- package/bin/transactionProcessor/dtos/{AuthorizeWelcomeBonusRequest.js → AuthorizeBonusRequest.js} +10 -10
- package/bin/transactionProcessor/index.d.ts +1 -1
- package/bin/transactionProcessor/index.js +1 -1
- package/bin/webhookBusiness/constants/CaseRefPattern.d.ts +8 -0
- package/bin/webhookBusiness/constants/CaseRefPattern.js +11 -0
- package/bin/webhookBusiness/constants/WebhookFieldLimits.d.ts +6 -0
- package/bin/webhookBusiness/constants/WebhookFieldLimits.js +9 -0
- package/bin/webhookBusiness/dtos/WebhookDeliveryView.d.ts +28 -0
- package/bin/webhookBusiness/dtos/WebhookDeliveryView.js +2 -0
- package/bin/webhookBusiness/dtos/WebhookEventEnvelope.d.ts +27 -0
- package/bin/webhookBusiness/dtos/WebhookEventEnvelope.js +62 -0
- package/bin/webhookBusiness/dtos/WebhookOutboundMessage.d.ts +10 -0
- package/bin/webhookBusiness/dtos/WebhookOutboundMessage.js +2 -0
- package/bin/webhookBusiness/dtos/WebhookSubscriptionView.d.ts +23 -0
- package/bin/webhookBusiness/dtos/WebhookSubscriptionView.js +2 -0
- package/bin/webhookBusiness/dtos/requests/DeactivateWebhookSubscriptionRequest.d.ts +11 -0
- package/bin/webhookBusiness/dtos/requests/DeactivateWebhookSubscriptionRequest.js +42 -0
- package/bin/webhookBusiness/dtos/requests/GetWebhookSubscriptionRequest.d.ts +9 -0
- package/bin/webhookBusiness/dtos/requests/GetWebhookSubscriptionRequest.js +35 -0
- package/bin/webhookBusiness/dtos/requests/ListWebhookDeliveriesRequest.d.ts +9 -0
- package/bin/webhookBusiness/dtos/requests/ListWebhookDeliveriesRequest.js +35 -0
- package/bin/webhookBusiness/dtos/requests/RedeliverWebhookEventRequest.d.ts +11 -0
- package/bin/webhookBusiness/dtos/requests/RedeliverWebhookEventRequest.js +43 -0
- package/bin/webhookBusiness/dtos/requests/UpsertWebhookSubscriptionRequest.d.ts +22 -0
- package/bin/webhookBusiness/dtos/requests/UpsertWebhookSubscriptionRequest.js +89 -0
- package/bin/webhookBusiness/dtos/responses/DeactivateWebhookSubscriptionResponse.d.ts +5 -0
- package/bin/webhookBusiness/dtos/responses/DeactivateWebhookSubscriptionResponse.js +2 -0
- package/bin/webhookBusiness/dtos/responses/GetWebhookSubscriptionResponse.d.ts +5 -0
- package/bin/webhookBusiness/dtos/responses/GetWebhookSubscriptionResponse.js +2 -0
- package/bin/webhookBusiness/dtos/responses/ListWebhookDeliveriesResponse.d.ts +10 -0
- package/bin/webhookBusiness/dtos/responses/ListWebhookDeliveriesResponse.js +2 -0
- package/bin/webhookBusiness/dtos/responses/ListWebhookSubscriptionsResponse.d.ts +10 -0
- package/bin/webhookBusiness/dtos/responses/ListWebhookSubscriptionsResponse.js +2 -0
- package/bin/webhookBusiness/dtos/responses/RedeliverWebhookEventResponse.d.ts +11 -0
- package/bin/webhookBusiness/dtos/responses/RedeliverWebhookEventResponse.js +2 -0
- package/bin/webhookBusiness/dtos/responses/UpsertWebhookSubscriptionResponse.d.ts +7 -0
- package/bin/webhookBusiness/dtos/responses/UpsertWebhookSubscriptionResponse.js +2 -0
- package/bin/webhookBusiness/enums/ComplianceDecisionEnum.d.ts +11 -0
- package/bin/webhookBusiness/enums/ComplianceDecisionEnum.js +15 -0
- package/bin/webhookBusiness/enums/DeliveryOutcomeEnum.d.ts +15 -0
- package/bin/webhookBusiness/enums/DeliveryOutcomeEnum.js +19 -0
- package/bin/webhookBusiness/enums/SubscriptionStatusEnum.d.ts +5 -0
- package/bin/webhookBusiness/enums/SubscriptionStatusEnum.js +9 -0
- package/bin/webhookBusiness/enums/SubscriptionVisibilityEnum.d.ts +10 -0
- package/bin/webhookBusiness/enums/SubscriptionVisibilityEnum.js +14 -0
- package/bin/webhookBusiness/enums/WebhookEventType.d.ts +10 -0
- package/bin/webhookBusiness/enums/WebhookEventType.js +14 -0
- package/bin/webhookBusiness/events/AccountIssuanceCompletedV1.d.ts +19 -0
- package/bin/webhookBusiness/events/AccountIssuanceCompletedV1.js +47 -0
- package/bin/webhookBusiness/events/ComplianceDecisionV1.d.ts +25 -0
- package/bin/webhookBusiness/events/ComplianceDecisionV1.js +51 -0
- package/bin/webhookBusiness/index.d.ts +24 -0
- package/bin/webhookBusiness/index.js +47 -0
- package/package.json +1 -1
- package/src/index.ts +4 -0
- package/src/productCatalog/enums/ProductSubtypeEnum.ts +2 -2
- package/src/productCatalog/enums/ProductTypeEnum.ts +4 -4
- package/src/transactionProcessor/dtos/{AuthorizeWelcomeBonusRequest.ts → AuthorizeBonusRequest.ts} +3 -3
- package/src/transactionProcessor/index.ts +1 -1
- package/src/webhookBusiness/constants/CaseRefPattern.ts +9 -0
- package/src/webhookBusiness/constants/WebhookFieldLimits.ts +8 -0
- package/src/webhookBusiness/dtos/WebhookDeliveryView.ts +29 -0
- package/src/webhookBusiness/dtos/WebhookEventEnvelope.ts +42 -0
- package/src/webhookBusiness/dtos/WebhookOutboundMessage.ts +18 -0
- package/src/webhookBusiness/dtos/WebhookSubscriptionView.ts +24 -0
- package/src/webhookBusiness/dtos/requests/DeactivateWebhookSubscriptionRequest.ts +27 -0
- package/src/webhookBusiness/dtos/requests/GetWebhookSubscriptionRequest.ts +20 -0
- package/src/webhookBusiness/dtos/requests/ListWebhookDeliveriesRequest.ts +21 -0
- package/src/webhookBusiness/dtos/requests/RedeliverWebhookEventRequest.ts +28 -0
- package/src/webhookBusiness/dtos/requests/UpsertWebhookSubscriptionRequest.ts +69 -0
- package/src/webhookBusiness/dtos/responses/DeactivateWebhookSubscriptionResponse.ts +6 -0
- package/src/webhookBusiness/dtos/responses/GetWebhookSubscriptionResponse.ts +6 -0
- package/src/webhookBusiness/dtos/responses/ListWebhookDeliveriesResponse.ts +11 -0
- package/src/webhookBusiness/dtos/responses/ListWebhookSubscriptionsResponse.ts +11 -0
- package/src/webhookBusiness/dtos/responses/RedeliverWebhookEventResponse.ts +12 -0
- package/src/webhookBusiness/dtos/responses/UpsertWebhookSubscriptionResponse.ts +8 -0
- package/src/webhookBusiness/enums/ComplianceDecisionEnum.ts +11 -0
- package/src/webhookBusiness/enums/DeliveryOutcomeEnum.ts +15 -0
- package/src/webhookBusiness/enums/SubscriptionStatusEnum.ts +5 -0
- package/src/webhookBusiness/enums/SubscriptionVisibilityEnum.ts +10 -0
- package/src/webhookBusiness/enums/WebhookEventType.ts +10 -0
- package/src/webhookBusiness/events/AccountIssuanceCompletedV1.ts +30 -0
- package/src/webhookBusiness/events/ComplianceDecisionV1.ts +36 -0
- package/src/webhookBusiness/index.ts +37 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubscriptionVisibilityEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Qué cliente y qué credenciales lleva la entrega. No es "dentro o fuera de la VPC".
|
|
6
|
+
* Es enum y no un booleano para poder sumar un tercer modo (firma, mTLS, bearer) sin migrar la tabla.
|
|
7
|
+
*/
|
|
8
|
+
var SubscriptionVisibilityEnum;
|
|
9
|
+
(function (SubscriptionVisibilityEnum) {
|
|
10
|
+
/** Receptor dentro de la VPC: la baseUrl se resuelve por destino y se pasa por llamada. */
|
|
11
|
+
SubscriptionVisibilityEnum["PRIVATE"] = "PRIVATE";
|
|
12
|
+
/** Receptor fuera de la VPC: HTTP plano contra la URL absoluta, sin token ni headers propios. */
|
|
13
|
+
SubscriptionVisibilityEnum["PUBLIC"] = "PUBLIC";
|
|
14
|
+
})(SubscriptionVisibilityEnum || (exports.SubscriptionVisibilityEnum = SubscriptionVisibilityEnum = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catálogo cerrado de eventos que `webhook-business` entrega a suscriptores externos (corte 1).
|
|
3
|
+
* El valor es el nombre versionado del contrato: el receptor rutea por él y no por el shape.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum WebhookEventType {
|
|
6
|
+
/** La emisión de la cuenta PCF llegó a su desenlace terminal (abrió o falló). */
|
|
7
|
+
AccountIssuanceCompleted = "AccountIssuanceCompletedV1",
|
|
8
|
+
/** El oficial de cumplimiento dictaminó sobre el caso. */
|
|
9
|
+
ComplianceDecision = "ComplianceDecisionV1"
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebhookEventType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Catálogo cerrado de eventos que `webhook-business` entrega a suscriptores externos (corte 1).
|
|
6
|
+
* El valor es el nombre versionado del contrato: el receptor rutea por él y no por el shape.
|
|
7
|
+
*/
|
|
8
|
+
var WebhookEventType;
|
|
9
|
+
(function (WebhookEventType) {
|
|
10
|
+
/** La emisión de la cuenta PCF llegó a su desenlace terminal (abrió o falló). */
|
|
11
|
+
WebhookEventType["AccountIssuanceCompleted"] = "AccountIssuanceCompletedV1";
|
|
12
|
+
/** El oficial de cumplimiento dictaminó sobre el caso. */
|
|
13
|
+
WebhookEventType["ComplianceDecision"] = "ComplianceDecisionV1";
|
|
14
|
+
})(WebhookEventType || (exports.WebhookEventType = WebhookEventType = {}));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AccountStatusEnum } from '../../retailCustomer/enums/AccountStatusEnum';
|
|
2
|
+
/**
|
|
3
|
+
* Desenlace terminal de la emisión de la cuenta PCF, entregado por webhook a un suscriptor externo.
|
|
4
|
+
* Espeja `RetailCustomer.AccountResultRequest`, el contrato que el receptor ya espera. No lleva CLABE.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AccountIssuanceCompletedV1 {
|
|
7
|
+
/** Identidad de la persona en Fiado. El `directoryId` viaja en el sobre, no aquí. */
|
|
8
|
+
peopleId: string;
|
|
9
|
+
/** `OPENING` y `LINKED` no son valores válidos: este evento solo reporta el desenlace. */
|
|
10
|
+
status: AccountStatusEnum;
|
|
11
|
+
/** Nivel de la cuenta PCF. Presente solo con `OPEN`. */
|
|
12
|
+
pcfAccountLevel?: 1 | 2;
|
|
13
|
+
/**
|
|
14
|
+
* Por qué no abrió, para soporte y administración. Presente solo con `FAILED`.
|
|
15
|
+
* Texto libre del core, que puede mencionar cumplimiento: nunca se le muestra al vendedor ni al
|
|
16
|
+
* comprador, misma regla que `WizardBlocked.detail`.
|
|
17
|
+
*/
|
|
18
|
+
failReason?: string;
|
|
19
|
+
}
|
|
@@ -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.AccountIssuanceCompletedV1 = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const AccountStatusEnum_1 = require("../../retailCustomer/enums/AccountStatusEnum");
|
|
16
|
+
const WebhookFieldLimits_1 = require("../constants/WebhookFieldLimits");
|
|
17
|
+
/**
|
|
18
|
+
* Desenlace terminal de la emisión de la cuenta PCF, entregado por webhook a un suscriptor externo.
|
|
19
|
+
* Espeja `RetailCustomer.AccountResultRequest`, el contrato que el receptor ya espera. No lleva CLABE.
|
|
20
|
+
*/
|
|
21
|
+
class AccountIssuanceCompletedV1 {
|
|
22
|
+
}
|
|
23
|
+
exports.AccountIssuanceCompletedV1 = AccountIssuanceCompletedV1;
|
|
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
|
+
], AccountIssuanceCompletedV1.prototype, "peopleId", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_transformer_1.Expose)(),
|
|
32
|
+
(0, class_validator_1.IsIn)([AccountStatusEnum_1.AccountStatusEnum.OPEN, AccountStatusEnum_1.AccountStatusEnum.FAILED]),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], AccountIssuanceCompletedV1.prototype, "status", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_transformer_1.Expose)(),
|
|
37
|
+
(0, class_validator_1.IsOptional)(),
|
|
38
|
+
(0, class_validator_1.IsIn)([1, 2]),
|
|
39
|
+
__metadata("design:type", Number)
|
|
40
|
+
], AccountIssuanceCompletedV1.prototype, "pcfAccountLevel", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_transformer_1.Expose)(),
|
|
43
|
+
(0, class_validator_1.IsOptional)(),
|
|
44
|
+
(0, class_validator_1.IsString)(),
|
|
45
|
+
(0, class_validator_1.MaxLength)(WebhookFieldLimits_1.WEBHOOK_FAIL_REASON_MAX_LENGTH),
|
|
46
|
+
__metadata("design:type", String)
|
|
47
|
+
], AccountIssuanceCompletedV1.prototype, "failReason", void 0);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ComplianceDecisionEnum } from '../enums/ComplianceDecisionEnum';
|
|
2
|
+
/**
|
|
3
|
+
* Dictamen del oficial de cumplimiento, entregado por webhook a un suscriptor externo.
|
|
4
|
+
* Lleva el desenlace accionable y nada más: el receptor necesita saber qué hacer, no por qué.
|
|
5
|
+
*
|
|
6
|
+
* Restricción legal, no preferencia de diseño. El DTO NO lleva qué lista disparó, ni la
|
|
7
|
+
* justificación del oficial, ni quién firmó, ni el `alertId` de PLD. Avisar de una coincidencia en
|
|
8
|
+
* listas de cumplimiento es delito. Cualquier campo que se agregue aquí tiene que pasar ese filtro.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ComplianceDecisionV1 {
|
|
11
|
+
/** Identidad de la persona en Fiado. El `directoryId` viaja en el sobre, no aquí. */
|
|
12
|
+
peopleId: string;
|
|
13
|
+
/**
|
|
14
|
+
* Estado consolidado del caso, no el sello de una lista: `REJECTED` en cuanto una lista rechaza,
|
|
15
|
+
* `CLEARED` sólo cuando ya no queda ninguna trabando.
|
|
16
|
+
*/
|
|
17
|
+
decision: ComplianceDecisionEnum;
|
|
18
|
+
/** ISO-8601. Cuándo se estampó el dictamen. */
|
|
19
|
+
decidedAt: string;
|
|
20
|
+
/**
|
|
21
|
+
* Referencia OPACA para soporte, acuñada para el webhook: permite rastrear el caso sin nombrarlo.
|
|
22
|
+
* El formato con prefijo es lo que impide que entre el `alertId` de PLD. Ver `CaseRefPattern`.
|
|
23
|
+
*/
|
|
24
|
+
caseRef?: string;
|
|
25
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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.ComplianceDecisionV1 = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const ComplianceDecisionEnum_1 = require("../enums/ComplianceDecisionEnum");
|
|
16
|
+
const CaseRefPattern_1 = require("../constants/CaseRefPattern");
|
|
17
|
+
/**
|
|
18
|
+
* Dictamen del oficial de cumplimiento, entregado por webhook a un suscriptor externo.
|
|
19
|
+
* Lleva el desenlace accionable y nada más: el receptor necesita saber qué hacer, no por qué.
|
|
20
|
+
*
|
|
21
|
+
* Restricción legal, no preferencia de diseño. El DTO NO lleva qué lista disparó, ni la
|
|
22
|
+
* justificación del oficial, ni quién firmó, ni el `alertId` de PLD. Avisar de una coincidencia en
|
|
23
|
+
* listas de cumplimiento es delito. Cualquier campo que se agregue aquí tiene que pasar ese filtro.
|
|
24
|
+
*/
|
|
25
|
+
class ComplianceDecisionV1 {
|
|
26
|
+
}
|
|
27
|
+
exports.ComplianceDecisionV1 = ComplianceDecisionV1;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_transformer_1.Expose)(),
|
|
30
|
+
(0, class_validator_1.IsString)(),
|
|
31
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], ComplianceDecisionV1.prototype, "peopleId", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_transformer_1.Expose)(),
|
|
36
|
+
(0, class_validator_1.IsEnum)(ComplianceDecisionEnum_1.ComplianceDecisionEnum),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], ComplianceDecisionV1.prototype, "decision", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, class_transformer_1.Expose)(),
|
|
41
|
+
(0, class_validator_1.IsString)(),
|
|
42
|
+
(0, class_validator_1.IsISO8601)(),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], ComplianceDecisionV1.prototype, "decidedAt", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_transformer_1.Expose)(),
|
|
47
|
+
(0, class_validator_1.IsOptional)(),
|
|
48
|
+
(0, class_validator_1.IsString)(),
|
|
49
|
+
(0, class_validator_1.Matches)(CaseRefPattern_1.WEBHOOK_CASE_REF_PATTERN, { message: CaseRefPattern_1.WEBHOOK_CASE_REF_MESSAGE }),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], ComplianceDecisionV1.prototype, "caseRef", void 0);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from './enums/WebhookEventType';
|
|
2
|
+
export * from './enums/ComplianceDecisionEnum';
|
|
3
|
+
export * from './enums/SubscriptionVisibilityEnum';
|
|
4
|
+
export * from './enums/SubscriptionStatusEnum';
|
|
5
|
+
export * from './enums/DeliveryOutcomeEnum';
|
|
6
|
+
export * from './constants/CaseRefPattern';
|
|
7
|
+
export * from './constants/WebhookFieldLimits';
|
|
8
|
+
export * from './events/AccountIssuanceCompletedV1';
|
|
9
|
+
export * from './events/ComplianceDecisionV1';
|
|
10
|
+
export * from './dtos/WebhookEventEnvelope';
|
|
11
|
+
export * from './dtos/WebhookOutboundMessage';
|
|
12
|
+
export * from './dtos/WebhookSubscriptionView';
|
|
13
|
+
export * from './dtos/WebhookDeliveryView';
|
|
14
|
+
export * from './dtos/requests/UpsertWebhookSubscriptionRequest';
|
|
15
|
+
export * from './dtos/requests/GetWebhookSubscriptionRequest';
|
|
16
|
+
export * from './dtos/requests/DeactivateWebhookSubscriptionRequest';
|
|
17
|
+
export * from './dtos/requests/ListWebhookDeliveriesRequest';
|
|
18
|
+
export * from './dtos/requests/RedeliverWebhookEventRequest';
|
|
19
|
+
export * from './dtos/responses/UpsertWebhookSubscriptionResponse';
|
|
20
|
+
export * from './dtos/responses/GetWebhookSubscriptionResponse';
|
|
21
|
+
export * from './dtos/responses/ListWebhookSubscriptionsResponse';
|
|
22
|
+
export * from './dtos/responses/DeactivateWebhookSubscriptionResponse';
|
|
23
|
+
export * from './dtos/responses/ListWebhookDeliveriesResponse';
|
|
24
|
+
export * from './dtos/responses/RedeliverWebhookEventResponse';
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
// Enums
|
|
18
|
+
__exportStar(require("./enums/WebhookEventType"), exports);
|
|
19
|
+
__exportStar(require("./enums/ComplianceDecisionEnum"), exports);
|
|
20
|
+
__exportStar(require("./enums/SubscriptionVisibilityEnum"), exports);
|
|
21
|
+
__exportStar(require("./enums/SubscriptionStatusEnum"), exports);
|
|
22
|
+
__exportStar(require("./enums/DeliveryOutcomeEnum"), exports);
|
|
23
|
+
// Formatos y topes compartidos por los contratos
|
|
24
|
+
__exportStar(require("./constants/CaseRefPattern"), exports);
|
|
25
|
+
__exportStar(require("./constants/WebhookFieldLimits"), exports);
|
|
26
|
+
// Contratos de eventos (PascalCase + sufijo V1)
|
|
27
|
+
__exportStar(require("./events/AccountIssuanceCompletedV1"), exports);
|
|
28
|
+
__exportStar(require("./events/ComplianceDecisionV1"), exports);
|
|
29
|
+
// Sobre común + unión cerrada de la cola
|
|
30
|
+
__exportStar(require("./dtos/WebhookEventEnvelope"), exports);
|
|
31
|
+
__exportStar(require("./dtos/WebhookOutboundMessage"), exports);
|
|
32
|
+
// Vistas del padrón y de la bitácora, tal como salen por la API de administración
|
|
33
|
+
__exportStar(require("./dtos/WebhookSubscriptionView"), exports);
|
|
34
|
+
__exportStar(require("./dtos/WebhookDeliveryView"), exports);
|
|
35
|
+
// API privada de administración — requests
|
|
36
|
+
__exportStar(require("./dtos/requests/UpsertWebhookSubscriptionRequest"), exports);
|
|
37
|
+
__exportStar(require("./dtos/requests/GetWebhookSubscriptionRequest"), exports);
|
|
38
|
+
__exportStar(require("./dtos/requests/DeactivateWebhookSubscriptionRequest"), exports);
|
|
39
|
+
__exportStar(require("./dtos/requests/ListWebhookDeliveriesRequest"), exports);
|
|
40
|
+
__exportStar(require("./dtos/requests/RedeliverWebhookEventRequest"), exports);
|
|
41
|
+
// API privada de administración — responses
|
|
42
|
+
__exportStar(require("./dtos/responses/UpsertWebhookSubscriptionResponse"), exports);
|
|
43
|
+
__exportStar(require("./dtos/responses/GetWebhookSubscriptionResponse"), exports);
|
|
44
|
+
__exportStar(require("./dtos/responses/ListWebhookSubscriptionsResponse"), exports);
|
|
45
|
+
__exportStar(require("./dtos/responses/DeactivateWebhookSubscriptionResponse"), exports);
|
|
46
|
+
__exportStar(require("./dtos/responses/ListWebhookDeliveriesResponse"), exports);
|
|
47
|
+
__exportStar(require("./dtos/responses/RedeliverWebhookEventResponse"), exports);
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -168,3 +168,7 @@ export * as Collection from './collection';
|
|
|
168
168
|
export * as UserConfirmations from './userConfirmations';
|
|
169
169
|
// PeopleBusiness: contrato de lectura por lote de People_GT + AccountRequirementControl_GT.
|
|
170
170
|
export * as PeopleBusiness from './peopleBusiness';
|
|
171
|
+
// WebhookBusiness: contrato de la cola del lambda webhook-business — entrega de eventos de Fiado a
|
|
172
|
+
// suscriptores externos. Sobre común `WebhookEventEnvelope<T>` + los dos eventos del corte 1.
|
|
173
|
+
// El evento del oficial de cumplimiento NO dice sobre qué se dictaminó (restricción legal).
|
|
174
|
+
export * as WebhookBusiness from './webhookBusiness';
|
|
@@ -19,9 +19,9 @@ export enum ProductTypeEnum {
|
|
|
19
19
|
*/
|
|
20
20
|
EQ_CASH_SA = "EQ_CASH_SA",
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Categoría de las transacciones de SureKeep. Agrupa; el motivo va en el subtipo. Deliberadamente
|
|
23
|
+
* FUERA del switch de `CreateTransactionManager`: el camino por defecto es el que escribe el par
|
|
24
|
+
* de asientos FiadoTx + PagoConFiadoTx.
|
|
25
25
|
*/
|
|
26
|
-
|
|
26
|
+
SUREKEEP = "SUREKEEP"
|
|
27
27
|
}
|
package/src/transactionProcessor/dtos/{AuthorizeWelcomeBonusRequest.ts → AuthorizeBonusRequest.ts}
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { IsNotEmpty, IsNumber, IsPositive, IsString, MaxLength } from "class-validator";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Acreditación de un bono
|
|
4
|
+
* Acreditación de un bono a la wallet PagoConfiado de una persona.
|
|
5
5
|
*
|
|
6
6
|
* NO lleva `operation`: un bono solo suma, y el servicio hardcodea `ADD`. Con el campo en el
|
|
7
7
|
* request, un caller equivocado debitaría la wallet con el producto del bono.
|
|
8
8
|
*
|
|
9
9
|
* NO lleva `peopleId`: `initialize()` lo resuelve desde el directorio y pisa cualquier valor.
|
|
10
10
|
*/
|
|
11
|
-
export class
|
|
11
|
+
export class AuthorizeBonusRequest {
|
|
12
12
|
/** Es el `bonusId` del asiento: única por intento, para que un reintento real vuelva a ejecutar. */
|
|
13
13
|
@IsString()
|
|
14
14
|
@IsNotEmpty()
|
|
@@ -33,4 +33,4 @@ export class AuthorizeWelcomeBonusRequest {
|
|
|
33
33
|
concept: string;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export default
|
|
36
|
+
export default AuthorizeBonusRequest;
|
|
@@ -10,7 +10,7 @@ export * from './dtos/AuthorizeSpeiMexBankTransferInRequest';
|
|
|
10
10
|
export * from './dtos/AuthorizeSpeiBankTransferNcRequest';
|
|
11
11
|
export * from './dtos/AuthorizeCollectorTransactionRequest';
|
|
12
12
|
export * from './dtos/AuthorizeDisputeTransactionRequest';
|
|
13
|
-
export * from './dtos/
|
|
13
|
+
export * from './dtos/AuthorizeBonusRequest';
|
|
14
14
|
export * from './dtos/CardInfo';
|
|
15
15
|
export * from './dtos/InstallmentsInfo';
|
|
16
16
|
export * from './dtos/MerchantInfo';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formato de `caseRef`: prefijo `case_` más un ULID de 26 caracteres en Crockford base32, el mismo
|
|
3
|
+
* cuerpo que `CREDIT_ID_PATTERN`. El prefijo obliga a acuñar la referencia para el webhook, así que
|
|
4
|
+
* un `alertId` de PLD (UUID crudo o `stuck-<id>`) no lo satisface y no puede colarse.
|
|
5
|
+
*/
|
|
6
|
+
export const WEBHOOK_CASE_REF_PATTERN = /^case_[0-7][0-9A-HJKMNP-TV-Z]{25}$/;
|
|
7
|
+
|
|
8
|
+
/** Mensaje único, para que el productor no tenga que adivinar el formato. */
|
|
9
|
+
export const WEBHOOK_CASE_REF_MESSAGE = 'caseRef debe ser case_ seguido de un ULID de 26 caracteres';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Tope del `tag` del padrón, común a los tres contratos que lo llevan. */
|
|
2
|
+
export const WEBHOOK_TAG_MAX_LENGTH = 128;
|
|
3
|
+
|
|
4
|
+
/** Tope del `eventId`, común al sobre de la cola y al request de reposición. */
|
|
5
|
+
export const WEBHOOK_EVENT_ID_MAX_LENGTH = 128;
|
|
6
|
+
|
|
7
|
+
/** Tope del `failReason` del core, que sale sin transformar hacia un receptor externo. */
|
|
8
|
+
export const WEBHOOK_FAIL_REASON_MAX_LENGTH = 512;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { WebhookEventType } from '../enums/WebhookEventType';
|
|
2
|
+
import type { DeliveryOutcomeEnum } from '../enums/DeliveryOutcomeEnum';
|
|
3
|
+
import type { SubscriptionVisibilityEnum } from '../enums/SubscriptionVisibilityEnum';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Un asiento de la bitácora de entregas: qué evento salió, a quién y cómo terminó.
|
|
7
|
+
* Nunca lleva el payload del evento, sólo identificadores operacionales y el desenlace.
|
|
8
|
+
*/
|
|
9
|
+
export interface WebhookDeliveryView {
|
|
10
|
+
eventId: string;
|
|
11
|
+
eventType: WebhookEventType;
|
|
12
|
+
/** Lambda que produjo el evento. */
|
|
13
|
+
source: string;
|
|
14
|
+
directoryId: string;
|
|
15
|
+
occurredAt: string;
|
|
16
|
+
outcome: DeliveryOutcomeEnum;
|
|
17
|
+
tag?: string;
|
|
18
|
+
subscriberName?: string;
|
|
19
|
+
visibility?: SubscriptionVisibilityEnum;
|
|
20
|
+
url?: string;
|
|
21
|
+
attempt?: number;
|
|
22
|
+
/** Status con el que respondió el receptor. Ausente si nunca hubo respuesta. */
|
|
23
|
+
receiverHttpStatus?: number;
|
|
24
|
+
errorCode?: string;
|
|
25
|
+
/** Motivo del fallo, recortado. Nunca la respuesta entera del receptor. */
|
|
26
|
+
failureReason?: string;
|
|
27
|
+
latencyMs?: number;
|
|
28
|
+
createdAt?: number;
|
|
29
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsEnum, IsISO8601, IsNotEmpty, IsNotEmptyObject, IsObject, IsString, MaxLength } from 'class-validator';
|
|
3
|
+
import { WebhookEventType } from '../enums/WebhookEventType';
|
|
4
|
+
import { WEBHOOK_EVENT_ID_MAX_LENGTH } from '../constants/WebhookFieldLimits';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sobre común de todo lo que sale por `webhook-business`. El receptor rutea por `eventType` y recién
|
|
8
|
+
* ahí valida el `payload` contra la clase concreta que le corresponde.
|
|
9
|
+
*
|
|
10
|
+
* `TEventType` deja fijar el miembro del catálogo que acompaña a `TPayload`, para que el par
|
|
11
|
+
* `(eventType, payload)` quede amarrado en `WebhookOutboundMessage`.
|
|
12
|
+
*/
|
|
13
|
+
export class WebhookEventEnvelope<TPayload, TEventType extends WebhookEventType = WebhookEventType> {
|
|
14
|
+
/** Idempotencia del receptor: reprocesar el mismo `eventId` no debe duplicar efectos. */
|
|
15
|
+
@Expose() @IsString() @IsNotEmpty() @MaxLength(WEBHOOK_EVENT_ID_MAX_LENGTH)
|
|
16
|
+
eventId!: string;
|
|
17
|
+
|
|
18
|
+
@Expose() @IsEnum(WebhookEventType)
|
|
19
|
+
eventType!: TEventType;
|
|
20
|
+
|
|
21
|
+
/** Lambda que lo produjo. Para soporte y para la bitácora de entregas. */
|
|
22
|
+
@Expose() @IsString() @IsNotEmpty()
|
|
23
|
+
source!: string;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* La llave de enrutamiento: con esto `webhook-business` resuelve los tags `wh:*` y decide a
|
|
27
|
+
* quién le toca. Obligatorio en TODO evento — sin él no hay destinatario posible.
|
|
28
|
+
*/
|
|
29
|
+
@Expose() @IsString() @IsNotEmpty()
|
|
30
|
+
directoryId!: string;
|
|
31
|
+
|
|
32
|
+
/** ISO-8601. Resuelve el reordenamiento; la cola es estándar y no garantiza orden. */
|
|
33
|
+
@Expose() @IsString() @IsISO8601()
|
|
34
|
+
occurredAt!: string;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* El evento concreto, sin transformar. Se valida como objeto presente y nada más: la clase real
|
|
38
|
+
* la elige el receptor por `eventType`, y un `@Type()` genérico aquí dejaría el payload vacío.
|
|
39
|
+
*/
|
|
40
|
+
@Expose() @IsObject() @IsNotEmptyObject()
|
|
41
|
+
payload!: TPayload;
|
|
42
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WebhookEventEnvelope } from './WebhookEventEnvelope';
|
|
2
|
+
import { WebhookEventType } from '../enums/WebhookEventType';
|
|
3
|
+
import { AccountIssuanceCompletedV1 } from '../events/AccountIssuanceCompletedV1';
|
|
4
|
+
import { ComplianceDecisionV1 } from '../events/ComplianceDecisionV1';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Unión cerrada de todo lo que la cola de `webhook-business` transporta hacia suscriptores externos
|
|
8
|
+
* (corte 1). Cada variante amarra el par `(eventType, payload)`: un sobre que declara un tipo de
|
|
9
|
+
* evento y lleva el payload de otro no compila.
|
|
10
|
+
*/
|
|
11
|
+
export type WebhookOutboundMessage =
|
|
12
|
+
| WebhookEventEnvelope<AccountIssuanceCompletedV1, WebhookEventType.AccountIssuanceCompleted>
|
|
13
|
+
| WebhookEventEnvelope<ComplianceDecisionV1, WebhookEventType.ComplianceDecision>;
|
|
14
|
+
|
|
15
|
+
type AssertNever<T extends never> = T;
|
|
16
|
+
|
|
17
|
+
/** Falla la compilación si se agrega un `WebhookEventType` que la unión de arriba no cubre. */
|
|
18
|
+
type UncoveredWebhookEventType = AssertNever<Exclude<WebhookEventType, WebhookOutboundMessage['eventType']>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { WebhookEventType } from '../enums/WebhookEventType';
|
|
2
|
+
import type { SubscriptionStatusEnum } from '../enums/SubscriptionStatusEnum';
|
|
3
|
+
import type { SubscriptionVisibilityEnum } from '../enums/SubscriptionVisibilityEnum';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Una fila del padrón de suscriptores tal como sale por la API de administración.
|
|
7
|
+
* Expone el par `(tag, eventType)` en vez de las llaves crudas: `TAG#`/`EVT#` son detalle de DynamoDB.
|
|
8
|
+
*/
|
|
9
|
+
export interface WebhookSubscriptionView {
|
|
10
|
+
tag: string;
|
|
11
|
+
eventType: WebhookEventType;
|
|
12
|
+
subscriberName: string;
|
|
13
|
+
url: string;
|
|
14
|
+
visibility: SubscriptionVisibilityEnum;
|
|
15
|
+
status: SubscriptionStatusEnum;
|
|
16
|
+
/** Vínculo informativo con el padrón de socios M2M de RBAC. Todavía no gobierna la entrega. */
|
|
17
|
+
integrationId?: string;
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
maxRetries?: number;
|
|
20
|
+
createdAt?: number;
|
|
21
|
+
updatedAt?: number;
|
|
22
|
+
createdBy?: string;
|
|
23
|
+
updatedBy?: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsEnum, IsNotEmpty, IsOptional, IsString, MaxLength } from 'class-validator';
|
|
3
|
+
import { WebhookEventType } from '../../enums/WebhookEventType';
|
|
4
|
+
import { WEBHOOK_TAG_MAX_LENGTH } from '../../constants/WebhookFieldLimits';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Body de `POST /private/webhook-subscriptions/deactivate` — baja lógica del destino.
|
|
8
|
+
* La fila no se borra: la bitácora referencia tags que tienen que seguir siendo explicables.
|
|
9
|
+
*/
|
|
10
|
+
export class DeactivateWebhookSubscriptionRequest {
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsString()
|
|
13
|
+
@IsNotEmpty()
|
|
14
|
+
@MaxLength(WEBHOOK_TAG_MAX_LENGTH)
|
|
15
|
+
tag!: string;
|
|
16
|
+
|
|
17
|
+
@Expose()
|
|
18
|
+
@IsEnum(WebhookEventType)
|
|
19
|
+
eventType!: WebhookEventType;
|
|
20
|
+
|
|
21
|
+
/** Quién dispara la baja. Sin él la auditoría queda en `system`. */
|
|
22
|
+
@Expose()
|
|
23
|
+
@IsOptional()
|
|
24
|
+
@IsString()
|
|
25
|
+
@MaxLength(128)
|
|
26
|
+
actor?: string;
|
|
27
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsEnum, IsNotEmpty, IsString, MaxLength } from 'class-validator';
|
|
3
|
+
import { WebhookEventType } from '../../enums/WebhookEventType';
|
|
4
|
+
import { WEBHOOK_TAG_MAX_LENGTH } from '../../constants/WebhookFieldLimits';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Query de `GET /private/webhook-subscriptions/lookup`. El par viaja en el query string y no en el
|
|
8
|
+
* path porque el tag lleva `:` reservado, y un path param con dos puntos depende del cliente.
|
|
9
|
+
*/
|
|
10
|
+
export class GetWebhookSubscriptionRequest {
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsString()
|
|
13
|
+
@IsNotEmpty()
|
|
14
|
+
@MaxLength(WEBHOOK_TAG_MAX_LENGTH)
|
|
15
|
+
tag!: string;
|
|
16
|
+
|
|
17
|
+
@Expose()
|
|
18
|
+
@IsEnum(WebhookEventType)
|
|
19
|
+
eventType!: WebhookEventType;
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Expose, Type } from 'class-transformer';
|
|
2
|
+
import { IsInt, IsNotEmpty, IsOptional, IsPositive, IsString } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Query de `GET /private/webhook-deliveries` — la bitácora de un comprador, la consulta que
|
|
6
|
+
* contesta "por qué el suscriptor no se enteró de esto". Va contra el GSI `directoryId-createdAt-index`.
|
|
7
|
+
*/
|
|
8
|
+
export class ListWebhookDeliveriesRequest {
|
|
9
|
+
@Expose()
|
|
10
|
+
@IsString()
|
|
11
|
+
@IsNotEmpty()
|
|
12
|
+
directoryId!: string;
|
|
13
|
+
|
|
14
|
+
/** Tope de asientos a devolver. El manager lo recorta a su máximo. */
|
|
15
|
+
@Expose()
|
|
16
|
+
@IsOptional()
|
|
17
|
+
@Type(() => Number)
|
|
18
|
+
@IsInt()
|
|
19
|
+
@IsPositive()
|
|
20
|
+
limit?: number;
|
|
21
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsNotEmpty, IsNotEmptyObject, IsObject, IsOptional, IsString, MaxLength } from 'class-validator';
|
|
3
|
+
import { WEBHOOK_EVENT_ID_MAX_LENGTH } from '../../constants/WebhookFieldLimits';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Body de `POST /private/webhook-deliveries/redeliver` — reposición manual de un evento.
|
|
7
|
+
* El `payload` viaja en el request porque la bitácora guarda el desenlace, nunca el evento: de la
|
|
8
|
+
* fila salen el tipo, el origen y el destinatario; el contenido lo repone quien lo produjo.
|
|
9
|
+
*/
|
|
10
|
+
export class RedeliverWebhookEventRequest {
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsString()
|
|
13
|
+
@IsNotEmpty()
|
|
14
|
+
@MaxLength(WEBHOOK_EVENT_ID_MAX_LENGTH)
|
|
15
|
+
eventId!: string;
|
|
16
|
+
|
|
17
|
+
@Expose()
|
|
18
|
+
@IsObject()
|
|
19
|
+
@IsNotEmptyObject()
|
|
20
|
+
payload!: unknown;
|
|
21
|
+
|
|
22
|
+
/** Quién dispara el reenvío, para el log de la reposición. */
|
|
23
|
+
@Expose()
|
|
24
|
+
@IsOptional()
|
|
25
|
+
@IsString()
|
|
26
|
+
@MaxLength(128)
|
|
27
|
+
actor?: string;
|
|
28
|
+
}
|