@fiado/type-kit 3.592.0 → 3.594.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 (26) hide show
  1. package/_test_/unit/card/WalletProvisioningRequest.test.ts +45 -0
  2. package/_test_/unit/retailIntegration/reconciliationContracts.test.ts +18 -0
  3. package/bin/card/dtos/Internal/PomeloThreeDSChallengeAnswerRequest.d.ts +5 -0
  4. package/bin/card/dtos/Internal/PomeloThreeDSChallengeAnswerRequest.js +8 -0
  5. package/bin/card/dtos/Internal/PomeloWalletProvisioningRequest.d.ts +8 -0
  6. package/bin/card/dtos/Internal/PomeloWalletProvisioningRequest.js +7 -0
  7. package/bin/card/dtos/ThreeDSChallengeAnswerRequest.d.ts +4 -0
  8. package/bin/card/dtos/ThreeDSChallengeAnswerRequest.js +21 -0
  9. package/bin/card/dtos/WalletProvisioningRequest.d.ts +14 -0
  10. package/bin/card/dtos/WalletProvisioningRequest.js +65 -0
  11. package/bin/card/enums/ThreeDSChallengeResult.d.ts +4 -0
  12. package/bin/card/enums/ThreeDSChallengeResult.js +8 -0
  13. package/bin/card/enums/WalletProvider.d.ts +4 -0
  14. package/bin/card/enums/WalletProvider.js +8 -0
  15. package/bin/card/index.d.ts +6 -0
  16. package/bin/card/index.js +6 -0
  17. package/bin/retailIntegration/dtos/GetReconciliationResponses.d.ts +4 -0
  18. package/package.json +1 -1
  19. package/src/card/dtos/Internal/PomeloThreeDSChallengeAnswerRequest.ts +8 -0
  20. package/src/card/dtos/Internal/PomeloWalletProvisioningRequest.ts +10 -0
  21. package/src/card/dtos/ThreeDSChallengeAnswerRequest.ts +7 -0
  22. package/src/card/dtos/WalletProvisioningRequest.ts +43 -0
  23. package/src/card/enums/ThreeDSChallengeResult.ts +4 -0
  24. package/src/card/enums/WalletProvider.ts +4 -0
  25. package/src/card/index.ts +6 -0
  26. package/src/retailIntegration/dtos/GetReconciliationResponses.ts +4 -0
@@ -0,0 +1,45 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import { WalletProvisioningRequest } from '../../../src/card/dtos/WalletProvisioningRequest';
5
+ import { ThreeDSChallengeAnswerRequest } from '../../../src/card/dtos/ThreeDSChallengeAnswerRequest';
6
+
7
+ const errorsOf = (cls: any, body: unknown) => validate(plainToInstance(cls, body) as object);
8
+
9
+ describe('WalletProvisioningRequest', () => {
10
+ it('Apple con certificates, nonce y nonceSignature es válido', async () => {
11
+ const body = { wallet: 'APPLE_PAY', apple: { certificates: ['c1', 'c2'], nonce: 'bm9uY2U=', nonceSignature: 'c2ln' } };
12
+ expect(await errorsOf(WalletProvisioningRequest, body)).toHaveLength(0);
13
+ });
14
+
15
+ it('Apple sin el bloque apple es inválido', async () => {
16
+ expect((await errorsOf(WalletProvisioningRequest, { wallet: 'APPLE_PAY' })).length).toBeGreaterThan(0);
17
+ });
18
+
19
+ it('Apple con certificates vacío es inválido', async () => {
20
+ const body = { wallet: 'APPLE_PAY', apple: { certificates: [], nonce: 'n', nonceSignature: 's' } };
21
+ expect((await errorsOf(WalletProvisioningRequest, body)).length).toBeGreaterThan(0);
22
+ });
23
+
24
+ it('Google con serverSessionId es válido', async () => {
25
+ expect(await errorsOf(WalletProvisioningRequest, { wallet: 'GOOGLE_PAY', google: { serverSessionId: 'ssid' } })).toHaveLength(0);
26
+ });
27
+
28
+ it('Google sin serverSessionId es inválido', async () => {
29
+ expect((await errorsOf(WalletProvisioningRequest, { wallet: 'GOOGLE_PAY', google: {} })).length).toBeGreaterThan(0);
30
+ });
31
+
32
+ it('wallet desconocida es inválida', async () => {
33
+ expect((await errorsOf(WalletProvisioningRequest, { wallet: 'SAMSUNG_PAY' })).length).toBeGreaterThan(0);
34
+ });
35
+ });
36
+
37
+ describe('ThreeDSChallengeAnswerRequest', () => {
38
+ it('ACCEPTED es válido', async () => {
39
+ expect(await errorsOf(ThreeDSChallengeAnswerRequest, { result: 'ACCEPTED' })).toHaveLength(0);
40
+ });
41
+
42
+ it('un valor fuera del enum es inválido', async () => {
43
+ expect((await errorsOf(ThreeDSChallengeAnswerRequest, { result: 'MAYBE' })).length).toBeGreaterThan(0);
44
+ });
45
+ });
@@ -134,6 +134,24 @@ describe('respuestas de la revisión', () => {
134
134
  };
135
135
  expect(movements.movementsTo).toBe('2026-10-25T00:00:00.000Z');
136
136
  });
137
+
138
+ it('GetCatalogReconciliationResponse separa tiendas abortadas de las inexistentes', () => {
139
+ const inventory: GetCatalogReconciliationResponse = {
140
+ runId: 'run-i',
141
+ retailerId: 'r-1',
142
+ entity: ReconciliationEntityEnum.INVENTORY,
143
+ status: ReconciliationRunStatusEnum.COMPLETE,
144
+ trigger: ReconciliationTriggerEnum.MANUAL,
145
+ startedAt: '2026-10-25T10:00:00.000Z',
146
+ pagesProcessed: 3,
147
+ storesPending: 0,
148
+ storesAborted: 2,
149
+ storesNotFound: 1,
150
+ counts: { seen: 0, created: 0, updated: 0, deactivated: 0, reactivated: 0, skipped: 0 },
151
+ };
152
+ expect(inventory.storesAborted).toBe(2);
153
+ expect(inventory.storesNotFound).toBe(1);
154
+ });
137
155
  });
138
156
 
139
157
  describe('revisión con excludeExtraneousValues', () => {
@@ -0,0 +1,5 @@
1
+ import { ThreeDSChallengeResult } from '../../enums/ThreeDSChallengeResult';
2
+ export declare class PomeloThreeDSChallengeAnswerRequest {
3
+ result: ThreeDSChallengeResult;
4
+ allowedCardIds: string[];
5
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PomeloThreeDSChallengeAnswerRequest = void 0;
4
+ // Body card-business → fiado-pomelo-v2-lambda (POST /threeds/challenges/{id}/answer).
5
+ // allowedCardIds: tarjetas Pomelo (crd-…) del usuario; pomelo-v2 rechaza si el challenge no es de una de ellas.
6
+ class PomeloThreeDSChallengeAnswerRequest {
7
+ }
8
+ exports.PomeloThreeDSChallengeAnswerRequest = PomeloThreeDSChallengeAnswerRequest;
@@ -0,0 +1,8 @@
1
+ import { WalletProvider } from '../../enums/WalletProvider';
2
+ import { AppleWalletProvisioningData, GoogleWalletProvisioningData } from '../WalletProvisioningRequest';
3
+ export declare class PomeloWalletProvisioningRequest {
4
+ cardId: string;
5
+ wallet: WalletProvider;
6
+ apple?: AppleWalletProvisioningData;
7
+ google?: GoogleWalletProvisioningData;
8
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PomeloWalletProvisioningRequest = void 0;
4
+ // Body card-business → fiado-pomelo-v2-lambda (POST /tokenization/provisioning).
5
+ class PomeloWalletProvisioningRequest {
6
+ }
7
+ exports.PomeloWalletProvisioningRequest = PomeloWalletProvisioningRequest;
@@ -0,0 +1,4 @@
1
+ import { ThreeDSChallengeResult } from '../enums/ThreeDSChallengeResult';
2
+ export declare class ThreeDSChallengeAnswerRequest {
3
+ result: ThreeDSChallengeResult;
4
+ }
@@ -0,0 +1,21 @@
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.ThreeDSChallengeAnswerRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const ThreeDSChallengeResult_1 = require("../enums/ThreeDSChallengeResult");
15
+ class ThreeDSChallengeAnswerRequest {
16
+ }
17
+ exports.ThreeDSChallengeAnswerRequest = ThreeDSChallengeAnswerRequest;
18
+ __decorate([
19
+ (0, class_validator_1.IsEnum)(ThreeDSChallengeResult_1.ThreeDSChallengeResult),
20
+ __metadata("design:type", String)
21
+ ], ThreeDSChallengeAnswerRequest.prototype, "result", void 0);
@@ -0,0 +1,14 @@
1
+ import { WalletProvider } from '../enums/WalletProvider';
2
+ export declare class AppleWalletProvisioningData {
3
+ certificates: string[];
4
+ nonce: string;
5
+ nonceSignature: string;
6
+ }
7
+ export declare class GoogleWalletProvisioningData {
8
+ serverSessionId: string;
9
+ }
10
+ export declare class WalletProvisioningRequest {
11
+ wallet: WalletProvider;
12
+ apple?: AppleWalletProvisioningData;
13
+ google?: GoogleWalletProvisioningData;
14
+ }
@@ -0,0 +1,65 @@
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.WalletProvisioningRequest = exports.GoogleWalletProvisioningData = exports.AppleWalletProvisioningData = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const WalletProvider_1 = require("../enums/WalletProvider");
16
+ // Datos que entrega Apple (PKAddPaymentPassViewController) a la app. Se reenvían tal cual a Pomelo.
17
+ class AppleWalletProvisioningData {
18
+ }
19
+ exports.AppleWalletProvisioningData = AppleWalletProvisioningData;
20
+ __decorate([
21
+ (0, class_validator_1.IsArray)(),
22
+ (0, class_validator_1.ArrayNotEmpty)(),
23
+ (0, class_validator_1.IsString)({ each: true }),
24
+ __metadata("design:type", Array)
25
+ ], AppleWalletProvisioningData.prototype, "certificates", void 0);
26
+ __decorate([
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.IsNotEmpty)(),
29
+ __metadata("design:type", String)
30
+ ], AppleWalletProvisioningData.prototype, "nonce", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsString)(),
33
+ (0, class_validator_1.IsNotEmpty)(),
34
+ __metadata("design:type", String)
35
+ ], AppleWalletProvisioningData.prototype, "nonceSignature", void 0);
36
+ // Dato que entrega el SDK TapAndPay de Google a la app.
37
+ class GoogleWalletProvisioningData {
38
+ }
39
+ exports.GoogleWalletProvisioningData = GoogleWalletProvisioningData;
40
+ __decorate([
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.IsNotEmpty)(),
43
+ __metadata("design:type", String)
44
+ ], GoogleWalletProvisioningData.prototype, "serverSessionId", void 0);
45
+ class WalletProvisioningRequest {
46
+ }
47
+ exports.WalletProvisioningRequest = WalletProvisioningRequest;
48
+ __decorate([
49
+ (0, class_validator_1.IsEnum)(WalletProvider_1.WalletProvider),
50
+ __metadata("design:type", String)
51
+ ], WalletProvisioningRequest.prototype, "wallet", void 0);
52
+ __decorate([
53
+ (0, class_validator_1.ValidateIf)(o => o.wallet === WalletProvider_1.WalletProvider.APPLE_PAY),
54
+ (0, class_validator_1.IsDefined)(),
55
+ (0, class_validator_1.ValidateNested)(),
56
+ (0, class_transformer_1.Type)(() => AppleWalletProvisioningData),
57
+ __metadata("design:type", AppleWalletProvisioningData)
58
+ ], WalletProvisioningRequest.prototype, "apple", void 0);
59
+ __decorate([
60
+ (0, class_validator_1.ValidateIf)(o => o.wallet === WalletProvider_1.WalletProvider.GOOGLE_PAY),
61
+ (0, class_validator_1.IsDefined)(),
62
+ (0, class_validator_1.ValidateNested)(),
63
+ (0, class_transformer_1.Type)(() => GoogleWalletProvisioningData),
64
+ __metadata("design:type", GoogleWalletProvisioningData)
65
+ ], WalletProvisioningRequest.prototype, "google", void 0);
@@ -0,0 +1,4 @@
1
+ export declare enum ThreeDSChallengeResult {
2
+ ACCEPTED = "ACCEPTED",
3
+ REJECTED = "REJECTED"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThreeDSChallengeResult = void 0;
4
+ var ThreeDSChallengeResult;
5
+ (function (ThreeDSChallengeResult) {
6
+ ThreeDSChallengeResult["ACCEPTED"] = "ACCEPTED";
7
+ ThreeDSChallengeResult["REJECTED"] = "REJECTED";
8
+ })(ThreeDSChallengeResult || (exports.ThreeDSChallengeResult = ThreeDSChallengeResult = {}));
@@ -0,0 +1,4 @@
1
+ export declare enum WalletProvider {
2
+ APPLE_PAY = "APPLE_PAY",
3
+ GOOGLE_PAY = "GOOGLE_PAY"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WalletProvider = void 0;
4
+ var WalletProvider;
5
+ (function (WalletProvider) {
6
+ WalletProvider["APPLE_PAY"] = "APPLE_PAY";
7
+ WalletProvider["GOOGLE_PAY"] = "GOOGLE_PAY";
8
+ })(WalletProvider || (exports.WalletProvider = WalletProvider = {}));
@@ -74,3 +74,9 @@ export * from './enums/PinChangedStatus';
74
74
  export * from './constants/LevelOneAutoIssuanceTags';
75
75
  export * from './enums/CardAuditActorType';
76
76
  export * from './dtos/CardAuditInfo';
77
+ export * from './enums/WalletProvider';
78
+ export * from './enums/ThreeDSChallengeResult';
79
+ export * from './dtos/WalletProvisioningRequest';
80
+ export * from './dtos/ThreeDSChallengeAnswerRequest';
81
+ export * from './dtos/Internal/PomeloWalletProvisioningRequest';
82
+ export * from './dtos/Internal/PomeloThreeDSChallengeAnswerRequest';
package/bin/card/index.js CHANGED
@@ -93,3 +93,9 @@ __exportStar(require("./enums/PinChangedStatus"), exports);
93
93
  __exportStar(require("./constants/LevelOneAutoIssuanceTags"), exports);
94
94
  __exportStar(require("./enums/CardAuditActorType"), exports);
95
95
  __exportStar(require("./dtos/CardAuditInfo"), exports);
96
+ __exportStar(require("./enums/WalletProvider"), exports);
97
+ __exportStar(require("./enums/ThreeDSChallengeResult"), exports);
98
+ __exportStar(require("./dtos/WalletProvisioningRequest"), exports);
99
+ __exportStar(require("./dtos/ThreeDSChallengeAnswerRequest"), exports);
100
+ __exportStar(require("./dtos/Internal/PomeloWalletProvisioningRequest"), exports);
101
+ __exportStar(require("./dtos/Internal/PomeloThreeDSChallengeAnswerRequest"), exports);
@@ -31,6 +31,10 @@ export interface GetCatalogReconciliationResponse {
31
31
  storeId?: string;
32
32
  /** Tiendas de inventario que faltan por cerrar. */
33
33
  storesPending?: number;
34
+ /** Tiendas de inventario cerradas como ABORTED (reintentos agotados, renglón sin id, etc.). */
35
+ storesAborted?: number;
36
+ /** Tiendas cerradas porque no existen en el retailer (404 STORE_NOT_FOUND); no cuentan en storesAborted. */
37
+ storesNotFound?: number;
34
38
  /** Inicio ISO de la ventana revisada en movimientos. */
35
39
  movementsFrom?: string;
36
40
  /** Fin ISO de la ventana revisada en movimientos. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.592.0",
3
+ "version": "3.594.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,8 @@
1
+ import { ThreeDSChallengeResult } from '../../enums/ThreeDSChallengeResult';
2
+
3
+ // Body card-business → fiado-pomelo-v2-lambda (POST /threeds/challenges/{id}/answer).
4
+ // allowedCardIds: tarjetas Pomelo (crd-…) del usuario; pomelo-v2 rechaza si el challenge no es de una de ellas.
5
+ export class PomeloThreeDSChallengeAnswerRequest {
6
+ result: ThreeDSChallengeResult;
7
+ allowedCardIds: string[];
8
+ }
@@ -0,0 +1,10 @@
1
+ import { WalletProvider } from '../../enums/WalletProvider';
2
+ import { AppleWalletProvisioningData, GoogleWalletProvisioningData } from '../WalletProvisioningRequest';
3
+
4
+ // Body card-business → fiado-pomelo-v2-lambda (POST /tokenization/provisioning).
5
+ export class PomeloWalletProvisioningRequest {
6
+ cardId: string; // id de la tarjeta en Pomelo (crd-…)
7
+ wallet: WalletProvider;
8
+ apple?: AppleWalletProvisioningData;
9
+ google?: GoogleWalletProvisioningData;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { IsEnum } from 'class-validator';
2
+ import { ThreeDSChallengeResult } from '../enums/ThreeDSChallengeResult';
3
+
4
+ export class ThreeDSChallengeAnswerRequest {
5
+ @IsEnum(ThreeDSChallengeResult)
6
+ result: ThreeDSChallengeResult;
7
+ }
@@ -0,0 +1,43 @@
1
+ import { Type } from 'class-transformer';
2
+ import { ArrayNotEmpty, IsArray, IsDefined, IsEnum, IsNotEmpty, IsString, ValidateIf, ValidateNested } from 'class-validator';
3
+ import { WalletProvider } from '../enums/WalletProvider';
4
+
5
+ // Datos que entrega Apple (PKAddPaymentPassViewController) a la app. Se reenvían tal cual a Pomelo.
6
+ export class AppleWalletProvisioningData {
7
+ @IsArray()
8
+ @ArrayNotEmpty()
9
+ @IsString({ each: true })
10
+ certificates: string[];
11
+
12
+ @IsString()
13
+ @IsNotEmpty()
14
+ nonce: string;
15
+
16
+ @IsString()
17
+ @IsNotEmpty()
18
+ nonceSignature: string;
19
+ }
20
+
21
+ // Dato que entrega el SDK TapAndPay de Google a la app.
22
+ export class GoogleWalletProvisioningData {
23
+ @IsString()
24
+ @IsNotEmpty()
25
+ serverSessionId: string;
26
+ }
27
+
28
+ export class WalletProvisioningRequest {
29
+ @IsEnum(WalletProvider)
30
+ wallet: WalletProvider;
31
+
32
+ @ValidateIf(o => o.wallet === WalletProvider.APPLE_PAY)
33
+ @IsDefined()
34
+ @ValidateNested()
35
+ @Type(() => AppleWalletProvisioningData)
36
+ apple?: AppleWalletProvisioningData;
37
+
38
+ @ValidateIf(o => o.wallet === WalletProvider.GOOGLE_PAY)
39
+ @IsDefined()
40
+ @ValidateNested()
41
+ @Type(() => GoogleWalletProvisioningData)
42
+ google?: GoogleWalletProvisioningData;
43
+ }
@@ -0,0 +1,4 @@
1
+ export enum ThreeDSChallengeResult {
2
+ ACCEPTED = 'ACCEPTED',
3
+ REJECTED = 'REJECTED',
4
+ }
@@ -0,0 +1,4 @@
1
+ export enum WalletProvider {
2
+ APPLE_PAY = 'APPLE_PAY',
3
+ GOOGLE_PAY = 'GOOGLE_PAY',
4
+ }
package/src/card/index.ts CHANGED
@@ -80,3 +80,9 @@ export * from './enums/PinChangedStatus'
80
80
  export * from './constants/LevelOneAutoIssuanceTags';
81
81
  export * from './enums/CardAuditActorType';
82
82
  export * from './dtos/CardAuditInfo';
83
+ export * from './enums/WalletProvider';
84
+ export * from './enums/ThreeDSChallengeResult';
85
+ export * from './dtos/WalletProvisioningRequest';
86
+ export * from './dtos/ThreeDSChallengeAnswerRequest';
87
+ export * from './dtos/Internal/PomeloWalletProvisioningRequest';
88
+ export * from './dtos/Internal/PomeloThreeDSChallengeAnswerRequest';
@@ -33,6 +33,10 @@ export interface GetCatalogReconciliationResponse {
33
33
  storeId?: string;
34
34
  /** Tiendas de inventario que faltan por cerrar. */
35
35
  storesPending?: number;
36
+ /** Tiendas de inventario cerradas como ABORTED (reintentos agotados, renglón sin id, etc.). */
37
+ storesAborted?: number;
38
+ /** Tiendas cerradas porque no existen en el retailer (404 STORE_NOT_FOUND); no cuentan en storesAborted. */
39
+ storesNotFound?: number;
36
40
  /** Inicio ISO de la ventana revisada en movimientos. */
37
41
  movementsFrom?: string;
38
42
  /** Fin ISO de la ventana revisada en movimientos. */