npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

fiscalia_bo-nest-helpers

v1.6.3

Published

Helpers y servicios para NestJS

Downloads

1,574

Readme

Descripción

Este proyecto esta orientado a la publicación de helpers básicos al momento de iniciar un proyecto nuevo de NESTJS.

De momento se tienen los siguientes servicios:

  • MS-FILES: Para su uso debe tener la variable de entorno "ENV_SERVICE_MS_FILES_URL='url del entorno de ms-files'"

test con wrk

wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types

wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types/tcp

wrk -t10 -c400 -d15s http://172.27.39.12:3015/v1/application/types/grpc

Compilación antes de publicar

$ tsc

Instalación

$ yarn add fiscalia_bo-nest-helpers

importar servicios

import { MsFilesService } from 'fiscalia_bo-nest-helpers/dist/modules/ms-files';

variables de entorno obligatorios

ENV_SERVICE_MS_FILES_URL='https://ms-files.url'

USO DEL MODULO MS-SEGURIDAD

El módulo MsSeguridadModule proporciona una manera fácil de comunicarse con un servicio de seguridad a través de gRPC.

Modulos disponibles

  • MsSeguridadModule

MsSeguridadModule

para utilizar el servicio de seguridad es necesario importar el modulo MsSeguridadModule

Configuración

Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:

  • ENV_APP_NAME: el el codigo de la aplicacion registrado en rrhh.
  • ENV_GRPC_MS_SEGURIDAD: la URL del servidor de seguridad a través de gRPC.
  • ENV_GRPC_MS_REDIS_CACHE: la URL del servidor de cacheo de redis a través de gRPC.

Uso

Para utilizar el módulo, primero importe MsSeguridadModule en su módulo principal:

import { Module } from '@nestjs/common';
import { MsSeguridadModule } from 'fiscalia_bo-nest-helpers/dist/modules/ms-seguridad';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),

    // Register ms-seguridad module global
    MsSeguridadModule.register({
      global: true,
      applicationCodeTag: process.env.ENV_APP_NAME,
      urlSeguridad: process.env.ENV_GRPC_MS_SEGURIDAD,
      // parametros redis
      urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE,
      tcpHostMsRedis: '127.0.0.1',
      tcpPortMsRedis: 8000,
      // Todos los parametros de redis son opcionales pero necesita o el de grpc o los de tcp para funcionar
      tcpHostMsRedis: '127.0.0.1',
      tcpPortMsRedis: 8000,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

NOTA IMPORTANTE: previo al uso del modulO debe importarse el ConfigModule de nestjs y configurarlo para uso global

NOTA IMPORTANTE: si se agrega el parametro applicationCodeTag en ModuleSeguridad entonces se validara que el el token con process.env.ENV_APP_NAME de la applicacion

En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona

decoradores disponibles para controller

  • @BearerAuthPermision(), decorador auth que realiza 3 verificaciones antes de entrar a un controller.

    • verifica automaticamente que existe token bearer en el header de la peticion
    • verifica que el token se válido
    • Si este decorador recibe permisos por parametro entonces verifica que cumpla con todos los permisos indicados por parametro
  • @AuthUser(), decorador para obtener los datos del token como ser:

    • ci: string;
    • aplicacionId: number;
    • usuarioId: number;
    • msPersonaId: number;
    • perfilPersonaId: number;
    • funcionarioId?: number;
    • oficinaId?: number;
    • municipioId?: number;
    • institucionId?: number;
    • departamentoId?: number;
  • @AuthToken(), decorador para obtener el token de tipo string

  • @AuthPermissions(), decorador para obtener la lista de permisos, devuelve array de string.

ejempos de uso:

  // EJEMPLO 1
  @Get(':id')
  @BearerAuthPermision()
  findOne(@Param('id') id: number) {
    return this.casosPersonaService.findOne(+id);
  }

  // EJEMPLO 2
  @Post('test-seguridad')
  @BearerAuthPermision(['ALGUN_PERMISOS'])
  async test(
    @Body() body: TokenBody,
    @AuthUser() user: UserPayload, //  controlador
    @AuthToken() token: string,
    @AuthPermissions() permissions: string[],
  ) {
    return {
      some: 'algo',
    };
  }

MsSeguridadConvenioModule

para utilizar el servicio de seguridad es necesario importar el modulo MsSeguridadConvenioModule

Configuración

Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:

  • ENV_GRPC_MS_SEGURIDAD: la URL del servidor de seguridad a través de gRPC.

Uso

Para utilizar el módulo, primero importe MsSeguridadConvenioModule en su módulo principal:

import { Module } from '@nestjs/common';
import { MsSeguridadConvenioModule } from 'fiscalia_bo-nest-helpers/seguridad';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    // Register ms-seguridad-convenio module global
    MsSeguridadConvenioModule.register({
      global: true,
      urlSeguridad: process.env.ENV_GRPC_MS_SEGURIDAD,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

NOTA IMPORTANTE: previo al uso del modulO debe importarse el ConfigModule de nestjs y configurarlo para uso global

En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona

decoradores disponibles para controller

  • @BearerConvenioPermision, decorador auth que realiza 3 verificaciones antes de entrar a un controller.

    • verifica automaticamente que existe token bearer en el header de la peticion
    • verifica que el token se válido
    • Si este decorador recibe permisos por parametro entonces verifica que cumpla con todos los permisos indicados por parametro
  • @GetTokenConvenio(), decorador para obtener los datos del token:

  • @ConvenioToken(), decorador para obtener el token de tipo string

  • @ConvenioPermissions(), decorador para obtener la lista de permisos, devuelve array de string.

ejempos de uso:

  // EJEMPLO 1
  @Get(':id')
  @BearerConvenioPermision()
  findOne(@Param('id') id: number) {
    return {
      some: 'retornando servicio sin permiso pero con token valido'
    };
  }

  // EJEMPLO 2
  @Post('test-seguridad')
  @BearerConvenioPermision(['ALGUN_PERMISOS'])
  async test(
    @Body() body: TokenBody,
    @ConvenioToken() user: UserPayload, //  controlador
    @AuthToken() token: string,
    @GetTokenConvenio() permissions: string[],
  ) {
    return {
      some: 'retornando servicio con permiso',
    };
  }

USO DEL SERVICIO MS-REDISz

Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas:

  • ENV_GRPC_MS_REDIS_CACHE: la URL del servidor de cacheo de redis a través de gRPC.

Uso

Para utilizar el módulo, primero importe MsRedisModule en su módulo principal:

import { Module } from '@nestjs/common';
import { MsRedisModule } from 'fiscalia_bo-nest-helpers/seguridad';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),

    // Register ms-seguridad module global
    MsRedisModule.register({
      urlRedisCache: process.env.ENV_GRPC_MS_REDIS_CACHE || '',
      tcpHostMsRedis: '127.0.0.1',
      tcpPortMsRedis: 8000,
      // Todos los parametros de redis son opcionales pero necesita o el de grpc o los de tcp para funcionar
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Configuracion de Paquete en el archivo my.montroller.ts

import { DatapassInterceptor } from 'ms-redis-cliente'

 @Get('/my-rest-api')
 //db: es la base de datos en la cual se trabajara es opcional por defecto se guarda en la 0
 @SetMetadata("data-cache", {key:"key-name-cache",ttl:15,db:0})
 @UseInterceptors(DatapassInterceptor)
 /*Configuracion de Res() obligatoria
    { passthrough: true }
 Configuracion de Res() obligatoria*/
 async myRestApi(@Res({ passthrough: true }) res) {
    try {
        /*Configuracion de respuesta obligatoria*/
        const getResponse = await this.appService.getRestApiTWo()
        return getResponse
        /*Configuracion de respuesta obligatoria*/
    } catch (error) {
        /*Configuracion de respuesta de error obligatoria*/
        throw error
    }
 }

Servicios disponibles

  • MsRedisService

Nomenclatura de asignacion de key para redis

aplicacion-name:key_One-key_Two-key_Three-keyAcction

ejemplo de asignacion de key para redis

const keyCache = `ms-seguridad:usuarioId_${usuarioId}-aplicacionId_${aplicacionId}-permisos`;

USO DEL MODULO MS-PERSONAS

El módulo MsPersonasModule proporciona una manera fácil de comunicarse con un servicio de ms-personas a través de http.

Modulos disponibles

  • MsPersonasModule

Servicios disponibles

  • MsPersonasService

para utilizar el servicio de personas es necesario importar el modulo MsPersonasModule

Configuración

Antes de utilizar el módulo, asegúrese de tener las siguientes variables de entorno configuradas o enviar la variable de entorno definida:

  • ENV_SERVICE_MS_PERSONAS: la URL del servidor de seguridad a través de gRPC.

Uso

Para utilizar el módulo, primero importe MsPersonasModule en su módulo principal:

import { Module } from '@nestjs/common';
import { MsPersonasModule } from 'fiscalia_bo-nest-helpers/dist/ms-personas';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),

    // Register ms-personas module global
    MsPersonasModule.register({
      global: true,
      urlMsPersonas: process.env.ENV_SERVICE_MS_PERSONAS,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

NOTA IMPORTANTE: previo al uso del modulO debe importarse el ConfigModule de nestjs y configurarlo para uso global

En este ejemplo, estamos utilizando el método register para cargar la configuración de forma síncrona

USO DEL MODULO MS-RABBITMQ

Configuracion de Paquete en el archivo app.module.ts

import { MsRabbitModule } from 'fiscalia_bo-nest-helpers';
@Module({
  imports: [
    MsRabbitModule.register({
      global: true,
      urlRabbit: process.env.ENV_SERVICE_MS_RABBIT_URL,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Configuracion para escuchar un canal especifico de rabbit

import { MsRabbitService } from 'fiscalia_bo-nest-helpers';
@Injectable()
export class AppService {
  constructor(private readonly msRabbitService: MsRabbitService) {}
  async onModuleInit() {
    try {
      await this.msRabbitService.listenQueueMsRabbit(
        { virtualhost: 'blade_host_virtual', queueListen: 'tasks' },
        (error, result) => {
          if (error) {
            console.error(error);
          } else {
            console.log('>>>', result);
          }
        },
      );
    } catch (error) {
      console.error(error);
    }
  }
}

Parametros para utilizar el metodo listenQueueMsRabbit

| Propiedad | Valor | Descripcion | | ----------- | ------------- | -------------------------------------------------------------------------------------- | | virtualHost | String (null) | Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete | | queueListen | String (null) | El canal o queue que desea que escuchar y recibir datos | | callback | Function | Campo necesario para pode recibir en el callback los datos transmitidos |

Parametros para utilizar el metodo senderQueueMsRabbit

Se pueden utilizar el servicio

Debe realizar la configuracion de Paquete en su archivo my.service.ts

import { RabbitServiceClient } from 'ms-rabbit-cliente';

@Injectable()
export class AppService {
  constructor(private rabbitServiceClient: RabbitServiceClient) {}

  async MyService() {
    await this.msRabbitService.senderQueueMsRabbit(
      { virtualhost: 'blade_host_virtual', queueListen: 'tasks' },
      JSON.stringify({ a: 'holamundo' }),
    );
  }
}

Descripcion de los objecto para envio de datos

| Propiedad | Valor | Descripcion | | ----------- | ------------- | -------------------------------------------------------------------------------------- | | virtualHost | String (null) | Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete | | queueListen | String (null) | El canal o queue que desea transmitir datos | | data | String | Campo necesario para enviar datos en formato Json String |

USO DEL MODULO MS-LOGS

Configuracion de Paquete en el archivo app.module.ts

import { MsLogsModule } from 'fiscalia_bo-nest-helpers';
@Module({
  imports: [
    MsLogsModule.register({
      global: true,
      urlMsLogs: process.env.ENV_SERVICE_MS_LOGS,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Servicios Disponibles para el uso de logs

import { MsLogsService } from 'fiscalia_bo-nest-helpers';
@Injectable()
export class AppService {
  constructor(private readonly msLogsService: MsLogsService) {}
  async test_services_logs() {
    try {
      await this.msLogsService.generateLogLogin({
        aplicacion: 'jl1',
        funcionario_id: 1,
        funcionario_ci: '51234124',
        funcionario_nombre: 'Javier Contreras Mamani',
        dispositivo_ip: '192.168.0.1',
        dispositivo_so: 'Windows 11',
        dispositivo_navegador: 'Chrome 99',
      });
      await this.msLogsService.generateLogView({
        aplicacion: 'jl2',
        apartado: 'caso',
        apartado_info_extra: 'cud: 3143233',
        tabla_id: 'string',
        tabla_nombre: 'vacaciones',
        funcionario_id: 1,
        funcionario_ci: '51234124',
        funcionario_nombre: 'Javier Contreras Mamani',
        dispositivo_ip: '192.168.0.1',
        dispositivo_so: 'Windows 11',
        dispositivo_navegador: 'Chrome 99',
      });
      await this.msLogsService.generateLogEvents({
        aplicacion: 'jl2',
        evento: 'editar',
        tabla_id: '1001',
        tabla_nombre: 'vacaciones',
        tabla_pre_cambios: '{id:123,nombre:"misnombre"}',
        request: 'PUT /listar/vacaciones',
        funcionario_id: 1,
        funcionario_ci: '5131343',
        funcionario_nombre: 'Javier Contreras Mamani',
        dispositivo_ip: '192.168.0.1',
        dispositivo_so: 'Windows 11',
        dispositivo_navegador: 'Chrome 99',
      });
      await this.msLogsService.generateLogError({
        aplicacion: 'jl2',
        evento: 'Listar vacaciones',
        tabla_id: 'string',
        tabla_nombre: 'vacaciones',
        request: 'POST /listar/vacaciones',
        error_string_json: 'string',
      });
    } catch (e) {
      console.error(e);
      throw e;
    }
  }
}