@fiado/api-invoker

中文文档
5.174.0发布于 2026/11/14ISCTypeScriptES Module近 30 天下载 1.1万

Sirve como un puente entre diferentes funciones lambda, facilitando la comunicación entre ellas a través de invocaciones http

原始使用文档
文档目录45 节
  1. Librería de Comunicación Inter-Servicios para Microservicio…
  2. Tabla de Contenidos
  3. Descripción General
  4. Propósito
  5. Arquitectura
  6. Patrones de Comunicación
  7. Instalación
  8. Peer Dependencies
  9. Configuración
  10. Registro en el Contenedor IoC
  11. Importación de Interfaces
  12. APIs Disponibles
  13. Servicios Core
  14. Servicios de Cuenta
  15. Servicios de Pago
  16. Servicios de Tarjeta
  17. Servicios de Riesgo y Fraude
  18. Servicios de Onboarding
  19. Servicios de Comunicación
  20. Servicios de Negocio
  21. Servicios Auxiliares
  22. Integraciones Externas
  23. Publishers (Colas SQS)
  24. Ejemplo de Publisher
  25. Uso en Proyectos
  26. Ejemplo: Consultar Directorio
  27. Ejemplo: Procesar Transacción
  28. Ejemplo: Verificación de Identidad
  29. Variables de Entorno
  30. Configuración en template.yml
  31. Resolución de URLs
  32. Estructura del Proyecto
  33. Estructura de un Módulo API
  34. Estructura de un Módulo con Queue
  35. Convenciones de Desarrollo
  36. Nomenclatura
  37. Patrón de Implementación API
  38. Patrón de Implementación Publisher
  39. Header operationName
  40. Dependencias
  41. Runtime
  42. Desarrollo
  43. Compilación y Publicación
  44. Build
  45. Publicación

🔗 Fiado API Invoker

Librería de Comunicación Inter-Servicios para Microservicios Lambda

npm TypeScript AWS Lambda InversifyJS


Tabla de Contenidos


Descripción General

@fiado/api-invoker es una librería empresarial que actúa como puente de comunicación entre microservicios Lambda dentro del ecosistema Fiado. Proporciona:

  • Clientes HTTP tipados para invocar APIs privadas de otros Lambdas
  • Publishers SQS para comunicación asíncrona mediante colas
  • Inyección de dependencias integrada con InversifyJS
  • Abstracción de complejidad de configuración y manejo de errores

Propósito

En una arquitectura de microservicios, cada Lambda expone una API privada accesible únicamente desde la VPC. Esta librería encapsula:

  1. La construcción de URLs base desde variables de entorno
  2. El manejo de headers y operaciones HTTP
  3. La serialización/deserialización de payloads
  4. La publicación de mensajes a colas SQS

Arquitectura

┌─────────────────────────────────────────────────────────────────────────┐
│                         LAMBDA CONSUMIDOR                                │
│                                                                          │
│  ┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐  │
│  │   Manager/       │───▶│  @fiado/         │───▶│  @fiado/         │  │
│  │   Service        │    │  api-invoker     │    │  http-client     │  │
│  └──────────────────┘    └──────────────────┘    └──────────────────┘  │
│                                   │                        │            │
└───────────────────────────────────┼────────────────────────┼────────────┘
                                    │                        │
                    ┌───────────────┴───────────────┐        │
                    ▼                               ▼        ▼
            ┌──────────────┐                ┌──────────────────┐
            │   AWS SQS    │                │  API Gateway     │
            │   (Queues)   │                │  (Private VPC)   │
            └──────────────┘                └──────────────────┘
                    │                               │
                    ▼                               ▼
            ┌──────────────┐                ┌──────────────────┐
            │   Lambda     │                │   Lambda         │
            │   Subscriber │                │   Target         │
            └──────────────┘                └──────────────────┘

Patrones de Comunicación

PatrónImplementaciónUso
SíncronoHTTP via API Gateway privadoConsultas, operaciones CRUD
AsíncronoSQS PublishersEventos, notificaciones, procesos batch

Instalación

npm install @fiado/api-invoker @fiado/http-client

Peer Dependencies

La librería requiere las siguientes dependencias en el proyecto consumidor:

{
  "@fiado/http-client": "^1.0.7",
  "@fiado/logger": "^1.0.3",
  "@fiado/type-kit": "^2.1.28",
  "inversify": "^6.2.2",
  "reflect-metadata": "^0.2.2"
}

Configuración

Registro en el Contenedor IoC

La librería exporta un ContainerModule de InversifyJS que registra automáticamente todos los clientes API y publishers:

import { Container } from "inversify";
import { IHttpRequest, AxiosHttpRequest } from "@fiado/http-client";
import { apiInvokerBindings } from "@fiado/api-invoker";

const container = new Container();

// 1. Cargar bindings de api-invoker (registra todos los clientes)
container.load(apiInvokerBindings);

// 2. Registrar el cliente HTTP (requerido por los clientes API)
container.bind<IHttpRequest>("IHttpRequest").to(AxiosHttpRequest);

export { container };

Importación de Interfaces

// Importar interfaces específicas
import { 
    IDirectoryApi, 
    IIdentityApi, 
    ITransactionApi,
    INotificationMessagesPublisher 
} from "@fiado/api-invoker";

APIs Disponibles

La librería proporciona clientes para 60+ microservicios del ecosistema Fiado:

Servicios Core

InterfaceDescripciónVariable de Entorno
IDirectoryApiGestión de directorios de usuariosDIRECTORY_LAMBDA_URL
IIdentityApiVerificación de identidadIDENTITY_LAMBDA_URL
IAuthenticationApiAutenticación y tokensAUTHENTICATION_LAMBDA_URL
ITransactionApiProcesamiento de transaccionesTRANSACTION_LAMBDA_URL

Servicios de Cuenta

InterfaceDescripciónVariable de Entorno
IAccountFiadoIncApiCuentas Fiado IncACCOUNT_FIADOINC_LAMBDA_URL
IAccountFiadoSAApiCuentas Fiado SAACCOUNT_FIADOSA_LAMBDA_URL
IAccountPagoConfiadoApiCuentas PagoConfiadoACCOUNT_PAGOCONFIADO_LAMBDA_URL
IAccountBeneficiaryApiBeneficiarios de cuentasACCOUNT_BENEFICIARY_LAMBDA_URL
IBankAccountApiCuentas bancariasBANK_ACCOUNT_LAMBDA_URL

Servicios de Pago

InterfaceDescripciónVariable de Entorno
IStpSpeiApiTransferencias SPEISTP_SPEI_LAMBDA_URL
IStpServicePaymentApiPagos de servicios STPSTP_SERVICE_PAYMENT_LAMBDA_URL
ICentralPaymentsConnectorApiConector de pagos centralCENTRAL_PAYMENTS_LAMBDA_URL
ICollectorApiCobranzaCOLLECTOR_LAMBDA_URL

Servicios de Tarjeta

InterfaceDescripciónVariable de Entorno
ICardApiGestión de tarjetasCARD_LAMBDA_URL
IPomeloApiIntegración PomeloPOMELO_LAMBDA_URL
IPomeloProcessorApiProcesador PomeloPOMELO_PROCESSOR_LAMBDA_URL

Servicios de Riesgo y Fraude

InterfaceDescripciónVariable de Entorno
IRiskProfileApiPerfiles de riesgoRISK_PROFILE_LAMBDA_URL
IFraudPreventionEngineApiMotor antifraudeFRAUD_PREVENTION_LAMBDA_URL
IBlackListApiListas negrasBLACKLIST_LAMBDA_URL
ITransactionAlertApiAlertas de transaccionesRISK_PROFILE_LAMBDA_URL

Servicios de Onboarding

InterfaceDescripciónVariable de Entorno
IOnboardingApiOnboarding de usuariosONBOARDING_LAMBDA_URL
IOnboardingBusinessApiOnboarding de negociosONBOARDING_BUSINESS_LAMBDA_URL
ICnbvApiIntegración CNBVCNBV_BUSINESS_LAMBDA_URL

Servicios de Comunicación

InterfaceDescripciónVariable de Entorno
IFiadoMessagesApiMensajería internaFIADO_MESSAGES_LAMBDA_URL
IFirebaseConnectorApiPush notificationsFIREBASE_CONNECTOR_LAMBDA_URL
IZendeskApiIntegración ZendeskZENDESK_LAMBDA_URL

Servicios de Negocio

InterfaceDescripciónVariable de Entorno
IActivityApiActividades de negocioACTIVITY_BUSINESS_LAMBDA_URL
IServiceApiServicios de negocioSERVICE_BUSINESS_LAMBDA_URL
IPriceListApiListas de preciosPRICELIST_BUSINESS_LAMBDA_URL
IPayrollApiNóminaPAYROLL_BUSINESS_LAMBDA_URL
IOrderCollectorApiÓrdenes de cobranzaORDER_COLLECTOR_LAMBDA_URL

Servicios Auxiliares

InterfaceDescripciónVariable de Entorno
IAddressApiDireccionesADDRESS_LAMBDA_URL
IContactInformationApiInformación de contactoCONTACT_INFORMATION_LAMBDA_URL
IDeviceApiDispositivosDEVICE_LAMBDA_URL
IGroupApiGruposGROUP_LAMBDA_URL
IP2pContactApiContactos P2PP2P_CONTACT_LAMBDA_URL
IExchangeRatesApiTipos de cambioEXCHANGE_RATES_LAMBDA_URL
IProductCatalogApiCatálogo de productosPRODUCT_CATALOG_LAMBDA_URL
IContractGeneratorApiGenerador de contratosCONTRACT_GENERATOR_LAMBDA_URL
IDocumentImageProcessorApiProcesador de imágenesDOCUMENT_IMAGE_PROCESSOR_LAMBDA_URL
ILegalDocumentApiDocumentos legalesLEGAL_DOCUMENT_LAMBDA_URL
IObservationsApiObservacionesOBSERVATIONS_LAMBDA_URL
IDirectoriesApiDirectorios múltiplesDIRECTORIES_LAMBDA_URL
IDirectorySettingApiConfiguración de directorioDIRECTORY_SETTING_LAMBDA_URL
IAppSelectionDataApiDatos de selección de appAPP_SELECTION_DATA_LAMBDA_URL
IReferralBusinessApiReferidosREFERRAL_BUSINESS_LAMBDA_URL
IEventHistoryApiHistorial de eventosEVENT_HISTORY_LAMBDA_URL
IReportProcessorBusinessApiProcesador de reportesREPORT_PROCESSOR_LAMBDA_URL
IPeopleBusinessApiGestión de personasPEOPLE_BUSINESS_LAMBDA_URL

Integraciones Externas

InterfaceDescripciónVariable de Entorno
ITernApiIntegración TernTERN_LAMBDA_URL
IBBVARstApiIntegración BBVA RSTBBVA_RST_LAMBDA_URL
IEstafetaApiIntegración EstafetaESTAFETA_LAMBDA_URL
ICognitoConnectorApiConector CognitoCOGNITO_CONNECTOR_LAMBDA_URL
ICognitoV2ApiCognito V2COGNITO_CONNECTOR_LAMBDA_URL
ISTPAccountApiCuentas STPSTP_ACCOUNT_LAMBDA_URL

Publishers (Colas SQS)

Para comunicación asíncrona, la librería provee publishers que envían mensajes a colas SQS:

InterfaceDescripciónVariable de Entorno (Queue)
INotificationMessagesPublisherNotificaciones push/email/smsNOTIFICATION_MESSAGES_QUEUE
INotificationWSMessagesPublisherNotificaciones WebSocketNOTIFICATION_WS_QUEUE
ISessionActivityPublisherActividad de sesiónSESSION_ACTIVITY_QUEUE
ITransactionPublisherEventos de transacciónTRANSACTION_QUEUE
IActivityPublisherEventos de actividadACTIVITY_QUEUE
ITransactionAlarmPublisherAlarmas de transacciónTRANSACTION_ALARM_QUEUE
IGsfSyncPublisherAlta del crédito y pagos hacia GSF (GsfSyncQueue.fifo)GSF_SYNC_QUEUE_URL
IPublisherPublisher genéricoConfigurable

Ejemplo de Publisher

import { inject, injectable } from "inversify";
import { INotificationMessagesPublisher } from "@fiado/api-invoker";
import { NotificationQueueMessageRequest } from "@fiado/type-kit";

@injectable()
export class NotificationService {
    constructor(
        @inject("INotificationMessagesPublisher") 
        private notificationPublisher: INotificationMessagesPublisher
    ) {}

    async sendPushNotification(userId: string, message: string): Promise<void> {
        const notification: NotificationQueueMessageRequest = {
            userId,
            type: "PUSH",
            message,
            timestamp: new Date().toISOString()
        };
        
        await this.notificationPublisher.publish(notification);
    }
}

Uso en Proyectos

Ejemplo: Consultar Directorio

import { inject, injectable } from "inversify";
import { IDirectoryApi } from "@fiado/api-invoker";
import { log } from "@fiado/logger";

@injectable()
export class UserService {
    constructor(
        @inject("IDirectoryApi") private directoryApi: IDirectoryApi
    ) {}

    async getUsersByIds(directoryIds: string[]): Promise<any[]> {
        try {
            const response = await this.directoryApi.getByIds(directoryIds);
            log.info("Directories fetched successfully", { count: response.length });
            return response;
        } catch (error) {
            log.error("Error fetching directories", error);
            throw error;
        }
    }

    async getUserByPhone(phoneNumber: string): Promise<any> {
        return await this.directoryApi.getByPhoneNumber(phoneNumber);
    }
}

Ejemplo: Procesar Transacción

import { inject, injectable } from "inversify";
import { ITransactionApi, ITransactionPublisher } from "@fiado/api-invoker";

@injectable()
export class PaymentManager {
    constructor(
        @inject("ITransactionApi") private transactionApi: ITransactionApi,
        @inject("ITransactionPublisher") private transactionPublisher: ITransactionPublisher
    ) {}

    async processPayment(paymentData: any): Promise<void> {
        // 1. Crear transacción via API síncrona
        const transaction = await this.transactionApi.create(paymentData);
        
        // 2. Publicar evento para procesamiento asíncrono
        await this.transactionPublisher.publish({
            transactionId: transaction.id,
            event: "PAYMENT_INITIATED",
            timestamp: new Date().toISOString()
        });
    }
}

Ejemplo: Verificación de Identidad

import { inject, injectable } from "inversify";
import { IIdentityApi, IRiskProfileApi } from "@fiado/api-invoker";

@injectable()
export class KYCService {
    constructor(
        @inject("IIdentityApi") private identityApi: IIdentityApi,
        @inject("IRiskProfileApi") private riskProfileApi: IRiskProfileApi
    ) {}

    async verifyUser(directoryId: string, documents: any): Promise<boolean> {
        // Verificar identidad
        const identityResult = await this.identityApi.verify(directoryId, documents);
        
        // Evaluar perfil de riesgo
        const riskProfile = await this.riskProfileApi.evaluate(directoryId);
        
        return identityResult.verified && riskProfile.score < 0.5;
    }
}

Variables de Entorno

Cada cliente API requiere una variable de entorno con la URL base del Lambda destino. El formato estándar es:

{SERVICE_NAME}_LAMBDA_URL=https://{api-id}.execute-api.{region}.amazonaws.com/v1/

Configuración en template.yml

Environment:
  Variables:
    DIRECTORY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-directory-lambda}}"
    IDENTITY_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-identity-lambda}}"
    TRANSACTION_LAMBDA_URL: !Sub "{{resolve:ssm:fiado-transaction-lambda}}"
    # ... otras URLs
    
    # Colas SQS
    NOTIFICATION_MESSAGES_QUEUE: !ImportValue SqsNotificationMessagesQueueUrl
    SESSION_ACTIVITY_QUEUE: !ImportValue SqsSessionActivityQueueUrl

Resolución de URLs

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.


Estructura del Proyecto

src/
├── index.ts                    # Exportaciones públicas
├── container.config.ts         # ContainerModule con todos los bindings
├── utils/                      # Utilidades compartidas
│   └── InvokerUtils.ts
│
├── directory/                  # Ejemplo de estructura de módulo
│   ├── index.ts               # Re-exportaciones del módulo
│   ├── DirectoryApi.ts        # Implementación del cliente
│   └── interfaces/
│       └── IDirectoryApi.ts   # Interface del cliente
│
├── transaction/               # Módulo con API y Publisher
│   ├── index.ts
│   ├── api/
│   │   ├── TransactionApi.ts
│   │   └── ITransactionApi.ts
│   └── queue/
│       ├── TransactionPublisher.ts
│       └── ITransactionPublisher.ts
│
├── notificationMessages/      # Módulo solo Publisher
│   ├── index.ts
│   └── queue/
│       ├── NotificationMessagePublisher.ts
│       └── interfaces/
│           └── INotificationMessagesPublisher.ts
│
└── [60+ módulos adicionales...]

Estructura de un Módulo API

{service-name}/
├── index.ts                   # export * from './interfaces/I{Service}Api';
│                              # export * from './{Service}Api';
├── {Service}Api.ts            # Implementación @injectable()
└── interfaces/
    └── I{Service}Api.ts       # Interface con JSDoc

Estructura de un Módulo con Queue

{service-name}/
├── index.ts
├── api/
│   ├── {Service}Api.ts
│   └── I{Service}Api.ts
└── queue/
    ├── {Service}Publisher.ts
    └── interfaces/
        └── I{Service}Publisher.ts

Convenciones de Desarrollo

Nomenclatura

ElementoPatrónEjemplo
Carpeta de módulokebab-caseaccount-fiadoinc/
Interface APII{Service}ApiIDirectoryApi
Implementación API{Service}ApiDirectoryApi
Interface PublisherI{Service}PublisherITransactionPublisher
Implementación Publisher{Service}PublisherTransactionPublisher

Patrón de Implementación API

import dotenv from 'dotenv';
import { inject, injectable } from "inversify";
import { IHttpRequest } from "@fiado/http-client";
import { I{Service}Api } from "./interfaces/I{Service}Api";
dotenv.config();

@injectable()
export class {Service}Api implements I{Service}Api {
    
    private readonly baseUrl = process.env.{SERVICE}_LAMBDA_URL || "";

    constructor(
        @inject("IHttpRequest") private httpRequest: IHttpRequest
    ) {}

    public async getById(id: string): Promise<any> {
        const url = `${this.baseUrl}?id=${id}`;
        const operationName = "getById";
        
        return await this.httpRequest.get(url, null, { 
            'operationName': operationName 
        });
    }
}

Patrón de Implementación Publisher

import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
import { inject, injectable } from "inversify";
import { I{Service}Publisher } from "./interfaces/I{Service}Publisher";

@injectable()
export class {Service}Publisher implements I{Service}Publisher {
    
    private readonly queueUrl = process.env.{SERVICE}_QUEUE;

    async publish(message: any): Promise<void> {
        const client = new SQSClient();
        const command = new SendMessageCommand({
            QueueUrl: this.queueUrl,
            MessageBody: JSON.stringify(message)
        });
        await client.send(command);
    }
}

Header operationName

Todas las llamadas HTTP incluyen el header operationName que permite:

  • Trazabilidad en logs
  • Métricas por operación
  • Debugging en X-Ray

Dependencias

Runtime

DependenciaVersiónPropósito
@aws-sdk/client-sqs^3.919.0Cliente SQS para publishers
@fiado/gateway-adapter^1.1.50Tipos de respuesta API
@fiado/http-client^1.0.7Cliente HTTP base
@fiado/logger^1.0.3Logging estructurado
@fiado/type-kit^2.1.28DTOs y tipos compartidos
inversify^6.2.2Inyección de dependencias
reflect-metadata^0.2.2Metadatos para decoradores
dotenv^16.4.7Variables de entorno

Desarrollo

DependenciaVersiónPropósito
@types/node^20.17.24Tipos de Node.js
typescript(peer)Compilador TypeScript

Compilación y Publicación

Build

npm run build

Genera archivos .js y .d.ts en el directorio bin/.

Publicación

npm version patch|minor|major
npm publish

La librería se publica en el registry npm privado de Fiado configurado en .npmrc.


Fiado Inc. | @fiado/api-invoker v1.5.34

版本与发布记录

@fiado/api-invoker 共发布 779 个版本,首次发布于 2024/03/28;过去 12 个月发布了 370 个版本。

版本发布日期距今
5.174.0latest2026/11/14今天
5.173.02026/11/122 天前
5.172.02026/11/122 天前
5.171.02026/11/113 天前
5.170.02026/11/104 天前
5.169.02026/11/104 天前

其他发布通道:legacy-v6 → 3.18.1。

关于 @fiado/api-invoker 的常见问题

@fiado/api-invoker 是什么?

Sirve como un puente entre diferentes funciones lambda, facilitando la comunicación entre ellas a través de invocaciones http

如何安装 @fiado/api-invoker?

在项目目录运行 npm install @fiado/api-invoker,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:inversify(^8.0.0)、reflect-metadata(^0.2.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@fiado/api-invoker 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fiado/api-invoker 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fiado/api-invoker 可以商用吗?

@fiado/api-invoker 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fiado/api-invoker 的下载量有多少?

根据 npm 官方下载统计,@fiado/api-invoker 在 2026/10/15 – 2026/11/13 这 30 天内被下载 11,224 次,日均约 374 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fiado/api-invoker 还在维护吗?

最新版本 5.174.0 发布于 2026/11/14(今天);至今共发布 779 个版本,其中过去 12 个月发布了 370 个;首次发布于 2024/03/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。