Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fiscalia_bo-nest-helpers

Package Overview
Dependencies
Maintainers
0
Versions
324
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fiscalia_bo-nest-helpers

Helpers y servicios para NestJS

  • 1.5.28
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
453
increased by47.56%
Maintainers
0
Weekly downloads
 
Created
Source

MP Logo

Helpers para proyectos de NestJS FEG-MP.

NPM Version Package License

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

PropiedadValorDescripcion
virtualHostString (null)Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete
queueListenString (null)El canal o queue que desea que escuchar y recibir datos
callbackFunctionCampo 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

PropiedadValorDescripcion
virtualHostString (null)Host Virtual donde creara una conexion, si este se envia null lo creara automaticamete
queueListenString (null)El canal o queue que desea transmitir datos
dataStringCampo 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;
    }
  }
}

Keywords

FAQs

Package last updated on 25 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc