# fiscalia_bo-nest-helpers

> Helpers y servicios para NestJS

Latest version **2.0.45** (published 2026-09-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install fiscalia_bo-nest-helpers
pnpm add fiscalia_bo-nest-helpers
yarn add fiscalia_bo-nest-helpers
bun add fiscalia_bo-nest-helpers
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 2.0.45 |
| Published | 2026-09-15 |
| First published | 2023-03-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 1 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | DNTIC - Ministerio Público |
| Maintainers | w-varg, fiscalia_bo, micki.lahor |
| Keywords | nestjs, fiscalia_bo |

## Links

- npm: https://www.npmjs.com/package/fiscalia_bo-nest-helpers
- Repository: https://git.mp.gob.bo/librerias/nestjs/helper
- Homepage: https://www.npmjs.com/package/fiscalia_bo-nest-helpers#readme
- npm.io page: https://npm.io/package/fiscalia_bo-nest-helpers

## Dependencies (6)

- [uniqid](https://npm.io/package/uniqid.md) ^5.4.0
- [amqplib](https://npm.io/package/amqplib.md) ^0.10.3
- [kafkajs](https://npm.io/package/kafkajs.md) ^2.2.4
- [ua-parser-js](https://npm.io/package/ua-parser-js.md) ^1.0.35
- [@turf/helpers](https://npm.io/package/@turf/helpers.md) ^6.5.0
- [@turf/boolean-point-in-polygon](https://npm.io/package/@turf/boolean-point-in-polygon.md) ^6.5.0

## Recent versions

- 2.0.45 (latest) — 2026-09-15
- 2.0.44 — 2026-08-24
- 2.0.43 — 2026-08-12
- 2.0.42 — 2026-08-12
- 2.0.40 — 2026-08-11
- 2.0.39 — 2026-07-08
- 2.0.38 — 2026-06-23
- 2.0.37 — 2026-06-23
- 2.1.0 — 2026-06-23
- 2.0.36 — 2026-06-23
- 2.0.35 — 2026-06-19
- 2.0.34 — 2026-05-11
- 2.0.33 — 2026-04-30
- 2.0.32 — 2026-04-17
- 2.0.31 — 2026-04-16
- … 391 more at https://npm.io/package/fiscalia_bo-nest-helpers/versions

## README

<p align="center">
  <img src="https://jl2-idif.fiscalia.gob.bo/escudo_bolivia_256.png" width="200" alt="MP Logo" />
</p>

<p align="center">Helpers para proyectos de NestJS FEG-MP.</p>
<p align="center">
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
</p>
  <!--[![Backers on Open Collective](https://opencollective.com/nest/backers/badge.svg)](https://opencollective.com/nest#backer)
  [![Sponsors on Open Collective](https://opencollective.com/nest/sponsors/badge.svg)](https://opencollective.com/nest#sponsor)-->

## 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:

- <b>MS-FILES</b>: 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

```bash
$ tsc
```

## Instalación

```bash
$ yarn add fiscalia_bo-nest-helpers
```

## importar servicios

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

## variables de entorno obligatorios

```properties
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

<!-- ## Servicios disponibles -->

# 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:

```typescript
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`](https://docs.nestjs.com/techniques/configuration#getting-started 'Nestjs Docs') 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:

```js
  // 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:

```typescript
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`](https://docs.nestjs.com/techniques/configuration#getting-started 'Nestjs Docs') 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:

```js
  // 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-REDIS`z

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:

```typescript
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

```typescript
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

```txt
aplicacion-name:key_One-key_Two-key_Three-keyAcction
```

ejemplo de asignacion de key para redis

```js
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:

```typescript
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`](https://docs.nestjs.com/techniques/configuration#getting-started 'Nestjs Docs') 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

```typescript
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

```typescript
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

```typescript
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

```typescript
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

```typescript
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;
    }
  }
}
```

---
_Source: https://npm.io/package/fiscalia_bo-nest-helpers · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
