@fiado/type-kit 3.591.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 (35) 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/directory/dtos/AccountCreatedEventDetail.d.ts +16 -0
  18. package/bin/directory/dtos/AccountCreatedEventDetail.js +14 -0
  19. package/bin/directory/dtos/DirectoryUserScopeUpdateRequest.d.ts +5 -0
  20. package/bin/directory/dtos/DirectoryUserScopeUpdateRequest.js +34 -0
  21. package/bin/directory/index.d.ts +2 -0
  22. package/bin/directory/index.js +2 -0
  23. package/bin/retailIntegration/dtos/GetReconciliationResponses.d.ts +4 -0
  24. package/package.json +1 -1
  25. package/src/card/dtos/Internal/PomeloThreeDSChallengeAnswerRequest.ts +8 -0
  26. package/src/card/dtos/Internal/PomeloWalletProvisioningRequest.ts +10 -0
  27. package/src/card/dtos/ThreeDSChallengeAnswerRequest.ts +7 -0
  28. package/src/card/dtos/WalletProvisioningRequest.ts +43 -0
  29. package/src/card/enums/ThreeDSChallengeResult.ts +4 -0
  30. package/src/card/enums/WalletProvider.ts +4 -0
  31. package/src/card/index.ts +6 -0
  32. package/src/directory/dtos/AccountCreatedEventDetail.ts +21 -0
  33. package/src/directory/dtos/DirectoryUserScopeUpdateRequest.ts +19 -0
  34. package/src/directory/index.ts +2 -0
  35. 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);
@@ -0,0 +1,16 @@
1
+ import { CountryId } from "../../country/enums/CountryId";
2
+ export declare const DIRECTORY_EVENTS_SOURCE = "fiado.directory";
3
+ export declare enum DirectoryEventDetailTypeEnum {
4
+ /** Alta real del scope de un país (fiado.mx o fiado.us) en el directorio: la cuenta de ese lado quedó abierta. */
5
+ ACCOUNT_CREATED = "AccountCreated"
6
+ }
7
+ export declare class AccountCreatedEventDetail {
8
+ /** Fijo por directorio y país (`<countryId>#<directoryId>`): un reenvío llega con el mismo id y el consumidor lo descarta. */
9
+ eventId: string;
10
+ directoryId: string;
11
+ peopleId: string;
12
+ /** CountryId.MEX (484) o CountryId.USA (840). */
13
+ countryId: CountryId;
14
+ /** ISO 8601 del momento en que se guardó el scope. */
15
+ occurredAt: string;
16
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccountCreatedEventDetail = exports.DirectoryEventDetailTypeEnum = exports.DIRECTORY_EVENTS_SOURCE = void 0;
4
+ // Origen de los eventos de EventBridge que publica directory-business.
5
+ exports.DIRECTORY_EVENTS_SOURCE = "fiado.directory";
6
+ var DirectoryEventDetailTypeEnum;
7
+ (function (DirectoryEventDetailTypeEnum) {
8
+ /** Alta real del scope de un país (fiado.mx o fiado.us) en el directorio: la cuenta de ese lado quedó abierta. */
9
+ DirectoryEventDetailTypeEnum["ACCOUNT_CREATED"] = "AccountCreated";
10
+ })(DirectoryEventDetailTypeEnum || (exports.DirectoryEventDetailTypeEnum = DirectoryEventDetailTypeEnum = {}));
11
+ // `detail` del evento AccountCreated. Sale uno por país dado de alta.
12
+ class AccountCreatedEventDetail {
13
+ }
14
+ exports.AccountCreatedEventDetail = AccountCreatedEventDetail;
@@ -0,0 +1,5 @@
1
+ export declare class DirectoryUserScopeUpdateRequest {
2
+ directoryId: string;
3
+ scope: string[];
4
+ app?: string | null;
5
+ }
@@ -0,0 +1,34 @@
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.DirectoryUserScopeUpdateRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ // Body de POST /directories/users/scope (directory-business), sucesor de updateScope de fiado-directory-lambda.
15
+ // `scope` es el arreglo COMPLETO que queda guardado, no un delta. Se valida como string y no contra el enum
16
+ // Scope porque los llamadores reenvían el arreglo que ya tenía el directorio, como en v1.
17
+ class DirectoryUserScopeUpdateRequest {
18
+ }
19
+ exports.DirectoryUserScopeUpdateRequest = DirectoryUserScopeUpdateRequest;
20
+ __decorate([
21
+ (0, class_validator_1.IsString)(),
22
+ (0, class_validator_1.IsNotEmpty)(),
23
+ __metadata("design:type", String)
24
+ ], DirectoryUserScopeUpdateRequest.prototype, "directoryId", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsArray)(),
27
+ (0, class_validator_1.IsString)({ each: true }),
28
+ __metadata("design:type", Array)
29
+ ], DirectoryUserScopeUpdateRequest.prototype, "scope", void 0);
30
+ __decorate([
31
+ (0, class_validator_1.IsOptional)(),
32
+ (0, class_validator_1.IsString)(),
33
+ __metadata("design:type", String)
34
+ ], DirectoryUserScopeUpdateRequest.prototype, "app", void 0);
@@ -8,6 +8,8 @@ export * from './dtos/CreateDirectoryUserEventResponse';
8
8
  export * from './dtos/DeleteByDirectoryResponse';
9
9
  export * from './dtos/DirectoryAgentsBySponsorRequest';
10
10
  export * from './dtos/DirectoryAgentsBySponsorResponse';
11
+ export * from './dtos/DirectoryUserScopeUpdateRequest';
12
+ export * from './dtos/AccountCreatedEventDetail';
11
13
  export * from './dtos/External';
12
14
  export * from './enums/TypeOfDirectoryId';
13
15
  export * from './enums/DirectoryBackofficeStatusEnum';
@@ -25,6 +25,8 @@ __exportStar(require("./dtos/CreateDirectoryUserEventResponse"), exports);
25
25
  __exportStar(require("./dtos/DeleteByDirectoryResponse"), exports);
26
26
  __exportStar(require("./dtos/DirectoryAgentsBySponsorRequest"), exports);
27
27
  __exportStar(require("./dtos/DirectoryAgentsBySponsorResponse"), exports);
28
+ __exportStar(require("./dtos/DirectoryUserScopeUpdateRequest"), exports);
29
+ __exportStar(require("./dtos/AccountCreatedEventDetail"), exports);
28
30
  __exportStar(require("./dtos/External"), exports);
29
31
  //enums
30
32
  __exportStar(require("./enums/TypeOfDirectoryId"), 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.591.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';
@@ -0,0 +1,21 @@
1
+ import { CountryId } from "../../country/enums/CountryId";
2
+
3
+ // Origen de los eventos de EventBridge que publica directory-business.
4
+ export const DIRECTORY_EVENTS_SOURCE = "fiado.directory";
5
+
6
+ export enum DirectoryEventDetailTypeEnum {
7
+ /** Alta real del scope de un país (fiado.mx o fiado.us) en el directorio: la cuenta de ese lado quedó abierta. */
8
+ ACCOUNT_CREATED = "AccountCreated",
9
+ }
10
+
11
+ // `detail` del evento AccountCreated. Sale uno por país dado de alta.
12
+ export class AccountCreatedEventDetail {
13
+ /** Fijo por directorio y país (`<countryId>#<directoryId>`): un reenvío llega con el mismo id y el consumidor lo descarta. */
14
+ eventId!: string;
15
+ directoryId!: string;
16
+ peopleId!: string;
17
+ /** CountryId.MEX (484) o CountryId.USA (840). */
18
+ countryId!: CountryId;
19
+ /** ISO 8601 del momento en que se guardó el scope. */
20
+ occurredAt!: string;
21
+ }
@@ -0,0 +1,19 @@
1
+ import { IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator";
2
+
3
+ // Body de POST /directories/users/scope (directory-business), sucesor de updateScope de fiado-directory-lambda.
4
+ // `scope` es el arreglo COMPLETO que queda guardado, no un delta. Se valida como string y no contra el enum
5
+ // Scope porque los llamadores reenvían el arreglo que ya tenía el directorio, como en v1.
6
+ export class DirectoryUserScopeUpdateRequest {
7
+ @IsString()
8
+ @IsNotEmpty()
9
+ directoryId!: string;
10
+
11
+ @IsArray()
12
+ @IsString({ each: true })
13
+ scope!: string[];
14
+
15
+ // App de origen tomada del token por quien llama; decide si se puede pedir el lado americano.
16
+ @IsOptional()
17
+ @IsString()
18
+ app?: string | null;
19
+ }
@@ -10,6 +10,8 @@ export * from './dtos/CreateDirectoryUserEventResponse';
10
10
  export * from './dtos/DeleteByDirectoryResponse';
11
11
  export * from './dtos/DirectoryAgentsBySponsorRequest';
12
12
  export * from './dtos/DirectoryAgentsBySponsorResponse';
13
+ export * from './dtos/DirectoryUserScopeUpdateRequest';
14
+ export * from './dtos/AccountCreatedEventDetail';
13
15
 
14
16
  export * from './dtos/External';
15
17
 
@@ -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. */