@fiado/type-kit 3.360.0 → 3.362.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.
@@ -0,0 +1,41 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import { ActivationCheckRequest } from '../../../../src/loanCredit/dtos/requests/ActivationCheckRequest';
5
+
6
+ /** IMEI real con Luhn válido: el motor lo valida y un dígito inventado lo haría fallar. */
7
+ const IMEI = '351756051523999';
8
+
9
+ /** El SKU llega desde la ficha comercial que el wizard congeló en el paso 03. */
10
+ const PRODUCT_SKU = 'SKU-MOTO-G54-128';
11
+
12
+ /**
13
+ * `whitelist: true` es lo que corre el motor en `validateRequest`: una propiedad sin decorador de
14
+ * validación se borra del DTO, y el expediente MDM se queda sin SKU.
15
+ */
16
+ const validateWhitelisted = (body: object) => {
17
+ const dto = plainToInstance(ActivationCheckRequest, body);
18
+ return validate(dto, { whitelist: true, forbidNonWhitelisted: false }).then(errors => ({ dto, errors }));
19
+ };
20
+
21
+ describe('ActivationCheckRequest', () => {
22
+ it('conserva productSku al validar con whitelist', async () => {
23
+ const { dto, errors } = await validateWhitelisted({ imei: IMEI, imeiEnrolled: true, productSku: PRODUCT_SKU });
24
+
25
+ expect(errors).toEqual([]);
26
+ expect(dto.productSku).toBe(PRODUCT_SKU);
27
+ });
28
+
29
+ it('acepta el request sin productSku: la vía de activación puede no conocerlo', async () => {
30
+ const { dto, errors } = await validateWhitelisted({ imei: IMEI, imeiEnrolled: true });
31
+
32
+ expect(errors).toEqual([]);
33
+ expect(dto.productSku).toBeUndefined();
34
+ });
35
+
36
+ it('rechaza un productSku que no es string', async () => {
37
+ const { errors } = await validateWhitelisted({ imei: IMEI, productSku: 42 });
38
+
39
+ expect(errors.some(error => error.property === 'productSku')).toBe(true);
40
+ });
41
+ });
@@ -18,4 +18,6 @@ export declare class ActivationCheckRequest {
18
18
  lockVerified?: boolean;
19
19
  /** IMEI del equipo (paso 09) si no se fijó en el originate. Luhn-validado por el motor. */
20
20
  imei?: string;
21
+ /** SKU del producto vendido (paso 09). Lo congela el expediente MDM al enrolar. */
22
+ productSku?: string;
21
23
  }
@@ -50,3 +50,9 @@ __decorate([
50
50
  (0, class_validator_1.IsString)(),
51
51
  __metadata("design:type", String)
52
52
  ], ActivationCheckRequest.prototype, "imei", void 0);
53
+ __decorate([
54
+ (0, class_transformer_1.Expose)(),
55
+ (0, class_validator_1.IsOptional)(),
56
+ (0, class_validator_1.IsString)(),
57
+ __metadata("design:type", String)
58
+ ], ActivationCheckRequest.prototype, "productSku", void 0);
@@ -1,3 +1,4 @@
1
+ import { WalletFundingChannelEnum } from "../enums/WalletFundingChannelEnum";
1
2
  export declare class CreditWalletFundingRequest {
2
3
  directoryId: string;
3
4
  walletAccountId: string;
@@ -33,4 +34,13 @@ export declare class CreditWalletFundingRequest {
33
34
  * es el que usa Equality/Passport hoy.
34
35
  */
35
36
  productCatalogId?: string;
37
+ /**
38
+ * Red por la que se cobro. Ausente significa `NETWORK`, que es lo que eran
39
+ * todos los cash-in antes de que existiera este campo.
40
+ *
41
+ * El processor lo necesita para sellar el `subType` de la transaccion: no
42
+ * puede deducirlo del `productCatalogId` porque hoy ambos canales tarifan
43
+ * con el mismo producto — la comision es pareja.
44
+ */
45
+ channel?: WalletFundingChannelEnum;
36
46
  }
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CreditWalletFundingRequest = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const WalletFundingChannelEnum_1 = require("../enums/WalletFundingChannelEnum");
14
15
  class CreditWalletFundingRequest {
15
16
  }
16
17
  exports.CreditWalletFundingRequest = CreditWalletFundingRequest;
@@ -71,3 +72,8 @@ __decorate([
71
72
  (0, class_validator_1.MaxLength)(64),
72
73
  __metadata("design:type", String)
73
74
  ], CreditWalletFundingRequest.prototype, "productCatalogId", void 0);
75
+ __decorate([
76
+ (0, class_validator_1.IsOptional)(),
77
+ (0, class_validator_1.IsEnum)(WalletFundingChannelEnum_1.WalletFundingChannelEnum),
78
+ __metadata("design:type", String)
79
+ ], CreditWalletFundingRequest.prototype, "channel", void 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.360.0",
3
+ "version": "3.362.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -36,4 +36,10 @@ export class ActivationCheckRequest {
36
36
  @IsOptional()
37
37
  @IsString()
38
38
  imei?: string;
39
+
40
+ /** SKU del producto vendido (paso 09). Lo congela el expediente MDM al enrolar. */
41
+ @Expose()
42
+ @IsOptional()
43
+ @IsString()
44
+ productSku?: string;
39
45
  }
@@ -1,4 +1,5 @@
1
- import { IsString, IsNumber, IsPositive, Length, IsDateString, MaxLength, IsOptional } from "class-validator";
1
+ import { IsString, IsEnum, IsNumber, IsPositive, Length, IsDateString, MaxLength, IsOptional } from "class-validator";
2
+ import { WalletFundingChannelEnum } from "../enums/WalletFundingChannelEnum";
2
3
 
3
4
  export class CreditWalletFundingRequest {
4
5
  @IsString() @MaxLength(64) directoryId!: string;
@@ -35,4 +36,14 @@ export class CreditWalletFundingRequest {
35
36
  * es el que usa Equality/Passport hoy.
36
37
  */
37
38
  @IsOptional() @IsString() @MaxLength(64) productCatalogId?: string;
39
+
40
+ /**
41
+ * Red por la que se cobro. Ausente significa `NETWORK`, que es lo que eran
42
+ * todos los cash-in antes de que existiera este campo.
43
+ *
44
+ * El processor lo necesita para sellar el `subType` de la transaccion: no
45
+ * puede deducirlo del `productCatalogId` porque hoy ambos canales tarifan
46
+ * con el mismo producto — la comision es pareja.
47
+ */
48
+ @IsOptional() @IsEnum(WalletFundingChannelEnum) channel?: WalletFundingChannelEnum;
38
49
  }