@fiado/api-invoker 4.3.0 → 4.5.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/.claude/settings.json +33 -33
- package/README.md +600 -600
- package/bin/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.d.ts +5 -5
- package/bin/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.js +8 -8
- package/bin/cognitoBackofficeConnector/api/interfaces/ICognitoBackofficeConnectorApi.d.ts +19 -9
- package/bin/multicommServicePayment/api/MulticommServicePaymentApi.d.ts +1 -0
- package/bin/multicommServicePayment/api/MulticommServicePaymentApi.js +4 -0
- package/bin/multicommServicePayment/api/interfaces/IMulticommServicePaymentApi.d.ts +1 -0
- package/bin/stpServicePayment/api/StpServicePaymentApi.d.ts +1 -0
- package/bin/stpServicePayment/api/StpServicePaymentApi.js +4 -0
- package/bin/stpServicePayment/api/interfaces/IStpServicePaymentApi.d.ts +1 -0
- package/package.json +36 -36
- package/src/account-beneficiary/AccountBeneficiaryApi.ts +18 -18
- package/src/account-beneficiary/index.ts +2 -2
- package/src/account-beneficiary/interfaces/IAccountBeneficiaryApi.ts +7 -7
- package/src/account-fiadoinc/AccountFiadoIncApi.ts +126 -126
- package/src/account-fiadoinc/index.ts +4 -4
- package/src/account-fiadoinc/interfaces/IAccountFiadoIncApi.ts +50 -50
- package/src/account-fiadoinc/queue/Publisher.ts +23 -23
- package/src/account-fiadoinc/queue/interfaces/IPublisher.ts +4 -4
- package/src/account-fiadosa/AccountFiadoSAApi.ts +38 -38
- package/src/account-fiadosa/index.ts +1 -1
- package/src/account-fiadosa/interfaces/IAccountFiadoSAApi.ts +16 -16
- package/src/account-pagoconfiado/AccountPagoConfiadoApi.ts +78 -78
- package/src/account-pagoconfiado/index.ts +2 -2
- package/src/account-pagoconfiado/interfaces/IAccountPagoConfiadoApi.ts +37 -37
- package/src/activity-business/ActivityApi.ts +36 -36
- package/src/activity-business/index.ts +5 -5
- package/src/activity-business/interfaces/IActivityApi.ts +13 -13
- package/src/activity-business/queue/ActivityPublisher.ts +30 -30
- package/src/activity-business/queue/IActivityPublisher.ts +4 -4
- package/src/address/AddressApi.ts +46 -46
- package/src/address/index.ts +3 -3
- package/src/address/interfaces/IAddressApi.ts +30 -30
- package/src/ai-engine-connector/AiEngineApi.ts +28 -28
- package/src/ai-engine-connector/index.ts +2 -2
- package/src/ai-engine-connector/interfaces/IAiEngineApi.ts +6 -6
- package/src/appselectondata/AppSelectionDataApi.ts +32 -32
- package/src/appselectondata/index.ts +2 -2
- package/src/appselectondata/interfaces/IAppSelectionDataApi.ts +17 -17
- package/src/authentication/AuthenticationApi.ts +29 -29
- package/src/authentication/index.ts +4 -4
- package/src/authentication/interfaces/IAuthenticationApi.ts +8 -8
- package/src/bankAccount/BankAccountApi.ts +34 -34
- package/src/bankAccount/index.ts +1 -1
- package/src/bankAccount/interfaces/IBankAccountApi.ts +6 -6
- package/src/bbvaRst/api/BBVARstApi.ts +16 -16
- package/src/bbvaRst/api/interfaces/IBBVARstApi.ts +4 -4
- package/src/bbvaRst/index.ts +1 -1
- package/src/benefits-marketplace/api/BenefitsMarketplaceApi.ts +35 -35
- package/src/benefits-marketplace/api/dtos/BenefitLeafDisplayResponse.ts +21 -21
- package/src/benefits-marketplace/api/interfaces/IBenefitsMarketplaceApi.ts +62 -62
- package/src/benefits-marketplace/index.ts +3 -3
- package/src/blacklist/BlackListApi.ts +19 -19
- package/src/blacklist/index.ts +2 -2
- package/src/blacklist/interfaces/IBlackListApi.ts +20 -20
- package/src/card/CardApi.ts +103 -103
- package/src/card/index.ts +3 -3
- package/src/card/interfaces/ICardApi.ts +32 -32
- package/src/card-business/index.ts +2 -2
- package/src/card-business/queue/CardBusinessPublisher.ts +23 -23
- package/src/card-business/queue/ICardBusinessPublisher.ts +10 -10
- package/src/centralPayments/CentralPaymentsConnectorApi.ts +317 -317
- package/src/centralPayments/index.ts +1 -1
- package/src/centralPayments/interfaces/ICentralPaymentsConnectorApi.ts +153 -153
- package/src/circuloCredito/api/CirculoCreditoApi.ts +21 -21
- package/src/circuloCredito/api/interfaces/ICirculoCreditoApi.ts +7 -7
- package/src/circuloCredito/index.ts +2 -2
- package/src/cnbv-business/CnbvApi.ts +31 -31
- package/src/cnbv-business/index.ts +4 -4
- package/src/cnbv-business/interfaces/ICnbvApi.ts +19 -19
- package/src/cnbv-connector/CnbvConnectorApi.ts +18 -18
- package/src/cnbv-connector/index.ts +1 -1
- package/src/cnbv-connector/interfaces/ICnbvConnectorApi.ts +6 -6
- package/src/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.ts +254 -251
- package/src/cognitoBackofficeConnector/api/interfaces/ICognitoBackofficeConnectorApi.ts +181 -170
- package/src/cognitoBackofficeConnector/index.ts +2 -2
- package/src/cognitoConnector/CognitoConnectorApi.ts +110 -110
- package/src/cognitoConnector/CognitoConnectorV2.ts +87 -87
- package/src/cognitoConnector/index.ts +11 -11
- package/src/cognitoConnector/interfaces/ICognitoConnectorApi.ts +16 -16
- package/src/cognitoConnector/interfaces/ICognitoV2Api.ts +63 -63
- package/src/collector/CollectorApi.ts +97 -97
- package/src/collector/index.ts +2 -2
- package/src/collector/interfaces/ICollectorApi.ts +47 -47
- package/src/commission-business/CommissionBusinessApi.ts +19 -19
- package/src/commission-business/index.ts +3 -3
- package/src/commission-business/interfaces/ICommissionBusinessApi.ts +15 -15
- package/src/contactInformation/ContactInformationApi.ts +20 -20
- package/src/contactInformation/index.ts +2 -2
- package/src/contactInformation/interface/IContactInformationApi.ts +8 -8
- package/src/container.config.ts +276 -276
- package/src/contract-business/api/ContractBusinessApi.ts +37 -37
- package/src/contract-business/api/interfaces/IContractBusinessApi.ts +32 -32
- package/src/contract-business/index.ts +2 -2
- package/src/contract-generator/ContractGeneratorApi.ts +18 -18
- package/src/contract-generator/index.ts +2 -2
- package/src/contract-generator/interfaces/IContractGeneratorApi.ts +16 -16
- package/src/countries-business/CountriesBusinessApi.ts +26 -26
- package/src/countries-business/index.ts +2 -2
- package/src/countries-business/interfaces/ICountriesBusinessApi.ts +22 -22
- package/src/credit-engine/CreditEngineApi.ts +54 -54
- package/src/credit-engine/index.ts +17 -17
- package/src/credit-engine/interfaces/ICreditEngineApi.ts +46 -46
- package/src/credit-engine/queue/CreditCollectionPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditDelinquencyPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditIncomeDetectionPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditLienCollectionPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditNotificationPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditOfferGenerationPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditReconciliationPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditScoringPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditStatementPublisher.ts +24 -24
- package/src/credit-engine/queue/CreditTransferPublisher.ts +24 -24
- package/src/credit-engine/queue/interfaces/ICreditCollectionPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditDelinquencyPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditIncomeDetectionPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditLienCollectionPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditNotificationPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditOfferGenerationPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditReconciliationPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditScoringPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditStatementPublisher.ts +5 -5
- package/src/credit-engine/queue/interfaces/ICreditTransferPublisher.ts +5 -5
- package/src/credit-payment/CreditPaymentApi.ts +73 -73
- package/src/credit-payment/index.ts +2 -2
- package/src/credit-payment/interfaces/ICreditPaymentApi.ts +52 -52
- package/src/credit-statements/api/CreditStatementsApi.ts +25 -25
- package/src/credit-statements/api/interfaces/ICreditStatementsApi.ts +30 -30
- package/src/credit-statements/index.ts +2 -2
- package/src/device/DeviceApi.ts +32 -32
- package/src/device/index.ts +2 -2
- package/src/device/interfaces/IDeviceApi.ts +41 -41
- package/src/directories/DirectoriesApi.ts +63 -63
- package/src/directories/index.ts +3 -3
- package/src/directories/interfaces/IDirectoriesApi.ts +17 -17
- package/src/directory/DirectoryApi.ts +196 -196
- package/src/directory/index.ts +3 -3
- package/src/directory/interfaces/IDirectoryApi.ts +73 -73
- package/src/directorySetting/DirectorySettingApi.ts +42 -42
- package/src/directorySetting/index.ts +3 -3
- package/src/directorySetting/interfaces/IDirectorySettingApi.ts +56 -56
- package/src/disputes/DisputesApi.ts +50 -50
- package/src/disputes/index.ts +2 -2
- package/src/disputes/interfaces/IDisputesApi.ts +54 -54
- package/src/document-generator/DocumentGeneratorApi.ts +51 -51
- package/src/document-generator/index.ts +2 -2
- package/src/document-generator/interfaces/IDocumentGeneratorApi.ts +34 -34
- package/src/document-image-processor/DocumentImageProcessorApi.ts +22 -22
- package/src/document-image-processor/index.ts +1 -1
- package/src/document-image-processor/interfaces/IDocumentImageProcessorApi.ts +7 -7
- package/src/estafeta/api/EstafetaApi.ts +67 -67
- package/src/estafeta/api/interfaces/IEstafetaApi.ts +28 -28
- package/src/estafeta/index.ts +1 -1
- package/src/event-history-business/EventHistoryApi.ts +108 -108
- package/src/event-history-business/index.ts +3 -3
- package/src/event-history-business/interfaces/IEventHistoryApi.ts +47 -47
- package/src/exchangeRates/ExchangeRatesApi.ts +27 -27
- package/src/exchangeRates/index.ts +1 -1
- package/src/exchangeRates/interfaces/IExchangeRatesApi.ts +8 -8
- package/src/fiadoMessages/api/FiadoMessagesApi.ts +20 -20
- package/src/fiadoMessages/api/interfaces/IFiadoMessagesApi.ts +2 -2
- package/src/fiadoMessages/index.ts +1 -1
- package/src/firebase-connector/FirebaseConnectorApi.ts +53 -53
- package/src/firebase-connector/index.ts +3 -3
- package/src/firebase-connector/interfaces/IFirebaseConnectorApi.ts +6 -6
- package/src/fraudPreventionEngine/api/FraudPreventionEngineApi.ts +22 -22
- package/src/fraudPreventionEngine/api/interfaces/IFraudPreventionEngineApi.ts +7 -7
- package/src/fraudPreventionEngine/index.ts +1 -1
- package/src/group/GroupApi.ts +69 -69
- package/src/group/index.ts +1 -1
- package/src/group/interfaces/IGroupApi.ts +40 -40
- package/src/identity/IdentityApi.ts +95 -95
- package/src/identity/index.ts +3 -3
- package/src/identity/interfaces/IIdentityApi.ts +46 -46
- package/src/index.ts +76 -76
- package/src/legalDocument/api/LegalDocumentApi.ts +38 -38
- package/src/legalDocument/api/interfaces/ILegalDocumentApi.ts +7 -7
- package/src/legalDocument/index.ts +3 -3
- package/src/milestone-business/api/MilestoneBusinessApi.ts +26 -26
- package/src/milestone-business/api/interfaces/IMilestoneBusinessApi.ts +9 -9
- package/src/milestone-business/index.ts +2 -2
- package/src/multicommServicePayment/api/MulticommServicePaymentApi.ts +94 -89
- package/src/multicommServicePayment/api/interfaces/IMulticommServicePaymentApi.ts +44 -40
- package/src/multicommServicePayment/index.ts +1 -1
- package/src/notificationMessages/index.ts +1 -1
- package/src/notificationMessages/queue/NotificationMessagePublisher.ts +42 -42
- package/src/notificationMessages/queue/interfaces/INotificationMessagesPublisher.ts +7 -7
- package/src/notificationWebsockets/index.ts +1 -1
- package/src/notificationWebsockets/queue/NotificationWSMessagePublisher.ts +29 -29
- package/src/notificationWebsockets/queue/interfaces/INotificationWSMessagesPublisher.ts +4 -4
- package/src/observations/ObservationsApi.ts +23 -23
- package/src/observations/index.ts +3 -3
- package/src/observations/interfaces/IObservationsApi.ts +9 -9
- package/src/onboarding/api/OnboardingApi.ts +23 -23
- package/src/onboarding/api/interfaces/IOnboardingApi.ts +3 -3
- package/src/onboarding/index.ts +1 -1
- package/src/onboarding-business/api/OnboardingBusinessApi.ts +210 -210
- package/src/onboarding-business/api/interfaces/IOnboardingBusinessApi.ts +9 -9
- package/src/onboarding-business/index.ts +1 -1
- package/src/order-collector-business/OrderCollectorApi.ts +20 -20
- package/src/order-collector-business/index.ts +3 -3
- package/src/order-collector-business/interfaces/IOrderCollectorApi.ts +9 -9
- package/src/p2pContact/api/P2pContactApi.ts +19 -19
- package/src/p2pContact/api/interfaces/IP2pContactApi.ts +4 -4
- package/src/p2pContact/index.ts +1 -1
- package/src/payroll-business/PayrollApi.ts +19 -19
- package/src/payroll-business/index.ts +1 -1
- package/src/payroll-business/interfaces/IPayrollApi.ts +18 -18
- package/src/people-business/api/PeopleBusinessApi.ts +32 -32
- package/src/people-business/api/interfaces/IPeopleBusinessApi.ts +7 -7
- package/src/people-business/index.ts +1 -1
- package/src/platform-error-events/index.ts +2 -2
- package/src/platform-error-events/queue/PlatformErrorEventsPublisher.ts +24 -24
- package/src/platform-error-events/queue/interfaces/IPlatformErrorEventsPublisher.ts +5 -5
- package/src/pomelo/api/PomeloApi.ts +109 -109
- package/src/pomelo/api/interfaces/IPomeloApi.ts +29 -29
- package/src/pomelo/index.ts +1 -1
- package/src/pomeloProcessor/api/PomeloProcessorApi.ts +17 -17
- package/src/pomeloProcessor/api/interfaces/IPomeloProcessorApi.ts +2 -2
- package/src/pomeloProcessor/index.ts +2 -2
- package/src/pricelist-business/PriceListApi.ts +45 -45
- package/src/pricelist-business/index.ts +1 -1
- package/src/pricelist-business/interfaces/IPriceListApi.ts +16 -16
- package/src/product-catalog/ProductCatalogApi.ts +17 -17
- package/src/product-catalog/index.ts +1 -1
- package/src/product-catalog/interfaces/IProductCatalogApi.ts +6 -6
- package/src/product-payment/api/ProductPaymentApi.ts +25 -25
- package/src/product-payment/api/interfaces/IProductPaymentApi.ts +8 -8
- package/src/product-payment/index.ts +1 -1
- package/src/referral-business/ReferralBusinessApi.ts +37 -37
- package/src/referral-business/index.ts +1 -1
- package/src/referral-business/interfaces/IReferralBusinessApi.ts +38 -38
- package/src/report-processor-business/api/IReportProcessorBusinessApi.ts +4 -4
- package/src/report-processor-business/api/ReportProcessorBusinessApi.ts +17 -17
- package/src/report-processor-business/index.ts +5 -5
- package/src/riskProfile/api/RiskProfileApi.ts +63 -63
- package/src/riskProfile/api/TransactionAlertApi.ts +49 -49
- package/src/riskProfile/api/interfaces/IRiskProfileApi.ts +51 -51
- package/src/riskProfile/api/interfaces/ITransactionAlertApi.ts +70 -70
- package/src/riskProfile/index.ts +7 -7
- package/src/riskProfile/queue/TransactionAlarmPublisher.ts +25 -25
- package/src/riskProfile/queue/interfaces/ITransactionAlarmPublisher.ts +4 -4
- package/src/service-business/ServiceApi.ts +78 -78
- package/src/service-business/index.ts +2 -2
- package/src/service-business/interfaces/IServiceApi.ts +73 -73
- package/src/sessionActivity/index.ts +2 -2
- package/src/sessionActivity/queue/SessionActivityPublisher.ts +23 -23
- package/src/sessionActivity/queue/interfaces/ISessionActivityPublisher.ts +4 -4
- package/src/stp-business/api/STPBusinessApi.ts +32 -32
- package/src/stp-business/api/interfaces/ISTPBusinessApi.ts +15 -15
- package/src/stp-business/index.ts +1 -1
- package/src/stpAccount/api/STPAccountApi.ts +111 -111
- package/src/stpAccount/api/interfaces/ISTPAccountApi.ts +7 -7
- package/src/stpAccount/index.ts +1 -1
- package/src/stpServicePayment/api/StpServicePaymentApi.ts +94 -89
- package/src/stpServicePayment/api/interfaces/IStpServicePaymentApi.ts +44 -40
- package/src/stpServicePayment/index.ts +1 -1
- package/src/stpSpei/api/StpSpeiApi.ts +32 -32
- package/src/stpSpei/api/interfaces/IStpSpeiApi.ts +6 -6
- package/src/stpSpei/index.ts +1 -1
- package/src/teams-connector/index.ts +2 -2
- package/src/teams-connector/queue/TeamsNotificationPublisher.ts +24 -24
- package/src/teams-connector/queue/interfaces/ITeamsNotificationPublisher.ts +5 -5
- package/src/tern/api/TernApi.ts +147 -147
- package/src/tern/api/interfaces/ITernApi.ts +54 -54
- package/src/tern/index.ts +1 -1
- package/src/transaction/api/TransactionApi.ts +157 -157
- package/src/transaction/api/interfaces/ITransactionApi.ts +82 -82
- package/src/transaction/index.ts +5 -5
- package/src/transaction/queue/TransactionPublisher.ts +25 -25
- package/src/transaction/queue/interfaces/ITransactionPublisher.ts +4 -4
- package/src/transactionProcessor/api/TransactionProcessorApi.ts +57 -57
- package/src/transactionProcessor/api/interfaces/ITransactionProcessorApi.ts +28 -28
- package/src/transactionProcessor/index.ts +1 -1
- package/src/uniteller-connector/api/UnitellerConnectorApi.ts +113 -113
- package/src/uniteller-connector/api/interfaces/IUnitellerConnectorApi.ts +85 -85
- package/src/uniteller-connector/index.ts +2 -2
- package/src/utils/InvokerUtils.ts +18 -18
- package/src/zendesk/ZendeskApi.ts +24 -24
- package/src/zendesk/index.ts +3 -3
- package/src/zendesk/interfaces/IZendeskApi.ts +10 -10
- package/bin/messages-connector/api/MessagesConnectorApi.d.ts +0 -17
- package/bin/messages-connector/api/MessagesConnectorApi.js +0 -50
- package/bin/messages-connector/api/interfaces/IMessagesConnectorApi.d.ts +0 -12
- package/bin/messages-connector/api/interfaces/IMessagesConnectorApi.js +0 -1
- package/bin/messages-connector/index.d.ts +0 -4
- package/bin/messages-connector/index.js +0 -4
- package/bin/messages-connector/queue/MessagesConnectorPublisher.d.ts +0 -7
- package/bin/messages-connector/queue/MessagesConnectorPublisher.js +0 -23
- package/bin/messages-connector/queue/interfaces/IMessagesConnectorPublisher.d.ts +0 -4
- package/bin/messages-connector/queue/interfaces/IMessagesConnectorPublisher.js +0 -1
- package/bin/sns-ses-connector/api/SnsSesConnectorApi.d.ts +0 -10
- package/bin/sns-ses-connector/api/SnsSesConnectorApi.js +0 -30
- package/bin/sns-ses-connector/api/interfaces/ISnsSesConnectorApi.d.ts +0 -5
- package/bin/sns-ses-connector/api/interfaces/ISnsSesConnectorApi.js +0 -1
- package/bin/sns-ses-connector/index.d.ts +0 -2
- package/bin/sns-ses-connector/index.js +0 -2
package/README.md
CHANGED
|
@@ -1,600 +1,600 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# 🔗 Fiado API Invoker
|
|
4
|
-
|
|
5
|
-
### Librería de Comunicación Inter-Servicios para Microservicios Lambda
|
|
6
|
-
|
|
7
|
-
[](https://www.npmjs.com/)
|
|
8
|
-
[](https://www.typescriptlang.org/)
|
|
9
|
-
[](https://aws.amazon.com/lambda/)
|
|
10
|
-
[](https://inversify.io/)
|
|
11
|
-
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Tabla de Contenidos
|
|
17
|
-
|
|
18
|
-
- [Descripción General](#descripción-general)
|
|
19
|
-
- [Arquitectura](#arquitectura)
|
|
20
|
-
- [Instalación](#instalación)
|
|
21
|
-
- [Configuración](#configuración)
|
|
22
|
-
- [APIs Disponibles](#apis-disponibles)
|
|
23
|
-
- [Publishers (Colas SQS)](#publishers-colas-sqs)
|
|
24
|
-
- [Uso en Proyectos](#uso-en-proyectos)
|
|
25
|
-
- [Variables de Entorno](#variables-de-entorno)
|
|
26
|
-
- [Estructura del Proyecto](#estructura-del-proyecto)
|
|
27
|
-
- [Convenciones de Desarrollo](#convenciones-de-desarrollo)
|
|
28
|
-
- [Dependencias](#dependencias)
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Descripción General
|
|
33
|
-
|
|
34
|
-
`@fiado/api-invoker` es una librería empresarial que actúa como **puente de comunicación entre microservicios Lambda** dentro del ecosistema Fiado. Proporciona:
|
|
35
|
-
|
|
36
|
-
- **Clientes HTTP tipados** para invocar APIs privadas de otros Lambdas
|
|
37
|
-
- **Publishers SQS** para comunicación asíncrona mediante colas
|
|
38
|
-
- **Inyección de dependencias** integrada con InversifyJS
|
|
39
|
-
- **Abstracción de complejidad** de configuración y manejo de errores
|
|
40
|
-
|
|
41
|
-
### Propósito
|
|
42
|
-
|
|
43
|
-
En una arquitectura de microservicios, cada Lambda expone una API privada accesible únicamente desde la VPC. Esta librería encapsula:
|
|
44
|
-
|
|
45
|
-
1. La construcción de URLs base desde variables de entorno
|
|
46
|
-
2. El manejo de headers y operaciones HTTP
|
|
47
|
-
3. La serialización/deserialización de payloads
|
|
48
|
-
4. La publicación de mensajes a colas SQS
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Arquitectura
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
┌─────────────────────────────────────────────────────────────────────────┐
|
|
56
|
-
│ LAMBDA CONSUMIDOR │
|
|
57
|
-
│ │
|
|
58
|
-
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
|
|
59
|
-
│ │ Manager/ │───▶│ @fiado/ │───▶│ @fiado/ │ │
|
|
60
|
-
│ │ Service │ │ api-invoker │ │ http-client │ │
|
|
61
|
-
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
|
|
62
|
-
│ │ │ │
|
|
63
|
-
└───────────────────────────────────┼────────────────────────┼────────────┘
|
|
64
|
-
│ │
|
|
65
|
-
┌───────────────┴───────────────┐ │
|
|
66
|
-
▼ ▼ ▼
|
|
67
|
-
┌──────────────┐ ┌──────────────────┐
|
|
68
|
-
│ AWS SQS │ │ API Gateway │
|
|
69
|
-
│ (Queues) │ │ (Private VPC) │
|
|
70
|
-
└──────────────┘ └──────────────────┘
|
|
71
|
-
│ │
|
|
72
|
-
▼ ▼
|
|
73
|
-
┌──────────────┐ ┌──────────────────┐
|
|
74
|
-
│ Lambda │ │ Lambda │
|
|
75
|
-
│ Subscriber │ │ Target │
|
|
76
|
-
└──────────────┘ └──────────────────┘
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Patrones de Comunicación
|
|
80
|
-
|
|
81
|
-
| Patrón | Implementación | Uso |
|
|
82
|
-
|--------|----------------|-----|
|
|
83
|
-
| **Síncrono** | HTTP via API Gateway privado | Consultas, operaciones CRUD |
|
|
84
|
-
| **Asíncrono** | SQS Publishers | Eventos, notificaciones, procesos batch |
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Instalación
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
npm install @fiado/api-invoker @fiado/http-client
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Peer Dependencies
|
|
95
|
-
|
|
96
|
-
La librería requiere las siguientes dependencias en el proyecto consumidor:
|
|
97
|
-
|
|
98
|
-
```json
|
|
99
|
-
{
|
|
100
|
-
"@fiado/http-client": "^1.0.7",
|
|
101
|
-
"@fiado/logger": "^1.0.3",
|
|
102
|
-
"@fiado/type-kit": "^2.1.28",
|
|
103
|
-
"inversify": "^6.2.2",
|
|
104
|
-
"reflect-metadata": "^0.2.2"
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## Configuración
|
|
111
|
-
|
|
112
|
-
### Registro en el Contenedor IoC
|
|
113
|
-
|
|
114
|
-
La librería exporta un `ContainerModule` de InversifyJS que registra automáticamente todos los clientes API y publishers:
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
import { Container } from "inversify";
|
|
118
|
-
import { IHttpRequest, AxiosHttpRequest } from "@fiado/http-client";
|
|
119
|
-
import { apiInvokerBindings } from "@fiado/api-invoker";
|
|
120
|
-
|
|
121
|
-
const container = new Container();
|
|
122
|
-
|
|
123
|
-
// 1. Cargar bindings de api-invoker (registra todos los clientes)
|
|
124
|
-
container.load(apiInvokerBindings);
|
|
125
|
-
|
|
126
|
-
// 2. Registrar el cliente HTTP (requerido por los clientes API)
|
|
127
|
-
container.bind<IHttpRequest>("IHttpRequest").to(AxiosHttpRequest);
|
|
128
|
-
|
|
129
|
-
export { container };
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Importación de Interfaces
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
// Importar interfaces específicas
|
|
136
|
-
import {
|
|
137
|
-
IDirectoryApi,
|
|
138
|
-
IIdentityApi,
|
|
139
|
-
ITransactionApi,
|
|
140
|
-
INotificationMessagesPublisher
|
|
141
|
-
} from "@fiado/api-invoker";
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## APIs Disponibles
|
|
147
|
-
|
|
148
|
-
La librería proporciona clientes para **60+ microservicios** del ecosistema Fiado:
|
|
149
|
-
|
|
150
|
-
### Servicios Core
|
|
151
|
-
|
|
152
|
-
| Interface | Descripción | Variable de Entorno |
|
|
153
|
-
|-----------|-------------|---------------------|
|
|
154
|
-
| `IDirectoryApi` | Gestión de directorios de usuarios | `DIRECTORY_LAMBDA_URL` |
|
|
155
|
-
| `IIdentityApi` | Verificación de identidad | `IDENTITY_LAMBDA_URL` |
|
|
156
|
-
| `IAuthenticationApi` | Autenticación y tokens | `AUTHENTICATION_LAMBDA_URL` |
|
|
157
|
-
| `ITransactionApi` | Procesamiento de transacciones | `TRANSACTION_LAMBDA_URL` |
|
|
158
|
-
|
|
159
|
-
### Servicios de Cuenta
|
|
160
|
-
|
|
161
|
-
| Interface | Descripción | Variable de Entorno |
|
|
162
|
-
|-----------|-------------|---------------------|
|
|
163
|
-
| `IAccountFiadoIncApi` | Cuentas Fiado Inc | `ACCOUNT_FIADOINC_LAMBDA_URL` |
|
|
164
|
-
| `IAccountFiadoSAApi` | Cuentas Fiado SA | `ACCOUNT_FIADOSA_LAMBDA_URL` |
|
|
165
|
-
| `IAccountPagoConfiadoApi` | Cuentas PagoConfiado | `ACCOUNT_PAGOCONFIADO_LAMBDA_URL` |
|
|
166
|
-
| `IAccountBeneficiaryApi` | Beneficiarios de cuentas | `ACCOUNT_BENEFICIARY_LAMBDA_URL` |
|
|
167
|
-
| `IBankAccountApi` | Cuentas bancarias | `BANK_ACCOUNT_LAMBDA_URL` |
|
|
168
|
-
|
|
169
|
-
### Servicios de Pago
|
|
170
|
-
|
|
171
|
-
| Interface | Descripción | Variable de Entorno |
|
|
172
|
-
|-----------|-------------|---------------------|
|
|
173
|
-
| `IStpSpeiApi` | Transferencias SPEI | `STP_SPEI_LAMBDA_URL` |
|
|
174
|
-
| `IStpServicePaymentApi` | Pagos de servicios STP | `STP_SERVICE_PAYMENT_LAMBDA_URL` |
|
|
175
|
-
| `ICentralPaymentsConnectorApi` | Conector de pagos central | `CENTRAL_PAYMENTS_LAMBDA_URL` |
|
|
176
|
-
| `ICollectorApi` | Cobranza | `COLLECTOR_LAMBDA_URL` |
|
|
177
|
-
|
|
178
|
-
### Servicios de Tarjeta
|
|
179
|
-
|
|
180
|
-
| Interface | Descripción | Variable de Entorno |
|
|
181
|
-
|-----------|-------------|---------------------|
|
|
182
|
-
| `ICardApi` | Gestión de tarjetas | `CARD_LAMBDA_URL` |
|
|
183
|
-
| `IPomeloApi` | Integración Pomelo | `POMELO_LAMBDA_URL` |
|
|
184
|
-
| `IPomeloProcessorApi` | Procesador Pomelo | `POMELO_PROCESSOR_LAMBDA_URL` |
|
|
185
|
-
|
|
186
|
-
### Servicios de Riesgo y Fraude
|
|
187
|
-
|
|
188
|
-
| Interface | Descripción | Variable de Entorno |
|
|
189
|
-
|-----------|-------------|---------------------|
|
|
190
|
-
| `IRiskProfileApi` | Perfiles de riesgo | `RISK_PROFILE_LAMBDA_URL` |
|
|
191
|
-
| `IFraudPreventionEngineApi` | Motor antifraude | `FRAUD_PREVENTION_LAMBDA_URL` |
|
|
192
|
-
| `IBlackListApi` | Listas negras | `BLACKLIST_LAMBDA_URL` |
|
|
193
|
-
| `ITransactionAlertApi` | Alertas de transacciones | `RISK_PROFILE_LAMBDA_URL` |
|
|
194
|
-
|
|
195
|
-
### Servicios de Onboarding
|
|
196
|
-
|
|
197
|
-
| Interface | Descripción | Variable de Entorno |
|
|
198
|
-
|-----------|-------------|---------------------|
|
|
199
|
-
| `IOnboardingApi` | Onboarding de usuarios | `ONBOARDING_LAMBDA_URL` |
|
|
200
|
-
| `IOnboardingBusinessApi` | Onboarding de negocios | `ONBOARDING_BUSINESS_LAMBDA_URL` |
|
|
201
|
-
| `ICnbvApi` | Integración CNBV | `CNBV_BUSINESS_LAMBDA_URL` |
|
|
202
|
-
|
|
203
|
-
### Servicios de Comunicación
|
|
204
|
-
|
|
205
|
-
| Interface | Descripción | Variable de Entorno |
|
|
206
|
-
|-----------|-------------|---------------------|
|
|
207
|
-
| `IFiadoMessagesApi` | Mensajería interna | `FIADO_MESSAGES_LAMBDA_URL` |
|
|
208
|
-
| `IFirebaseConnectorApi` | Push notifications | `FIREBASE_CONNECTOR_LAMBDA_URL` |
|
|
209
|
-
| `IZendeskApi` | Integración Zendesk | `ZENDESK_LAMBDA_URL` |
|
|
210
|
-
|
|
211
|
-
### Servicios de Negocio
|
|
212
|
-
|
|
213
|
-
| Interface | Descripción | Variable de Entorno |
|
|
214
|
-
|-----------|-------------|---------------------|
|
|
215
|
-
| `IActivityApi` | Actividades de negocio | `ACTIVITY_BUSINESS_LAMBDA_URL` |
|
|
216
|
-
| `IServiceApi` | Servicios de negocio | `SERVICE_BUSINESS_LAMBDA_URL` |
|
|
217
|
-
| `IPriceListApi` | Listas de precios | `PRICELIST_BUSINESS_LAMBDA_URL` |
|
|
218
|
-
| `IPayrollApi` | Nómina | `PAYROLL_BUSINESS_LAMBDA_URL` |
|
|
219
|
-
| `IOrderCollectorApi` | Órdenes de cobranza | `ORDER_COLLECTOR_LAMBDA_URL` |
|
|
220
|
-
|
|
221
|
-
### Servicios Auxiliares
|
|
222
|
-
|
|
223
|
-
| Interface | Descripción | Variable de Entorno |
|
|
224
|
-
|-----------|-------------|---------------------|
|
|
225
|
-
| `IAddressApi` | Direcciones | `ADDRESS_LAMBDA_URL` |
|
|
226
|
-
| `IContactInformationApi` | Información de contacto | `CONTACT_INFORMATION_LAMBDA_URL` |
|
|
227
|
-
| `IDeviceApi` | Dispositivos | `DEVICE_LAMBDA_URL` |
|
|
228
|
-
| `IGroupApi` | Grupos | `GROUP_LAMBDA_URL` |
|
|
229
|
-
| `IP2pContactApi` | Contactos P2P | `P2P_CONTACT_LAMBDA_URL` |
|
|
230
|
-
| `IExchangeRatesApi` | Tipos de cambio | `EXCHANGE_RATES_LAMBDA_URL` |
|
|
231
|
-
| `IProductCatalogApi` | Catálogo de productos | `PRODUCT_CATALOG_LAMBDA_URL` |
|
|
232
|
-
| `IContractGeneratorApi` | Generador de contratos | `CONTRACT_GENERATOR_LAMBDA_URL` |
|
|
233
|
-
| `IDocumentImageProcessorApi` | Procesador de imágenes | `DOCUMENT_IMAGE_PROCESSOR_LAMBDA_URL` |
|
|
234
|
-
| `ILegalDocumentApi` | Documentos legales | `LEGAL_DOCUMENT_LAMBDA_URL` |
|
|
235
|
-
| `IObservationsApi` | Observaciones | `OBSERVATIONS_LAMBDA_URL` |
|
|
236
|
-
| `IDirectoriesApi` | Directorios múltiples | `DIRECTORIES_LAMBDA_URL` |
|
|
237
|
-
| `IDirectorySettingApi` | Configuración de directorio | `DIRECTORY_SETTING_LAMBDA_URL` |
|
|
238
|
-
| `IAppSelectionDataApi` | Datos de selección de app | `APP_SELECTION_DATA_LAMBDA_URL` |
|
|
239
|
-
| `IReferralBusinessApi` | Referidos | `REFERRAL_BUSINESS_LAMBDA_URL` |
|
|
240
|
-
| `IEventHistoryApi` | Historial de eventos | `EVENT_HISTORY_LAMBDA_URL` |
|
|
241
|
-
| `IReportProcessorBusinessApi` | Procesador de reportes | `REPORT_PROCESSOR_LAMBDA_URL` |
|
|
242
|
-
| `IPeopleBusinessApi` | Gestión de personas | `PEOPLE_BUSINESS_LAMBDA_URL` |
|
|
243
|
-
|
|
244
|
-
### Integraciones Externas
|
|
245
|
-
|
|
246
|
-
| Interface | Descripción | Variable de Entorno |
|
|
247
|
-
|-----------|-------------|---------------------|
|
|
248
|
-
| `ITernApi` | Integración Tern | `TERN_LAMBDA_URL` |
|
|
249
|
-
| `IBBVARstApi` | Integración BBVA RST | `BBVA_RST_LAMBDA_URL` |
|
|
250
|
-
| `IEstafetaApi` | Integración Estafeta | `ESTAFETA_LAMBDA_URL` |
|
|
251
|
-
| `ICognitoConnectorApi` | Conector Cognito | `COGNITO_CONNECTOR_LAMBDA_URL` |
|
|
252
|
-
| `ICognitoV2Api` | Cognito V2 | `COGNITO_CONNECTOR_LAMBDA_URL` |
|
|
253
|
-
| `ISTPAccountApi` | Cuentas STP | `STP_ACCOUNT_LAMBDA_URL` |
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
## Publishers (Colas SQS)
|
|
258
|
-
|
|
259
|
-
Para comunicación asíncrona, la librería provee publishers que envían mensajes a colas SQS:
|
|
260
|
-
|
|
261
|
-
| Interface | Descripción | Variable de Entorno (Queue) |
|
|
262
|
-
|-----------|-------------|----------------------------|
|
|
263
|
-
| `INotificationMessagesPublisher` | Notificaciones push/email/sms | `NOTIFICATION_MESSAGES_QUEUE` |
|
|
264
|
-
| `INotificationWSMessagesPublisher` | Notificaciones WebSocket | `NOTIFICATION_WS_QUEUE` |
|
|
265
|
-
| `ISessionActivityPublisher` | Actividad de sesión | `SESSION_ACTIVITY_QUEUE` |
|
|
266
|
-
| `ITransactionPublisher` | Eventos de transacción | `TRANSACTION_QUEUE` |
|
|
267
|
-
| `IActivityPublisher` | Eventos de actividad | `ACTIVITY_QUEUE` |
|
|
268
|
-
| `ITransactionAlarmPublisher` | Alarmas de transacción | `TRANSACTION_ALARM_QUEUE` |
|
|
269
|
-
| `IPublisher` | Publisher genérico | Configurable |
|
|
270
|
-
|
|
271
|
-
### Ejemplo de Publisher
|
|
272
|
-
|
|
273
|
-
```typescript
|
|
274
|
-
import { inject, injectable } from "inversify";
|
|
275
|
-
import { INotificationMessagesPublisher } from "@fiado/api-invoker";
|
|
276
|
-
import { NotificationQueueMessageRequest } from "@fiado/type-kit";
|
|
277
|
-
|
|
278
|
-
@injectable()
|
|
279
|
-
export class NotificationService {
|
|
280
|
-
constructor(
|
|
281
|
-
@inject("INotificationMessagesPublisher")
|
|
282
|
-
private notificationPublisher: INotificationMessagesPublisher
|
|
283
|
-
) {}
|
|
284
|
-
|
|
285
|
-
async sendPushNotification(userId: string, message: string): Promise<void> {
|
|
286
|
-
const notification: NotificationQueueMessageRequest = {
|
|
287
|
-
userId,
|
|
288
|
-
type: "PUSH",
|
|
289
|
-
message,
|
|
290
|
-
timestamp: new Date().toISOString()
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
await this.notificationPublisher.publish(notification);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Uso en Proyectos
|
|
301
|
-
|
|
302
|
-
### Ejemplo: Consultar Directorio
|
|
303
|
-
|
|
304
|
-
```typescript
|
|
305
|
-
import { inject, injectable } from "inversify";
|
|
306
|
-
import { IDirectoryApi } from "@fiado/api-invoker";
|
|
307
|
-
import { log } from "@fiado/logger";
|
|
308
|
-
|
|
309
|
-
@injectable()
|
|
310
|
-
export class UserService {
|
|
311
|
-
constructor(
|
|
312
|
-
@inject("IDirectoryApi") private directoryApi: IDirectoryApi
|
|
313
|
-
) {}
|
|
314
|
-
|
|
315
|
-
async getUsersByIds(directoryIds: string[]): Promise<any[]> {
|
|
316
|
-
try {
|
|
317
|
-
const response = await this.directoryApi.getByIds(directoryIds);
|
|
318
|
-
log.info("Directories fetched successfully", { count: response.length });
|
|
319
|
-
return response;
|
|
320
|
-
} catch (error) {
|
|
321
|
-
log.error("Error fetching directories", error);
|
|
322
|
-
throw error;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
async getUserByPhone(phoneNumber: string): Promise<any> {
|
|
327
|
-
return await this.directoryApi.getByPhoneNumber(phoneNumber);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
### Ejemplo: Procesar Transacción
|
|
333
|
-
|
|
334
|
-
```typescript
|
|
335
|
-
import { inject, injectable } from "inversify";
|
|
336
|
-
import { ITransactionApi, ITransactionPublisher } from "@fiado/api-invoker";
|
|
337
|
-
|
|
338
|
-
@injectable()
|
|
339
|
-
export class PaymentManager {
|
|
340
|
-
constructor(
|
|
341
|
-
@inject("ITransactionApi") private transactionApi: ITransactionApi,
|
|
342
|
-
@inject("ITransactionPublisher") private transactionPublisher: ITransactionPublisher
|
|
343
|
-
) {}
|
|
344
|
-
|
|
345
|
-
async processPayment(paymentData: any): Promise<void> {
|
|
346
|
-
// 1. Crear transacción via API síncrona
|
|
347
|
-
const transaction = await this.transactionApi.create(paymentData);
|
|
348
|
-
|
|
349
|
-
// 2. Publicar evento para procesamiento asíncrono
|
|
350
|
-
await this.transactionPublisher.publish({
|
|
351
|
-
transactionId: transaction.id,
|
|
352
|
-
event: "PAYMENT_INITIATED",
|
|
353
|
-
timestamp: new Date().toISOString()
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
### Ejemplo: Verificación de Identidad
|
|
360
|
-
|
|
361
|
-
```typescript
|
|
362
|
-
import { inject, injectable } from "inversify";
|
|
363
|
-
import { IIdentityApi, IRiskProfileApi } from "@fiado/api-invoker";
|
|
364
|
-
|
|
365
|
-
@injectable()
|
|
366
|
-
export class KYCService {
|
|
367
|
-
constructor(
|
|
368
|
-
@inject("IIdentityApi") private identityApi: IIdentityApi,
|
|
369
|
-
@inject("IRiskProfileApi") private riskProfileApi: IRiskProfileApi
|
|
370
|
-
) {}
|
|
371
|
-
|
|
372
|
-
async verifyUser(directoryId: string, documents: any): Promise<boolean> {
|
|
373
|
-
// Verificar identidad
|
|
374
|
-
const identityResult = await this.identityApi.verify(directoryId, documents);
|
|
375
|
-
|
|
376
|
-
// Evaluar perfil de riesgo
|
|
377
|
-
const riskProfile = await this.riskProfileApi.evaluate(directoryId);
|
|
378
|
-
|
|
379
|
-
return identityResult.verified && riskProfile.score < 0.5;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
## Variables de Entorno
|
|
387
|
-
|
|
388
|
-
Cada cliente API requiere una variable de entorno con la URL base del Lambda destino. El formato estándar es:
|
|
389
|
-
|
|
390
|
-
```
|
|
391
|
-
{SERVICE_NAME}_LAMBDA_URL=https://{api-id}.execute-api.{region}.amazonaws.com/v1/
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
### Configuración en template.yml
|
|
395
|
-
|
|
396
|
-
```yaml
|
|
397
|
-
Environment:
|
|
398
|
-
Variables:
|
|
399
|
-
DIRECTORY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-directory-lambda}}"
|
|
400
|
-
IDENTITY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-identity-lambda}}"
|
|
401
|
-
TRANSACTION_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-transaction-lambda}}"
|
|
402
|
-
# ... otras URLs
|
|
403
|
-
|
|
404
|
-
# Colas SQS
|
|
405
|
-
NOTIFICATION_MESSAGES_QUEUE: !ImportValue SqsNotificationMessagesQueueUrl
|
|
406
|
-
SESSION_ACTIVITY_QUEUE: !ImportValue SqsSessionActivityQueueUrl
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
### Resolución de URLs
|
|
410
|
-
|
|
411
|
-
Las URLs se almacenan en **SSM Parameter Store** y se resuelven en tiempo de despliegue. El pipeline de CI/CD registra automáticamente la URL de cada Lambda después del deploy.
|
|
412
|
-
|
|
413
|
-
---
|
|
414
|
-
|
|
415
|
-
## Estructura del Proyecto
|
|
416
|
-
|
|
417
|
-
```
|
|
418
|
-
src/
|
|
419
|
-
├── index.ts # Exportaciones públicas
|
|
420
|
-
├── container.config.ts # ContainerModule con todos los bindings
|
|
421
|
-
├── utils/ # Utilidades compartidas
|
|
422
|
-
│ └── InvokerUtils.ts
|
|
423
|
-
│
|
|
424
|
-
├── directory/ # Ejemplo de estructura de módulo
|
|
425
|
-
│ ├── index.ts # Re-exportaciones del módulo
|
|
426
|
-
│ ├── DirectoryApi.ts # Implementación del cliente
|
|
427
|
-
│ └── interfaces/
|
|
428
|
-
│ └── IDirectoryApi.ts # Interface del cliente
|
|
429
|
-
│
|
|
430
|
-
├── transaction/ # Módulo con API y Publisher
|
|
431
|
-
│ ├── index.ts
|
|
432
|
-
│ ├── api/
|
|
433
|
-
│ │ ├── TransactionApi.ts
|
|
434
|
-
│ │ └── ITransactionApi.ts
|
|
435
|
-
│ └── queue/
|
|
436
|
-
│ ├── TransactionPublisher.ts
|
|
437
|
-
│ └── ITransactionPublisher.ts
|
|
438
|
-
│
|
|
439
|
-
├── notificationMessages/ # Módulo solo Publisher
|
|
440
|
-
│ ├── index.ts
|
|
441
|
-
│ └── queue/
|
|
442
|
-
│ ├── NotificationMessagePublisher.ts
|
|
443
|
-
│ └── interfaces/
|
|
444
|
-
│ └── INotificationMessagesPublisher.ts
|
|
445
|
-
│
|
|
446
|
-
└── [60+ módulos adicionales...]
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
### Estructura de un Módulo API
|
|
450
|
-
|
|
451
|
-
```
|
|
452
|
-
{service-name}/
|
|
453
|
-
├── index.ts # export * from './interfaces/I{Service}Api';
|
|
454
|
-
│ # export * from './{Service}Api';
|
|
455
|
-
├── {Service}Api.ts # Implementación @injectable()
|
|
456
|
-
└── interfaces/
|
|
457
|
-
└── I{Service}Api.ts # Interface con JSDoc
|
|
458
|
-
```
|
|
459
|
-
|
|
460
|
-
### Estructura de un Módulo con Queue
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
{service-name}/
|
|
464
|
-
├── index.ts
|
|
465
|
-
├── api/
|
|
466
|
-
│ ├── {Service}Api.ts
|
|
467
|
-
│ └── I{Service}Api.ts
|
|
468
|
-
└── queue/
|
|
469
|
-
├── {Service}Publisher.ts
|
|
470
|
-
└── interfaces/
|
|
471
|
-
└── I{Service}Publisher.ts
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
---
|
|
475
|
-
|
|
476
|
-
## Convenciones de Desarrollo
|
|
477
|
-
|
|
478
|
-
### Nomenclatura
|
|
479
|
-
|
|
480
|
-
| Elemento | Patrón | Ejemplo |
|
|
481
|
-
|----------|--------|---------|
|
|
482
|
-
| **Carpeta de módulo** | `kebab-case` | `account-fiadoinc/` |
|
|
483
|
-
| **Interface API** | `I{Service}Api` | `IDirectoryApi` |
|
|
484
|
-
| **Implementación API** | `{Service}Api` | `DirectoryApi` |
|
|
485
|
-
| **Interface Publisher** | `I{Service}Publisher` | `ITransactionPublisher` |
|
|
486
|
-
| **Implementación Publisher** | `{Service}Publisher` | `TransactionPublisher` |
|
|
487
|
-
|
|
488
|
-
### Patrón de Implementación API
|
|
489
|
-
|
|
490
|
-
```typescript
|
|
491
|
-
import dotenv from 'dotenv';
|
|
492
|
-
import { inject, injectable } from "inversify";
|
|
493
|
-
import { IHttpRequest } from "@fiado/http-client";
|
|
494
|
-
import { I{Service}Api } from "./interfaces/I{Service}Api";
|
|
495
|
-
dotenv.config();
|
|
496
|
-
|
|
497
|
-
@injectable()
|
|
498
|
-
export class {Service}Api implements I{Service}Api {
|
|
499
|
-
|
|
500
|
-
private readonly baseUrl = process.env.{SERVICE}_LAMBDA_URL || "";
|
|
501
|
-
|
|
502
|
-
constructor(
|
|
503
|
-
@inject("IHttpRequest") private httpRequest: IHttpRequest
|
|
504
|
-
) {}
|
|
505
|
-
|
|
506
|
-
public async getById(id: string): Promise<any> {
|
|
507
|
-
const url = `${this.baseUrl}?id=${id}`;
|
|
508
|
-
const operationName = "getById";
|
|
509
|
-
|
|
510
|
-
return await this.httpRequest.get(url, null, {
|
|
511
|
-
'operationName': operationName
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
### Patrón de Implementación Publisher
|
|
518
|
-
|
|
519
|
-
```typescript
|
|
520
|
-
import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
|
|
521
|
-
import { inject, injectable } from "inversify";
|
|
522
|
-
import { I{Service}Publisher } from "./interfaces/I{Service}Publisher";
|
|
523
|
-
|
|
524
|
-
@injectable()
|
|
525
|
-
export class {Service}Publisher implements I{Service}Publisher {
|
|
526
|
-
|
|
527
|
-
private readonly queueUrl = process.env.{SERVICE}_QUEUE;
|
|
528
|
-
|
|
529
|
-
async publish(message: any): Promise<void> {
|
|
530
|
-
const client = new SQSClient();
|
|
531
|
-
const command = new SendMessageCommand({
|
|
532
|
-
QueueUrl: this.queueUrl,
|
|
533
|
-
MessageBody: JSON.stringify(message)
|
|
534
|
-
});
|
|
535
|
-
await client.send(command);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
### Header operationName
|
|
541
|
-
|
|
542
|
-
Todas las llamadas HTTP incluyen el header `operationName` que permite:
|
|
543
|
-
- Trazabilidad en logs
|
|
544
|
-
- Métricas por operación
|
|
545
|
-
- Debugging en X-Ray
|
|
546
|
-
|
|
547
|
-
---
|
|
548
|
-
|
|
549
|
-
## Dependencias
|
|
550
|
-
|
|
551
|
-
### Runtime
|
|
552
|
-
|
|
553
|
-
| Dependencia | Versión | Propósito |
|
|
554
|
-
|-------------|---------|-----------|
|
|
555
|
-
| `@aws-sdk/client-sqs` | ^3.919.0 | Cliente SQS para publishers |
|
|
556
|
-
| `@fiado/gateway-adapter` | ^1.1.50 | Tipos de respuesta API |
|
|
557
|
-
| `@fiado/http-client` | ^1.0.7 | Cliente HTTP base |
|
|
558
|
-
| `@fiado/logger` | ^1.0.3 | Logging estructurado |
|
|
559
|
-
| `@fiado/type-kit` | ^2.1.28 | DTOs y tipos compartidos |
|
|
560
|
-
| `inversify` | ^6.2.2 | Inyección de dependencias |
|
|
561
|
-
| `reflect-metadata` | ^0.2.2 | Metadatos para decoradores |
|
|
562
|
-
| `dotenv` | ^16.4.7 | Variables de entorno |
|
|
563
|
-
|
|
564
|
-
### Desarrollo
|
|
565
|
-
|
|
566
|
-
| Dependencia | Versión | Propósito |
|
|
567
|
-
|-------------|---------|-----------|
|
|
568
|
-
| `@types/node` | ^20.17.24 | Tipos de Node.js |
|
|
569
|
-
| `typescript` | (peer) | Compilador TypeScript |
|
|
570
|
-
|
|
571
|
-
---
|
|
572
|
-
|
|
573
|
-
## Compilación y Publicación
|
|
574
|
-
|
|
575
|
-
### Build
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
npm run build
|
|
579
|
-
```
|
|
580
|
-
|
|
581
|
-
Genera archivos `.js` y `.d.ts` en el directorio `bin/`.
|
|
582
|
-
|
|
583
|
-
### Publicación
|
|
584
|
-
|
|
585
|
-
```bash
|
|
586
|
-
npm version patch|minor|major
|
|
587
|
-
npm publish
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
La librería se publica en el registry npm privado de Fiado configurado en `.npmrc`.
|
|
591
|
-
|
|
592
|
-
---
|
|
593
|
-
|
|
594
|
-
<div align="center">
|
|
595
|
-
|
|
596
|
-
**Fiado Inc.** | @fiado/api-invoker v1.5.34
|
|
597
|
-
|
|
598
|
-
</div>
|
|
599
|
-
|
|
600
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🔗 Fiado API Invoker
|
|
4
|
+
|
|
5
|
+
### Librería de Comunicación Inter-Servicios para Microservicios Lambda
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/)
|
|
8
|
+
[](https://www.typescriptlang.org/)
|
|
9
|
+
[](https://aws.amazon.com/lambda/)
|
|
10
|
+
[](https://inversify.io/)
|
|
11
|
+
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Tabla de Contenidos
|
|
17
|
+
|
|
18
|
+
- [Descripción General](#descripción-general)
|
|
19
|
+
- [Arquitectura](#arquitectura)
|
|
20
|
+
- [Instalación](#instalación)
|
|
21
|
+
- [Configuración](#configuración)
|
|
22
|
+
- [APIs Disponibles](#apis-disponibles)
|
|
23
|
+
- [Publishers (Colas SQS)](#publishers-colas-sqs)
|
|
24
|
+
- [Uso en Proyectos](#uso-en-proyectos)
|
|
25
|
+
- [Variables de Entorno](#variables-de-entorno)
|
|
26
|
+
- [Estructura del Proyecto](#estructura-del-proyecto)
|
|
27
|
+
- [Convenciones de Desarrollo](#convenciones-de-desarrollo)
|
|
28
|
+
- [Dependencias](#dependencias)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Descripción General
|
|
33
|
+
|
|
34
|
+
`@fiado/api-invoker` es una librería empresarial que actúa como **puente de comunicación entre microservicios Lambda** dentro del ecosistema Fiado. Proporciona:
|
|
35
|
+
|
|
36
|
+
- **Clientes HTTP tipados** para invocar APIs privadas de otros Lambdas
|
|
37
|
+
- **Publishers SQS** para comunicación asíncrona mediante colas
|
|
38
|
+
- **Inyección de dependencias** integrada con InversifyJS
|
|
39
|
+
- **Abstracción de complejidad** de configuración y manejo de errores
|
|
40
|
+
|
|
41
|
+
### Propósito
|
|
42
|
+
|
|
43
|
+
En una arquitectura de microservicios, cada Lambda expone una API privada accesible únicamente desde la VPC. Esta librería encapsula:
|
|
44
|
+
|
|
45
|
+
1. La construcción de URLs base desde variables de entorno
|
|
46
|
+
2. El manejo de headers y operaciones HTTP
|
|
47
|
+
3. La serialización/deserialización de payloads
|
|
48
|
+
4. La publicación de mensajes a colas SQS
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Arquitectura
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
56
|
+
│ LAMBDA CONSUMIDOR │
|
|
57
|
+
│ │
|
|
58
|
+
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
|
|
59
|
+
│ │ Manager/ │───▶│ @fiado/ │───▶│ @fiado/ │ │
|
|
60
|
+
│ │ Service │ │ api-invoker │ │ http-client │ │
|
|
61
|
+
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
|
|
62
|
+
│ │ │ │
|
|
63
|
+
└───────────────────────────────────┼────────────────────────┼────────────┘
|
|
64
|
+
│ │
|
|
65
|
+
┌───────────────┴───────────────┐ │
|
|
66
|
+
▼ ▼ ▼
|
|
67
|
+
┌──────────────┐ ┌──────────────────┐
|
|
68
|
+
│ AWS SQS │ │ API Gateway │
|
|
69
|
+
│ (Queues) │ │ (Private VPC) │
|
|
70
|
+
└──────────────┘ └──────────────────┘
|
|
71
|
+
│ │
|
|
72
|
+
▼ ▼
|
|
73
|
+
┌──────────────┐ ┌──────────────────┐
|
|
74
|
+
│ Lambda │ │ Lambda │
|
|
75
|
+
│ Subscriber │ │ Target │
|
|
76
|
+
└──────────────┘ └──────────────────┘
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Patrones de Comunicación
|
|
80
|
+
|
|
81
|
+
| Patrón | Implementación | Uso |
|
|
82
|
+
|--------|----------------|-----|
|
|
83
|
+
| **Síncrono** | HTTP via API Gateway privado | Consultas, operaciones CRUD |
|
|
84
|
+
| **Asíncrono** | SQS Publishers | Eventos, notificaciones, procesos batch |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Instalación
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npm install @fiado/api-invoker @fiado/http-client
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Peer Dependencies
|
|
95
|
+
|
|
96
|
+
La librería requiere las siguientes dependencias en el proyecto consumidor:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"@fiado/http-client": "^1.0.7",
|
|
101
|
+
"@fiado/logger": "^1.0.3",
|
|
102
|
+
"@fiado/type-kit": "^2.1.28",
|
|
103
|
+
"inversify": "^6.2.2",
|
|
104
|
+
"reflect-metadata": "^0.2.2"
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Configuración
|
|
111
|
+
|
|
112
|
+
### Registro en el Contenedor IoC
|
|
113
|
+
|
|
114
|
+
La librería exporta un `ContainerModule` de InversifyJS que registra automáticamente todos los clientes API y publishers:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
import { Container } from "inversify";
|
|
118
|
+
import { IHttpRequest, AxiosHttpRequest } from "@fiado/http-client";
|
|
119
|
+
import { apiInvokerBindings } from "@fiado/api-invoker";
|
|
120
|
+
|
|
121
|
+
const container = new Container();
|
|
122
|
+
|
|
123
|
+
// 1. Cargar bindings de api-invoker (registra todos los clientes)
|
|
124
|
+
container.load(apiInvokerBindings);
|
|
125
|
+
|
|
126
|
+
// 2. Registrar el cliente HTTP (requerido por los clientes API)
|
|
127
|
+
container.bind<IHttpRequest>("IHttpRequest").to(AxiosHttpRequest);
|
|
128
|
+
|
|
129
|
+
export { container };
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Importación de Interfaces
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// Importar interfaces específicas
|
|
136
|
+
import {
|
|
137
|
+
IDirectoryApi,
|
|
138
|
+
IIdentityApi,
|
|
139
|
+
ITransactionApi,
|
|
140
|
+
INotificationMessagesPublisher
|
|
141
|
+
} from "@fiado/api-invoker";
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## APIs Disponibles
|
|
147
|
+
|
|
148
|
+
La librería proporciona clientes para **60+ microservicios** del ecosistema Fiado:
|
|
149
|
+
|
|
150
|
+
### Servicios Core
|
|
151
|
+
|
|
152
|
+
| Interface | Descripción | Variable de Entorno |
|
|
153
|
+
|-----------|-------------|---------------------|
|
|
154
|
+
| `IDirectoryApi` | Gestión de directorios de usuarios | `DIRECTORY_LAMBDA_URL` |
|
|
155
|
+
| `IIdentityApi` | Verificación de identidad | `IDENTITY_LAMBDA_URL` |
|
|
156
|
+
| `IAuthenticationApi` | Autenticación y tokens | `AUTHENTICATION_LAMBDA_URL` |
|
|
157
|
+
| `ITransactionApi` | Procesamiento de transacciones | `TRANSACTION_LAMBDA_URL` |
|
|
158
|
+
|
|
159
|
+
### Servicios de Cuenta
|
|
160
|
+
|
|
161
|
+
| Interface | Descripción | Variable de Entorno |
|
|
162
|
+
|-----------|-------------|---------------------|
|
|
163
|
+
| `IAccountFiadoIncApi` | Cuentas Fiado Inc | `ACCOUNT_FIADOINC_LAMBDA_URL` |
|
|
164
|
+
| `IAccountFiadoSAApi` | Cuentas Fiado SA | `ACCOUNT_FIADOSA_LAMBDA_URL` |
|
|
165
|
+
| `IAccountPagoConfiadoApi` | Cuentas PagoConfiado | `ACCOUNT_PAGOCONFIADO_LAMBDA_URL` |
|
|
166
|
+
| `IAccountBeneficiaryApi` | Beneficiarios de cuentas | `ACCOUNT_BENEFICIARY_LAMBDA_URL` |
|
|
167
|
+
| `IBankAccountApi` | Cuentas bancarias | `BANK_ACCOUNT_LAMBDA_URL` |
|
|
168
|
+
|
|
169
|
+
### Servicios de Pago
|
|
170
|
+
|
|
171
|
+
| Interface | Descripción | Variable de Entorno |
|
|
172
|
+
|-----------|-------------|---------------------|
|
|
173
|
+
| `IStpSpeiApi` | Transferencias SPEI | `STP_SPEI_LAMBDA_URL` |
|
|
174
|
+
| `IStpServicePaymentApi` | Pagos de servicios STP | `STP_SERVICE_PAYMENT_LAMBDA_URL` |
|
|
175
|
+
| `ICentralPaymentsConnectorApi` | Conector de pagos central | `CENTRAL_PAYMENTS_LAMBDA_URL` |
|
|
176
|
+
| `ICollectorApi` | Cobranza | `COLLECTOR_LAMBDA_URL` |
|
|
177
|
+
|
|
178
|
+
### Servicios de Tarjeta
|
|
179
|
+
|
|
180
|
+
| Interface | Descripción | Variable de Entorno |
|
|
181
|
+
|-----------|-------------|---------------------|
|
|
182
|
+
| `ICardApi` | Gestión de tarjetas | `CARD_LAMBDA_URL` |
|
|
183
|
+
| `IPomeloApi` | Integración Pomelo | `POMELO_LAMBDA_URL` |
|
|
184
|
+
| `IPomeloProcessorApi` | Procesador Pomelo | `POMELO_PROCESSOR_LAMBDA_URL` |
|
|
185
|
+
|
|
186
|
+
### Servicios de Riesgo y Fraude
|
|
187
|
+
|
|
188
|
+
| Interface | Descripción | Variable de Entorno |
|
|
189
|
+
|-----------|-------------|---------------------|
|
|
190
|
+
| `IRiskProfileApi` | Perfiles de riesgo | `RISK_PROFILE_LAMBDA_URL` |
|
|
191
|
+
| `IFraudPreventionEngineApi` | Motor antifraude | `FRAUD_PREVENTION_LAMBDA_URL` |
|
|
192
|
+
| `IBlackListApi` | Listas negras | `BLACKLIST_LAMBDA_URL` |
|
|
193
|
+
| `ITransactionAlertApi` | Alertas de transacciones | `RISK_PROFILE_LAMBDA_URL` |
|
|
194
|
+
|
|
195
|
+
### Servicios de Onboarding
|
|
196
|
+
|
|
197
|
+
| Interface | Descripción | Variable de Entorno |
|
|
198
|
+
|-----------|-------------|---------------------|
|
|
199
|
+
| `IOnboardingApi` | Onboarding de usuarios | `ONBOARDING_LAMBDA_URL` |
|
|
200
|
+
| `IOnboardingBusinessApi` | Onboarding de negocios | `ONBOARDING_BUSINESS_LAMBDA_URL` |
|
|
201
|
+
| `ICnbvApi` | Integración CNBV | `CNBV_BUSINESS_LAMBDA_URL` |
|
|
202
|
+
|
|
203
|
+
### Servicios de Comunicación
|
|
204
|
+
|
|
205
|
+
| Interface | Descripción | Variable de Entorno |
|
|
206
|
+
|-----------|-------------|---------------------|
|
|
207
|
+
| `IFiadoMessagesApi` | Mensajería interna | `FIADO_MESSAGES_LAMBDA_URL` |
|
|
208
|
+
| `IFirebaseConnectorApi` | Push notifications | `FIREBASE_CONNECTOR_LAMBDA_URL` |
|
|
209
|
+
| `IZendeskApi` | Integración Zendesk | `ZENDESK_LAMBDA_URL` |
|
|
210
|
+
|
|
211
|
+
### Servicios de Negocio
|
|
212
|
+
|
|
213
|
+
| Interface | Descripción | Variable de Entorno |
|
|
214
|
+
|-----------|-------------|---------------------|
|
|
215
|
+
| `IActivityApi` | Actividades de negocio | `ACTIVITY_BUSINESS_LAMBDA_URL` |
|
|
216
|
+
| `IServiceApi` | Servicios de negocio | `SERVICE_BUSINESS_LAMBDA_URL` |
|
|
217
|
+
| `IPriceListApi` | Listas de precios | `PRICELIST_BUSINESS_LAMBDA_URL` |
|
|
218
|
+
| `IPayrollApi` | Nómina | `PAYROLL_BUSINESS_LAMBDA_URL` |
|
|
219
|
+
| `IOrderCollectorApi` | Órdenes de cobranza | `ORDER_COLLECTOR_LAMBDA_URL` |
|
|
220
|
+
|
|
221
|
+
### Servicios Auxiliares
|
|
222
|
+
|
|
223
|
+
| Interface | Descripción | Variable de Entorno |
|
|
224
|
+
|-----------|-------------|---------------------|
|
|
225
|
+
| `IAddressApi` | Direcciones | `ADDRESS_LAMBDA_URL` |
|
|
226
|
+
| `IContactInformationApi` | Información de contacto | `CONTACT_INFORMATION_LAMBDA_URL` |
|
|
227
|
+
| `IDeviceApi` | Dispositivos | `DEVICE_LAMBDA_URL` |
|
|
228
|
+
| `IGroupApi` | Grupos | `GROUP_LAMBDA_URL` |
|
|
229
|
+
| `IP2pContactApi` | Contactos P2P | `P2P_CONTACT_LAMBDA_URL` |
|
|
230
|
+
| `IExchangeRatesApi` | Tipos de cambio | `EXCHANGE_RATES_LAMBDA_URL` |
|
|
231
|
+
| `IProductCatalogApi` | Catálogo de productos | `PRODUCT_CATALOG_LAMBDA_URL` |
|
|
232
|
+
| `IContractGeneratorApi` | Generador de contratos | `CONTRACT_GENERATOR_LAMBDA_URL` |
|
|
233
|
+
| `IDocumentImageProcessorApi` | Procesador de imágenes | `DOCUMENT_IMAGE_PROCESSOR_LAMBDA_URL` |
|
|
234
|
+
| `ILegalDocumentApi` | Documentos legales | `LEGAL_DOCUMENT_LAMBDA_URL` |
|
|
235
|
+
| `IObservationsApi` | Observaciones | `OBSERVATIONS_LAMBDA_URL` |
|
|
236
|
+
| `IDirectoriesApi` | Directorios múltiples | `DIRECTORIES_LAMBDA_URL` |
|
|
237
|
+
| `IDirectorySettingApi` | Configuración de directorio | `DIRECTORY_SETTING_LAMBDA_URL` |
|
|
238
|
+
| `IAppSelectionDataApi` | Datos de selección de app | `APP_SELECTION_DATA_LAMBDA_URL` |
|
|
239
|
+
| `IReferralBusinessApi` | Referidos | `REFERRAL_BUSINESS_LAMBDA_URL` |
|
|
240
|
+
| `IEventHistoryApi` | Historial de eventos | `EVENT_HISTORY_LAMBDA_URL` |
|
|
241
|
+
| `IReportProcessorBusinessApi` | Procesador de reportes | `REPORT_PROCESSOR_LAMBDA_URL` |
|
|
242
|
+
| `IPeopleBusinessApi` | Gestión de personas | `PEOPLE_BUSINESS_LAMBDA_URL` |
|
|
243
|
+
|
|
244
|
+
### Integraciones Externas
|
|
245
|
+
|
|
246
|
+
| Interface | Descripción | Variable de Entorno |
|
|
247
|
+
|-----------|-------------|---------------------|
|
|
248
|
+
| `ITernApi` | Integración Tern | `TERN_LAMBDA_URL` |
|
|
249
|
+
| `IBBVARstApi` | Integración BBVA RST | `BBVA_RST_LAMBDA_URL` |
|
|
250
|
+
| `IEstafetaApi` | Integración Estafeta | `ESTAFETA_LAMBDA_URL` |
|
|
251
|
+
| `ICognitoConnectorApi` | Conector Cognito | `COGNITO_CONNECTOR_LAMBDA_URL` |
|
|
252
|
+
| `ICognitoV2Api` | Cognito V2 | `COGNITO_CONNECTOR_LAMBDA_URL` |
|
|
253
|
+
| `ISTPAccountApi` | Cuentas STP | `STP_ACCOUNT_LAMBDA_URL` |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Publishers (Colas SQS)
|
|
258
|
+
|
|
259
|
+
Para comunicación asíncrona, la librería provee publishers que envían mensajes a colas SQS:
|
|
260
|
+
|
|
261
|
+
| Interface | Descripción | Variable de Entorno (Queue) |
|
|
262
|
+
|-----------|-------------|----------------------------|
|
|
263
|
+
| `INotificationMessagesPublisher` | Notificaciones push/email/sms | `NOTIFICATION_MESSAGES_QUEUE` |
|
|
264
|
+
| `INotificationWSMessagesPublisher` | Notificaciones WebSocket | `NOTIFICATION_WS_QUEUE` |
|
|
265
|
+
| `ISessionActivityPublisher` | Actividad de sesión | `SESSION_ACTIVITY_QUEUE` |
|
|
266
|
+
| `ITransactionPublisher` | Eventos de transacción | `TRANSACTION_QUEUE` |
|
|
267
|
+
| `IActivityPublisher` | Eventos de actividad | `ACTIVITY_QUEUE` |
|
|
268
|
+
| `ITransactionAlarmPublisher` | Alarmas de transacción | `TRANSACTION_ALARM_QUEUE` |
|
|
269
|
+
| `IPublisher` | Publisher genérico | Configurable |
|
|
270
|
+
|
|
271
|
+
### Ejemplo de Publisher
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
import { inject, injectable } from "inversify";
|
|
275
|
+
import { INotificationMessagesPublisher } from "@fiado/api-invoker";
|
|
276
|
+
import { NotificationQueueMessageRequest } from "@fiado/type-kit";
|
|
277
|
+
|
|
278
|
+
@injectable()
|
|
279
|
+
export class NotificationService {
|
|
280
|
+
constructor(
|
|
281
|
+
@inject("INotificationMessagesPublisher")
|
|
282
|
+
private notificationPublisher: INotificationMessagesPublisher
|
|
283
|
+
) {}
|
|
284
|
+
|
|
285
|
+
async sendPushNotification(userId: string, message: string): Promise<void> {
|
|
286
|
+
const notification: NotificationQueueMessageRequest = {
|
|
287
|
+
userId,
|
|
288
|
+
type: "PUSH",
|
|
289
|
+
message,
|
|
290
|
+
timestamp: new Date().toISOString()
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
await this.notificationPublisher.publish(notification);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Uso en Proyectos
|
|
301
|
+
|
|
302
|
+
### Ejemplo: Consultar Directorio
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
import { inject, injectable } from "inversify";
|
|
306
|
+
import { IDirectoryApi } from "@fiado/api-invoker";
|
|
307
|
+
import { log } from "@fiado/logger";
|
|
308
|
+
|
|
309
|
+
@injectable()
|
|
310
|
+
export class UserService {
|
|
311
|
+
constructor(
|
|
312
|
+
@inject("IDirectoryApi") private directoryApi: IDirectoryApi
|
|
313
|
+
) {}
|
|
314
|
+
|
|
315
|
+
async getUsersByIds(directoryIds: string[]): Promise<any[]> {
|
|
316
|
+
try {
|
|
317
|
+
const response = await this.directoryApi.getByIds(directoryIds);
|
|
318
|
+
log.info("Directories fetched successfully", { count: response.length });
|
|
319
|
+
return response;
|
|
320
|
+
} catch (error) {
|
|
321
|
+
log.error("Error fetching directories", error);
|
|
322
|
+
throw error;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
async getUserByPhone(phoneNumber: string): Promise<any> {
|
|
327
|
+
return await this.directoryApi.getByPhoneNumber(phoneNumber);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Ejemplo: Procesar Transacción
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
import { inject, injectable } from "inversify";
|
|
336
|
+
import { ITransactionApi, ITransactionPublisher } from "@fiado/api-invoker";
|
|
337
|
+
|
|
338
|
+
@injectable()
|
|
339
|
+
export class PaymentManager {
|
|
340
|
+
constructor(
|
|
341
|
+
@inject("ITransactionApi") private transactionApi: ITransactionApi,
|
|
342
|
+
@inject("ITransactionPublisher") private transactionPublisher: ITransactionPublisher
|
|
343
|
+
) {}
|
|
344
|
+
|
|
345
|
+
async processPayment(paymentData: any): Promise<void> {
|
|
346
|
+
// 1. Crear transacción via API síncrona
|
|
347
|
+
const transaction = await this.transactionApi.create(paymentData);
|
|
348
|
+
|
|
349
|
+
// 2. Publicar evento para procesamiento asíncrono
|
|
350
|
+
await this.transactionPublisher.publish({
|
|
351
|
+
transactionId: transaction.id,
|
|
352
|
+
event: "PAYMENT_INITIATED",
|
|
353
|
+
timestamp: new Date().toISOString()
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Ejemplo: Verificación de Identidad
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
import { inject, injectable } from "inversify";
|
|
363
|
+
import { IIdentityApi, IRiskProfileApi } from "@fiado/api-invoker";
|
|
364
|
+
|
|
365
|
+
@injectable()
|
|
366
|
+
export class KYCService {
|
|
367
|
+
constructor(
|
|
368
|
+
@inject("IIdentityApi") private identityApi: IIdentityApi,
|
|
369
|
+
@inject("IRiskProfileApi") private riskProfileApi: IRiskProfileApi
|
|
370
|
+
) {}
|
|
371
|
+
|
|
372
|
+
async verifyUser(directoryId: string, documents: any): Promise<boolean> {
|
|
373
|
+
// Verificar identidad
|
|
374
|
+
const identityResult = await this.identityApi.verify(directoryId, documents);
|
|
375
|
+
|
|
376
|
+
// Evaluar perfil de riesgo
|
|
377
|
+
const riskProfile = await this.riskProfileApi.evaluate(directoryId);
|
|
378
|
+
|
|
379
|
+
return identityResult.verified && riskProfile.score < 0.5;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Variables de Entorno
|
|
387
|
+
|
|
388
|
+
Cada cliente API requiere una variable de entorno con la URL base del Lambda destino. El formato estándar es:
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
{SERVICE_NAME}_LAMBDA_URL=https://{api-id}.execute-api.{region}.amazonaws.com/v1/
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Configuración en template.yml
|
|
395
|
+
|
|
396
|
+
```yaml
|
|
397
|
+
Environment:
|
|
398
|
+
Variables:
|
|
399
|
+
DIRECTORY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-directory-lambda}}"
|
|
400
|
+
IDENTITY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-identity-lambda}}"
|
|
401
|
+
TRANSACTION_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-transaction-lambda}}"
|
|
402
|
+
# ... otras URLs
|
|
403
|
+
|
|
404
|
+
# Colas SQS
|
|
405
|
+
NOTIFICATION_MESSAGES_QUEUE: !ImportValue SqsNotificationMessagesQueueUrl
|
|
406
|
+
SESSION_ACTIVITY_QUEUE: !ImportValue SqsSessionActivityQueueUrl
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Resolución de URLs
|
|
410
|
+
|
|
411
|
+
Las URLs se almacenan en **SSM Parameter Store** y se resuelven en tiempo de despliegue. El pipeline de CI/CD registra automáticamente la URL de cada Lambda después del deploy.
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## Estructura del Proyecto
|
|
416
|
+
|
|
417
|
+
```
|
|
418
|
+
src/
|
|
419
|
+
├── index.ts # Exportaciones públicas
|
|
420
|
+
├── container.config.ts # ContainerModule con todos los bindings
|
|
421
|
+
├── utils/ # Utilidades compartidas
|
|
422
|
+
│ └── InvokerUtils.ts
|
|
423
|
+
│
|
|
424
|
+
├── directory/ # Ejemplo de estructura de módulo
|
|
425
|
+
│ ├── index.ts # Re-exportaciones del módulo
|
|
426
|
+
│ ├── DirectoryApi.ts # Implementación del cliente
|
|
427
|
+
│ └── interfaces/
|
|
428
|
+
│ └── IDirectoryApi.ts # Interface del cliente
|
|
429
|
+
│
|
|
430
|
+
├── transaction/ # Módulo con API y Publisher
|
|
431
|
+
│ ├── index.ts
|
|
432
|
+
│ ├── api/
|
|
433
|
+
│ │ ├── TransactionApi.ts
|
|
434
|
+
│ │ └── ITransactionApi.ts
|
|
435
|
+
│ └── queue/
|
|
436
|
+
│ ├── TransactionPublisher.ts
|
|
437
|
+
│ └── ITransactionPublisher.ts
|
|
438
|
+
│
|
|
439
|
+
├── notificationMessages/ # Módulo solo Publisher
|
|
440
|
+
│ ├── index.ts
|
|
441
|
+
│ └── queue/
|
|
442
|
+
│ ├── NotificationMessagePublisher.ts
|
|
443
|
+
│ └── interfaces/
|
|
444
|
+
│ └── INotificationMessagesPublisher.ts
|
|
445
|
+
│
|
|
446
|
+
└── [60+ módulos adicionales...]
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Estructura de un Módulo API
|
|
450
|
+
|
|
451
|
+
```
|
|
452
|
+
{service-name}/
|
|
453
|
+
├── index.ts # export * from './interfaces/I{Service}Api';
|
|
454
|
+
│ # export * from './{Service}Api';
|
|
455
|
+
├── {Service}Api.ts # Implementación @injectable()
|
|
456
|
+
└── interfaces/
|
|
457
|
+
└── I{Service}Api.ts # Interface con JSDoc
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Estructura de un Módulo con Queue
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
{service-name}/
|
|
464
|
+
├── index.ts
|
|
465
|
+
├── api/
|
|
466
|
+
│ ├── {Service}Api.ts
|
|
467
|
+
│ └── I{Service}Api.ts
|
|
468
|
+
└── queue/
|
|
469
|
+
├── {Service}Publisher.ts
|
|
470
|
+
└── interfaces/
|
|
471
|
+
└── I{Service}Publisher.ts
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Convenciones de Desarrollo
|
|
477
|
+
|
|
478
|
+
### Nomenclatura
|
|
479
|
+
|
|
480
|
+
| Elemento | Patrón | Ejemplo |
|
|
481
|
+
|----------|--------|---------|
|
|
482
|
+
| **Carpeta de módulo** | `kebab-case` | `account-fiadoinc/` |
|
|
483
|
+
| **Interface API** | `I{Service}Api` | `IDirectoryApi` |
|
|
484
|
+
| **Implementación API** | `{Service}Api` | `DirectoryApi` |
|
|
485
|
+
| **Interface Publisher** | `I{Service}Publisher` | `ITransactionPublisher` |
|
|
486
|
+
| **Implementación Publisher** | `{Service}Publisher` | `TransactionPublisher` |
|
|
487
|
+
|
|
488
|
+
### Patrón de Implementación API
|
|
489
|
+
|
|
490
|
+
```typescript
|
|
491
|
+
import dotenv from 'dotenv';
|
|
492
|
+
import { inject, injectable } from "inversify";
|
|
493
|
+
import { IHttpRequest } from "@fiado/http-client";
|
|
494
|
+
import { I{Service}Api } from "./interfaces/I{Service}Api";
|
|
495
|
+
dotenv.config();
|
|
496
|
+
|
|
497
|
+
@injectable()
|
|
498
|
+
export class {Service}Api implements I{Service}Api {
|
|
499
|
+
|
|
500
|
+
private readonly baseUrl = process.env.{SERVICE}_LAMBDA_URL || "";
|
|
501
|
+
|
|
502
|
+
constructor(
|
|
503
|
+
@inject("IHttpRequest") private httpRequest: IHttpRequest
|
|
504
|
+
) {}
|
|
505
|
+
|
|
506
|
+
public async getById(id: string): Promise<any> {
|
|
507
|
+
const url = `${this.baseUrl}?id=${id}`;
|
|
508
|
+
const operationName = "getById";
|
|
509
|
+
|
|
510
|
+
return await this.httpRequest.get(url, null, {
|
|
511
|
+
'operationName': operationName
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### Patrón de Implementación Publisher
|
|
518
|
+
|
|
519
|
+
```typescript
|
|
520
|
+
import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
|
|
521
|
+
import { inject, injectable } from "inversify";
|
|
522
|
+
import { I{Service}Publisher } from "./interfaces/I{Service}Publisher";
|
|
523
|
+
|
|
524
|
+
@injectable()
|
|
525
|
+
export class {Service}Publisher implements I{Service}Publisher {
|
|
526
|
+
|
|
527
|
+
private readonly queueUrl = process.env.{SERVICE}_QUEUE;
|
|
528
|
+
|
|
529
|
+
async publish(message: any): Promise<void> {
|
|
530
|
+
const client = new SQSClient();
|
|
531
|
+
const command = new SendMessageCommand({
|
|
532
|
+
QueueUrl: this.queueUrl,
|
|
533
|
+
MessageBody: JSON.stringify(message)
|
|
534
|
+
});
|
|
535
|
+
await client.send(command);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
### Header operationName
|
|
541
|
+
|
|
542
|
+
Todas las llamadas HTTP incluyen el header `operationName` que permite:
|
|
543
|
+
- Trazabilidad en logs
|
|
544
|
+
- Métricas por operación
|
|
545
|
+
- Debugging en X-Ray
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
## Dependencias
|
|
550
|
+
|
|
551
|
+
### Runtime
|
|
552
|
+
|
|
553
|
+
| Dependencia | Versión | Propósito |
|
|
554
|
+
|-------------|---------|-----------|
|
|
555
|
+
| `@aws-sdk/client-sqs` | ^3.919.0 | Cliente SQS para publishers |
|
|
556
|
+
| `@fiado/gateway-adapter` | ^1.1.50 | Tipos de respuesta API |
|
|
557
|
+
| `@fiado/http-client` | ^1.0.7 | Cliente HTTP base |
|
|
558
|
+
| `@fiado/logger` | ^1.0.3 | Logging estructurado |
|
|
559
|
+
| `@fiado/type-kit` | ^2.1.28 | DTOs y tipos compartidos |
|
|
560
|
+
| `inversify` | ^6.2.2 | Inyección de dependencias |
|
|
561
|
+
| `reflect-metadata` | ^0.2.2 | Metadatos para decoradores |
|
|
562
|
+
| `dotenv` | ^16.4.7 | Variables de entorno |
|
|
563
|
+
|
|
564
|
+
### Desarrollo
|
|
565
|
+
|
|
566
|
+
| Dependencia | Versión | Propósito |
|
|
567
|
+
|-------------|---------|-----------|
|
|
568
|
+
| `@types/node` | ^20.17.24 | Tipos de Node.js |
|
|
569
|
+
| `typescript` | (peer) | Compilador TypeScript |
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
## Compilación y Publicación
|
|
574
|
+
|
|
575
|
+
### Build
|
|
576
|
+
|
|
577
|
+
```bash
|
|
578
|
+
npm run build
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
Genera archivos `.js` y `.d.ts` en el directorio `bin/`.
|
|
582
|
+
|
|
583
|
+
### Publicación
|
|
584
|
+
|
|
585
|
+
```bash
|
|
586
|
+
npm version patch|minor|major
|
|
587
|
+
npm publish
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
La librería se publica en el registry npm privado de Fiado configurado en `.npmrc`.
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
<div align="center">
|
|
595
|
+
|
|
596
|
+
**Fiado Inc.** | @fiado/api-invoker v1.5.34
|
|
597
|
+
|
|
598
|
+
</div>
|
|
599
|
+
|
|
600
|
+
|