{"_id":"@ap-dev/nestjs-events","_rev":"4-4fa27e430d6bb2110f0401c70f28b81d","name":"@ap-dev/nestjs-events","dist-tags":{"latest":"0.1.12"},"versions":{"0.0.2":{"name":"@ap-dev/nestjs-events","version":"0.0.2","keywords":["nestjs","events","typescript","library"],"author":{"name":"Your Name","email":"your.email@example.com"},"license":"MIT","_id":"@ap-dev/nestjs-events@0.0.2","maintainers":[{"name":"apadron","email":"alexpadron0195@gmail.com"}],"homepage":"https://github.com/your-username/nestjs-events#readme","bugs":{"url":"https://github.com/your-username/nestjs-events/issues"},"dist":{"shasum":"a0ae954ebeeb9b8dd15553c4933afac73aaa77b0","tarball":"https://registry.npmjs.org/@ap-dev/nestjs-events/-/nestjs-events-0.0.2.tgz","fileCount":21,"integrity":"sha512-/6ys4JQoc2D06lCake2r2r1ThloFTltFTFM5FsMhTJ9UZv/TsbQUyA6RJaswJKkUhqHGPUKKX8Cof9iDaPIe8A==","signatures":[{"sig":"MEQCIDSjcxc8lnc+/OFHrcfDTKaKZEMpdl2tyOqLJz1+7u4aAiAaI+M7vfsMSqGIUkj0TO6TnRIp1MneWxp4VsI5ozHxsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144594},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"jest","build":"tsc","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"apadron","email":"alexpadron0195@gmail.com"},"repository":{"url":"git+https://github.com/your-username/nestjs-events.git","type":"git"},"_npmVersion":"10.8.2","description":"A NestJS events library with RabbitMQ integration","directories":{},"_nodeVersion":"20.19.0","dependencies":{"amqplib":"^0.10.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.1.3","@types/jest":"^29.5.14","@types/node":"^20.3.1","@types/amqplib":"0.10.5","@nestjs/testing":"^10.0.0"},"peerDependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-events_0.0.2_1757949324760_0.3003248939807972","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@ap-dev/nestjs-events","version":"0.0.3","keywords":["nestjs","events","typescript","library"],"author":{"name":"Alexander Padron alex@ap4.dev>"},"license":"MIT","_id":"@ap-dev/nestjs-events@0.0.3","maintainers":[{"name":"apadron","email":"alexpadron0195@gmail.com"}],"homepage":"https://github.com/ap4-dev/lib-nestjs-events#readme","bugs":{"url":"https://github.com/ap4-dev/lib-nestjs-events/issues"},"dist":{"shasum":"1a8d96696d0ff9473882d8d4cd9ae373e849dbe5","tarball":"https://registry.npmjs.org/@ap-dev/nestjs-events/-/nestjs-events-0.0.3.tgz","fileCount":21,"integrity":"sha512-FitspGh01qaoVcBFwzBPtrhvBRN8XgY9T9N2flLifxIiaWqyMDfCLtAqRgJPRRYBFDrfATEAtSxk9Epap7tcLg==","signatures":[{"sig":"MEUCIBEYk//ZbGeSTKXN8DdkolpXn4eP8LpJ67+OiEQKjRN9AiEA6wA9JyAfEI7l2WDaqt9NNGfAURSBOmuzA4Q/y+Xo8VQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144584},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"150faad20ef40c68f6ba272bc9cdfe46d22b4c7e","scripts":{"test":"jest","build":"tsc","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"apadron","email":"alexpadron0195@gmail.com"},"repository":{"url":"git+https://github.com/ap4-dev/lib-nestjs-events.git","type":"git"},"_npmVersion":"10.8.2","description":"A NestJS events library with RabbitMQ integration","directories":{},"_nodeVersion":"20.19.0","dependencies":{"amqplib":"^0.10.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.1.3","@types/jest":"^29.5.14","@types/node":"^20.3.1","@types/amqplib":"0.10.5","@nestjs/testing":"^10.0.0"},"peerDependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-events_0.0.3_1757951490116_0.733157889855909","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@ap-dev/nestjs-events","version":"0.1.11","keywords":["nestjs","events","typescript","library"],"author":{"name":"Alexander Padron alex@ap4.dev>"},"license":"MIT","_id":"@ap-dev/nestjs-events@0.1.11","maintainers":[{"name":"apadron","email":"alexpadron0195@gmail.com"}],"homepage":"https://github.com/ap4-dev/lib-nestjs-events#readme","bugs":{"url":"https://github.com/ap4-dev/lib-nestjs-events/issues"},"dist":{"shasum":"5f537afcf8e347892b76880310d37c10532e33ff","tarball":"https://registry.npmjs.org/@ap-dev/nestjs-events/-/nestjs-events-0.1.11.tgz","fileCount":21,"integrity":"sha512-by+NqYTCBWo3mHIxaNPt27dltj8eyig2IPGBym74YQb6TENxzh68l4wTicTuyxYfH+mVEi9zWpD8kFcuQJ4Viw==","signatures":[{"sig":"MEUCIDFghNW1+nXVW/C4wdE0H2ZR4BOFoOJ6qfcuO8AzxC0/AiEAitBa6CAhJkmhNR2CjrqqVgP/zaX1ER8LvF+1rDs66EI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145158},"jest":{"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","collectCoverageFrom":["**/*.(t|j)s"],"moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1e92ec5c279cc7db78af9776e7c8afff86ca8a30","scripts":{"test":"jest","build":"tsc","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"apadron","email":"alexpadron0195@gmail.com"},"repository":{"url":"git+https://github.com/ap4-dev/lib-nestjs-events.git","type":"git"},"_npmVersion":"10.8.2","description":"A NestJS events library with RabbitMQ integration","directories":{},"_nodeVersion":"20.19.0","dependencies":{"amqplib":"^0.10.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.2.5","typescript":"^5.7.3","@types/jest":"^29.5.14","@types/node":"^20.3.1","@types/amqplib":"0.10.5","@nestjs/testing":"^11.0.1"},"peerDependencies":{"rxjs":"^7.8.1","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","reflect-metadata":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-events_0.1.11_1757953970499_0.006344069732140634","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@ap-dev/nestjs-events","version":"0.1.12","description":"A NestJS events library with RabbitMQ integration","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepublishOnly":"npm run build","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"keywords":["nestjs","events","typescript","library"],"author":{"name":"Alexander Padron alex@ap4.dev>"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ap4-dev/lib-nestjs-events.git"},"bugs":{"url":"https://github.com/ap4-dev/lib-nestjs-events/issues"},"homepage":"https://github.com/ap4-dev/lib-nestjs-events#readme","dependencies":{"amqplib":"^0.10.3"},"peerDependencies":{"@nestjs/common":"^11.0.1","@nestjs/core":"^11.0.1","reflect-metadata":"^0.1.13","rxjs":"^7.8.1"},"devDependencies":{"@nestjs/testing":"^11.0.1","@types/amqplib":"0.10.5","@types/jest":"^29.5.14","@types/node":"^20.3.1","jest":"^29.7.0","ts-jest":"^29.2.5","typescript":"^5.7.3"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".*\\.spec\\.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"collectCoverageFrom":["**/*.(t|j)s"],"coverageDirectory":"../coverage","testEnvironment":"node"},"publishConfig":{"access":"public"},"_id":"@ap-dev/nestjs-events@0.1.12","gitHead":"4288c434707a0c56f4a5c9ae2016d1afaab0d825","_nodeVersion":"20.19.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-O9zHRKcFfYyE0V6OuSMDhLNNq9651LDC/vecQD0a/RKF3j3z6+mScRLPOv1HevPL6iWwv+1XXDETc+YSLycstg==","shasum":"f642733e6cfe13eecb79cf44d759be4ef360fdae","tarball":"https://registry.npmjs.org/@ap-dev/nestjs-events/-/nestjs-events-0.1.12.tgz","fileCount":21,"unpackedSize":146369,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAjzR/Z5sysvWNnKbNn9SIn9ZrgclYJrmKGVUyUGCOanAiEAk0Ku5SHJlyb/k8SijJ53ctmlzuKWzWzmOF/Hi3DjJ+w="}]},"_npmUser":{"name":"apadron","email":"alexpadron0195@gmail.com"},"directories":{},"maintainers":[{"name":"apadron","email":"alexpadron0195@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-events_0.1.12_1757958655603_0.06122740667906368"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-15T15:15:24.646Z","modified":"2025-09-15T17:50:56.062Z","0.0.2":"2025-09-15T15:15:25.098Z","0.0.3":"2025-09-15T15:51:30.287Z","0.1.11":"2025-09-15T16:32:50.681Z","0.1.12":"2025-09-15T17:50:55.819Z"},"bugs":{"url":"https://github.com/ap4-dev/lib-nestjs-events/issues"},"author":{"name":"Alexander Padron alex@ap4.dev>"},"license":"MIT","homepage":"https://github.com/ap4-dev/lib-nestjs-events#readme","keywords":["nestjs","events","typescript","library"],"repository":{"type":"git","url":"git+https://github.com/ap4-dev/lib-nestjs-events.git"},"description":"A NestJS events library with RabbitMQ integration","maintainers":[{"name":"apadron","email":"alexpadron0195@gmail.com"}],"readme":"# NestJS Events Library\n\nUna librería de eventos para NestJS con soporte opcional para RabbitMQ que proporciona una interfaz simple y potente para el manejo de mensajería asíncrona.\n\n## Características\n\n- ✅ Integración nativa con NestJS\n- ✅ Soporte opcional para RabbitMQ\n- ✅ Configuración flexible (síncrona y asíncrona)\n- ✅ Interfaz única y consistente (EventsService)\n- ✅ Manejo de colas y exchanges\n- ✅ Consumo de mensajes con acknowledgments\n- ✅ Gestión automática de conexiones\n- ✅ Logging integrado\n- ✅ TypeScript con tipado completo\n- ✅ Fácil migración entre proveedores de mensajería\n\n## Instalación\n\n```bash\nnpm install @ap-dev/nestjs-events\n```\n\n## Configuración\n\n### Configuración Básica (sin RabbitMQ)\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { EventsModule } from '@ap-dev/nestjs-events';\n\n@Module({\n  imports: [\n    EventsModule.forRoot(), // Sin configuración = solo logging local\n  ],\n})\nexport class AppModule {}\n```\n\n### Configuración con RabbitMQ\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { EventsModule } from '@ap-dev/nestjs-events';\n\n@Module({\n  imports: [\n    EventsModule.forRoot({\n      rabbitmq: {\n        url: 'amqp://localhost:5672',\n        prefetch: 10,\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Configuración Asíncrona\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { ConfigModule, ConfigService } from '@nestjs/config';\nimport { EventsModule } from '@ap-dev/nestjs-events';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot(),\n    EventsModule.forRootAsync({\n      useFactory: async (configService: ConfigService) => ({\n        rabbitmq: {\n          url: configService.get<string>('RABBITMQ_URL', 'amqp://localhost:5672'),\n          prefetch: configService.get<number>('RABBITMQ_PREFETCH', 10),\n        },\n      }),\n      inject: [ConfigService],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n## Uso\n\n### Uso Básico\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { EventsService } from '@ap-dev/nestjs-events';\n\n@Injectable()\nexport class MyService {\n  constructor(private readonly eventsService: EventsService) {}\n\n  async sendUserCreatedEvent(user: any) {\n    // Emite un evento (se enviará a RabbitMQ si está configurado)\n    await this.eventsService.emitEvent('user.created', user);\n  }\n\n  async sendToSpecificQueue(data: any) {\n    // Envía directamente a una cola específica\n    await this.eventsService.sendToQueue('notifications', data);\n  }\n\n  async publishToExchange(data: any) {\n    // Publica a un exchange con routing key\n    await this.eventsService.publishToExchange('user-events', 'user.updated', data);\n  }\n\n  async checkConnection() {\n    // Verifica si RabbitMQ está habilitado y conectado\n    const isEnabled = this.eventsService.isRabbitMQEnabled();\n    const isConnected = this.eventsService.isConnected();\n    \n    console.log(`RabbitMQ enabled: ${isEnabled}, connected: ${isConnected}`);\n  }\n}\n```\n\n### Configuración de Infraestructura\n\n```typescript\nimport { Injectable, OnModuleInit } from '@nestjs/common';\nimport { EventsService } from '@ap-dev/nestjs-events';\n\n@Injectable()\nexport class InfrastructureService implements OnModuleInit {\n  constructor(private readonly eventsService: EventsService) {}\n\n  async onModuleInit() {\n    if (this.eventsService.isRabbitMQEnabled()) {\n      await this.setupInfrastructure();\n    }\n  }\n\n  private async setupInfrastructure() {\n    // Crear exchange\n    await this.eventsService.createExchange('user-events', {\n      type: 'topic',\n      durable: true,\n    });\n\n    // Crear cola\n    await this.eventsService.createQueue('user-notifications', {\n      durable: true,\n      arguments: { 'x-message-ttl': 60000 },\n    });\n\n    // Vincular cola al exchange con routing key\n    await this.eventsService.bindQueueToExchange(\n      'user-notifications',\n      'user-events',\n      'user.*'\n    );\n  }\n}\n```\n\n### Consumo de Mensajes\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { EventsService } from '@ap-dev/nestjs-events';\n\n@Injectable()\nexport class ConsumerService {\n  constructor(private readonly eventsService: EventsService) {}\n\n  async startConsumer() {\n    if (!this.eventsService.isConnected()) {\n      console.log('RabbitMQ not connected, skipping consumer setup');\n      return;\n    }\n\n    // Consumir mensajes\n    const consumerTag = await this.eventsService.consume(\n      'user-notifications',\n      (message, ack, nack) => {\n        try {\n          console.log('Received:', message.content);\n          ack(); // Confirmar procesamiento\n        } catch (error) {\n          console.error('Error processing message:', error);\n          nack(true); // Rechazar y reencolar\n        }\n      },\n      { noAck: false }\n    );\n\n    console.log('Consumer started with tag:', consumerTag);\n  }\n}\n```\n\n## Ejemplos de Configuración\n\n### Variables de Entorno\n\n```bash\n# .env\nRABBITMQ_URL=amqp://user:password@localhost:5672\nRABBITMQ_QUEUE=events\nRABBITMQ_EXCHANGE=app-events\nRABBITMQ_ROUTING_KEY=app\n```\n\n### Configuración con Docker\n\n```yaml\n# docker-compose.yml\nversion: '3.8'\nservices:\n  rabbitmq:\n    image: rabbitmq:3-management\n    ports:\n      - \"5672:5672\"\n      - \"15672:15672\"\n    environment:\n      RABBITMQ_DEFAULT_USER: admin\n      RABBITMQ_DEFAULT_PASS: password\n```\n\n## Interfaces Disponibles\n\n```typescript\ninterface RabbitMQConfig {\n  url: string;\n  queue?: string;\n  exchange?: string;\n  routingKey?: string;\n  exchangeType?: 'direct' | 'topic' | 'fanout' | 'headers';\n  durable?: boolean;\n  persistent?: boolean;\n  prefetch?: number;\n}\n\ninterface MessageOptions {\n  queue?: string;\n  exchange?: string;\n  routingKey?: string;\n  persistent?: boolean;\n  priority?: number;\n  expiration?: string;\n  headers?: Record<string, any>;\n}\n```\n\n## Desarrollo\n\n### Construir la librería\n\n```bash\nnpm run build\n```\n\n### Ejecutar tests\n\n```bash\nnpm test\n```\n\n### Publicar\n\n```bash\nnpm publish\n```\n\n## Licencia\n\nMIT","readmeFilename":"README.md"}