{"id":48919153,"url":"https://github.com/nigussolomon/nest-util","last_synced_at":"2026-04-17T04:07:40.704Z","repository":{"id":336609208,"uuid":"1150331200","full_name":"nigussolomon/nest-util","owner":"nigussolomon","description":"Supercharge NestJS development with a generic CRUD engine, automated CLI generator (ncnu), and essential utilities. Features deep TypeORM integration, automated Swagger/OpenAPI documentation, and rapid boilerplate generation.","archived":false,"fork":false,"pushed_at":"2026-04-11T12:50:03.000Z","size":756,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-11T14:15:48.206Z","etag":null,"topics":["automation","backend","boiler","cli","crud","generator","ncnu","nest-util","nestjs","openapi","swagger","typeorm","typescript"],"latest_commit_sha":null,"homepage":"https://nigussolomon.github.io/nest-util/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nigussolomon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-05T06:35:43.000Z","updated_at":"2026-02-28T16:11:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nigussolomon/nest-util","commit_stats":null,"previous_names":["nigussolomon/nest-util"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nigussolomon/nest-util","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nigussolomon%2Fnest-util","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nigussolomon%2Fnest-util/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nigussolomon%2Fnest-util/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nigussolomon%2Fnest-util/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nigussolomon","download_url":"https://codeload.github.com/nigussolomon/nest-util/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nigussolomon%2Fnest-util/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31914488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","backend","boiler","cli","crud","generator","ncnu","nest-util","nestjs","openapi","swagger","typeorm","typescript"],"created_at":"2026-04-17T04:07:38.864Z","updated_at":"2026-04-17T04:07:40.688Z","avatar_url":"https://github.com/nigussolomon.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nest Util\n\n![NestJS](https://img.shields.io/badge/nestjs-%23E0234E.svg?style=for-the-badge\u0026logo=nestjs\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![TypeORM](https://img.shields.io/badge/TypeORM-FE0803?style=for-the-badge\u0026logo=typeorm\u0026logoColor=white)\n\n[![CI](https://github.com/nigussolomon/nest-util/actions/workflows/ci.yml/badge.svg)](https://github.com/nigussolomon/nest-util/actions/workflows/ci.yml)\n[![Security](https://github.com/nigussolomon/nest-util/actions/workflows/security.yml/badge.svg)](https://github.com/nigussolomon/nest-util/actions/workflows/security.yml)\n[![Deploy Documentation](https://github.com/nigussolomon/nest-util/actions/workflows/deploy-docs.yml/badge.svg)](https://github.com/nigussolomon/nest-util/actions/workflows/deploy-docs.yml)\n[![Publish Libs](https://github.com/nigussolomon/nest-util/actions/workflows/publish.yml/badge.svg)](https://github.com/nigussolomon/nest-util/actions/workflows/publish.yml)\n\n**A modern, production-ready collection of NestJS utilities designed to accelerate development by providing reusable, battle-tested patterns for CRUD operations, authentication, and rapid code generation.**\n\n📖 **[Docs Index](./docs/README.md)** | 🚀 **[Quick Start](#-quick-start)** | ⚙️ **[demo-api config](./docs/demo-api/README.md)**\n\n---\n\n## 🎯 What is Nest-Util?\n\nNest-Util is a comprehensive toolkit that eliminates boilerplate and accelerates NestJS development. Instead of writing repetitive CRUD logic, authentication flows, and entity scaffolding for every project, Nest-Util provides:\n\n- **Production-Ready Components**: Battle-tested services, controllers, and modules that handle common patterns\n- **Type-Safe Code Generation**: CLI tool that generates fully-typed entities, DTOs, services, and controllers\n- **Flexible Authentication**: Dynamic auth system that adapts to your schema without forcing a specific user model\n- **Built-in Best Practices**: Automatic pagination, filtering, Swagger documentation, and error handling\n\n### Why Nest-Util?\n\n| Problem                                       | Nest-Util Solution                                                   |\n| --------------------------------------------- | -------------------------------------------------------------------- |\n| Writing the same CRUD logic for every entity  | `@nest-util/nest-crud` - Generic CRUD service and controller factory |\n| Manually scaffolding entities, DTOs, services | `ncnu` - Code generator with smart type mapping                      |\n| Implementing secure JWT authentication        | `@nest-util/nest-auth` - Flexible auth module with token rotation    |\n| Tracking entity-level mutations               | `@nest-util/nest-audit` - Audit logs for create/update/delete flows  |\n| Inconsistent API responses                    | Built-in response interceptors and transformers                      |\n| Manual Swagger documentation                  | Automatic OpenAPI documentation with proper decorators               |\n\n---\n\n## 🏗️ Architecture Overview\n\nNest-Util is composed of focused modules that integrate into the same NestJS app.\n\n**Architecture Components:**\n\n- `ncnu`: generates entities, DTOs, services, and controllers\n- `@nest-util/nest-crud`: provides reusable CRUD service/controller building blocks\n- `@nest-util/nest-auth`: handles JWT auth, refresh tokens, and permissions\n- `@nest-util/nest-audit`: records audit events for mutating operations\n- `TypeORM + Database`: persistence layer used by all runtime modules\n\n### Integration Flow\n\n1. Configure TypeORM and entity loading.\n2. Add `NestUtilNestAuditModule`.\n3. Add `AuthModule.forRoot(...)`.\n4. Build services with `NestCrudService`.\n5. Build controllers with `CreateNestedCrudController(...)`.\n6. Configure `main.ts` globals (validation pipe, query parser, Swagger, DB exception filter).\n\n**Typical Workflow:**\n\n1. Use `ncnu` to generate entities, DTOs, services, and controllers\n2. Generated code automatically extends `NestCrudService` and `CreateNestedCrudController`\n3. Add `@nest-util/nest-auth` for authentication on protected routes\n4. Enable `@nest-util/nest-audit` interceptor for mutation logging\n5. Get automatic pagination, filtering, Swagger docs, and error handling\n\n---\n\n## 🚀 Key Features\n\n### 1. 📦 @nest-util/nest-crud\n\nA powerful and flexible CRUD library featuring:\n\n- **`NestCrudService`**: Generic base service for common TypeORM operations with built-in filtering and pagination\n- **`CreateNestedCrudController`**: Controller factory that generates fully-functional REST endpoints\n- **`IBaseController`**: TypeScript interface for proper type inference\n- **Advanced Filtering**: Query-based filtering with operators like `eq`, `cont`, `gte`, `lte`\n- **Automatic Pagination**: Out-of-the-box support for page-based and limit-offset pagination\n- **Swagger Integration**: Automatic OpenAPI documentation with proper schemas\n- **Response Interceptors**: Consistent API response format with metadata\n\n**Key Capabilities:**\n\n- ✅ Type-safe CRUD operations\n- ✅ Dynamic query filtering (`?filter[name_cont]=john\u0026filter[age_gte]=18`)\n- ✅ Automatic Swagger documentation\n- ✅ Global exception handling for database errors\n- ✅ Extensible architecture for custom business logic\n\n### 2. 🛠️ ncnu (NestJS CRUD Generator)\n\nA professional code generation CLI tool to scaffold your NestJS resources:\n\n- **Rapid Prototyping**: Generate Entity, Service, Controller, and DTOs in seconds\n- **Smart Type Mapping**: Automatically handles TypeORM column types and Swagger decorators\n- **Definite Assignment**: Generates code compatible with strict TypeScript property initialization\n- **Organized Structure**: Creates dedicated folders with all necessary files\n- **Production Ready**: Generated code includes proper imports, decorators, and type annotations\n\n**What Gets Generated:**\n\n- `{model}.entity.ts` - TypeORM entity with proper column decorators\n- `create-{model}.dto.ts` - DTO for creation with validation decorators\n- `update-{model}.dto.ts` - DTO for updates with optional fields\n- `{model}.service.ts` - Service extending `NestCrudService`\n- `{model}.controller.ts` - Controller extending `CreateNestedCrudController`\n\n### 3. 🔐 @nest-util/nest-auth\n\nA dynamic and flexible authentication library:\n\n- **`AuthModule`**: Dynamic configuration for entities, fields, and JWT settings\n- **`AuthService`**: Built-in registration and login with bcrypt hashing\n- **Token Security**: Refresh token rotation with nonce-based validation\n- **Custom Decorators**: `@Public()`, `@CurrentUser()`, `@AuthOptions()`\n- **Flexible DTOs**: Bring your own DTOs for full control over validation and documentation\n- **Route Control**: Enable/disable auth endpoints via configuration\n\n**Security Features:**\n\n- ✅ JWT access and refresh token rotation\n- ✅ Bcrypt password hashing\n- ✅ Single-use refresh tokens with nonce validation\n- ✅ Automatic token invalidation on refresh\n- ✅ No sensitive data in auth responses\n- ✅ Configurable token expiration\n\n## 🛠️ Installation\n\n### Prerequisites\n\n- **Node.js**: v18 or higher\n- **pnpm** (recommended) or npm\n- **PostgreSQL** (or your preferred database)\n- **NestJS**: v10+\n- **TypeORM**: v0.3+\n\n### Installing Libraries\n\nInstall the packages directly from GitHub releases:\n\n```bash\n# Install nest-crud library\npnpm add https://github.com/nigussolomon/nest-util/releases/download/latest/nest-util-nest-crud-0.0.1.tgz\n\n# Install nest-auth library\npnpm add https://github.com/nigussolomon/nest-util/releases/download/latest/nest-util-nest-auth-0.0.1.tgz\n\n# Required peer/runtime dependencies\npnpm add @nestjs/typeorm typeorm @nestjs/passport passport passport-jwt @nestjs/jwt bcrypt\npnpm add -D @types/passport-jwt @types/bcrypt\n```\n\n### Installing the Code Generator\n\nInstall `ncnu` globally for easy access:\n\n```bash\n# Global installation\npnpm add -g https://github.com/nigussolomon/nest-util/releases/download/latest/ncnu-0.0.1.tgz\n\n# Verify installation\nncnu --help\n```\n\nAlternatively, use with `npx`:\n\n```bash\nnpx https://github.com/nigussolomon/nest-util/releases/download/latest/ncnu-0.0.1.tgz --gen User --path ./src/app email:string\n```\n\n---\n\n## ⚡ Quick Start\n\n### Step 1: Generate Your First Resource\n\nUse the `ncnu` CLI to scaffold a complete CRUD resource:\n\n```bash\nncnu --gen Post --path apps/my-api/src/app \\\n  title:string \\\n  content:string \\\n  published:boolean \\\n  publishedAt:date \\\n  authorId:number\n```\n\nThis generates:\n\n```\napps/my-api/src/app/post/\n├── post.entity.ts\n├── create-post.dto.ts\n├── update-post.dto.ts\n├── post.service.ts\n└── post.controller.ts\n```\n\n### Step 2: Register the Module\n\nCreate a module for your resource:\n\n```typescript\n// apps/my-api/src/app/post/post.module.ts\nimport { Module } from '@nestjs/common';\nimport { TypeOrmModule } from '@nestjs/typeorm';\nimport { PostController } from './post.controller';\nimport { PostService } from './post.service';\nimport { Post } from './post.entity';\n\n@Module({\n  imports: [TypeOrmModule.forFeature([Post])],\n  controllers: [PostController],\n  providers: [PostService],\n  exports: [PostService],\n})\nexport class PostModule {}\n```\n\nImport it in your `AppModule`:\n\n```typescript\nimport { PostModule } from './post/post.module';\n\n@Module({\n  imports: [\n    // ... other imports\n    PostModule,\n  ],\n})\nexport class AppModule {}\n```\n\n### Step 3: Configure Global Settings\n\nFor optimal functionality, add these global configurations in your `main.ts`:\n\n```typescript\nimport { NestFactory } from '@nestjs/core';\nimport { ValidationPipe } from '@nestjs/common';\nimport { TypeOrmExceptionFilter } from '@nest-util/nest-crud';\nimport { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';\nimport { AppModule } from './app/app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create(AppModule);\n\n  // Enable transformation and validation\n  app.useGlobalPipes(\n    new ValidationPipe({\n      transform: true,\n      enableImplicitConversion: true,\n    })\n  );\n\n  // Handle database errors gracefully\n  app.useGlobalFilters(new TypeOrmExceptionFilter());\n\n  // Configure query parser for complex filtering\n  const adapter = app.getHttpAdapter();\n  adapter.getInstance().set('query parser', 'extended');\n\n  // Setup Swagger documentation\n  const config = new DocumentBuilder()\n    .setTitle('My API')\n    .setDescription('API documentation')\n    .setVersion('1.0')\n    .addBearerAuth()\n    .build();\n  const document = SwaggerModule.createDocument(app, config);\n  SwaggerModule.setup('api/docs', app, document);\n\n  await app.listen(3000);\n}\nbootstrap();\n```\n\n### Step 4: Test Your API\n\nYour CRUD endpoints are now available:\n\n```bash\n# Create a post\ncurl -X POST http://localhost:3000/post \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"Hello\",\"content\":\"World\",\"published\":true}'\n\n# Get all posts with pagination\ncurl \"http://localhost:3000/post?page=1\u0026limit=10\"\n\n# Filter posts\ncurl \"http://localhost:3000/post?filter[published_eq]=true\u0026filter[title_cont]=Hello\"\n\n# Get one post\ncurl http://localhost:3000/post/1\n\n# Update a post\ncurl -X PATCH http://localhost:3000/post/1 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"Updated Title\"}'\n\n# Delete a post\ncurl -X DELETE http://localhost:3000/post/1\n```\n\nVisit `http://localhost:3000/api/docs` for interactive Swagger documentation!\n\n---\n\n## 🔐 Adding Authentication\n\n### Step 1: Generate User Entity\n\n```bash\nncnu --gen User --path apps/my-api/src/app \\\n  email:string \\\n  password:hash \\\n  accessToken:hash \\\n  refreshToken:hash\n```\n\n### Step 2: Configure AuthModule\n\n```typescript\nimport { AuthModule } from '@nest-util/nest-auth';\nimport { User } from './user/user.entity';\nimport { LoginDto, RegisterDto, RefreshDto } from './auth/auth.dto';\n\n@Module({\n  imports: [\n    AuthModule.forRoot({\n      userEntity: User,\n      identifierField: 'email',\n      passkeyField: 'password',\n      jwtSecret: process.env.JWT_SECRET || 'your-secret-key',\n      loginDto: LoginDto,\n      registerDto: RegisterDto,\n      refreshDto: RefreshDto,\n      accessTokenField: 'accessToken',\n      refreshTokenField: 'refreshToken',\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Step 3: Protect Routes\n\n```typescript\nimport { JwtAuthGuard, CurrentUser, AuthUser } from '@nest-util/nest-auth';\n\n@Controller('post')\n@UseGuards(JwtAuthGuard) // Protect all routes\nexport class PostController\n  extends CreateNestedCrudController(CreatePostDto, UpdatePostDto, Post)\n  implements IBaseController\u003cCreatePostDto, UpdatePostDto, Post\u003e\n{\n  constructor(override readonly service: PostService) {\n    super(service);\n  }\n\n  // Access current user in custom endpoints\n  @Get('my-posts')\n  getMyPosts(@CurrentUser() user: AuthUser) {\n    return this.service.findAll({ filter: { authorId_eq: user.id } });\n  }\n}\n```\n\nAuthentication endpoints are now available:\n\n- `POST /auth/register` - Create new user\n- `POST /auth/login` - Login and get tokens\n- `POST /auth/refresh` - Refresh access token\n- `GET /auth/me` - Get current user profile\n- `POST /auth/logout` - Logout (invalidate tokens)\n\n---\n\n## 🧑‍💻 Development\n\nThis workspace uses [Nx](https://nx.dev) for efficient monorepo management.\n\n### Repository Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/nigussolomon/nest-util.git\ncd nest-util\n\n# Install dependencies\npnpm install\n\n# Start the database (PostgreSQL via Docker)\n./db.sh\n\n# Run the demo API\nnpx nx serve demo-api\n```\n\nExplore the demo API at `http://localhost:3000/api/docs`\n\n### Useful Commands\n\n```bash\n# View dependency graph\nnpx nx graph\n\n# Lint a specific library\nnpx nx lint nest-crud\n\n# Build all libraries\nnpx nx run-many -t build\n\n# Run tests for a library\nnpx nx test nest-crud\n\n# Run affected tests (only projects affected by changes)\nnpx nx affected -t test\n\n# Type check all projects\nnpx nx run-many -t typecheck\n```\n\n---\n\n## 📚 Advanced Features\n\n### Custom Filtering\n\nThe CRUD system supports advanced filtering with various operators:\n\n```typescript\n// Filter by exact match\nGET /post?filter[published_eq]=true\n\n// Filter by contains (case-insensitive)\nGET /post?filter[title_cont]=hello\n\n// Filter by greater than or equal\nGET /post?filter[views_gte]=100\n\n// Filter by less than or equal\nGET /post?filter[createdAt_lte]=2024-01-01\n\n// Combine multiple filters\nGET /post?filter[published_eq]=true\u0026filter[views_gte]=100\u0026filter[title_cont]=nest\n\n// OR groups (requires `query parser = extended`)\nGET /post?filter[or][0][title_cont]=nestjs\u0026filter[or][1][title_cont]=typeorm\n\n// Nested group with advanced operators\nGET /post?filter[and][0][status_ne]=archived\u0026filter[and][1][views_in]=100,200,300\n```\n\n\u003e For nested keys like `filter[or][0][title_cont]`, set Express query parsing to extended mode:\n\u003e `app.getHttpAdapter().getInstance().set('query parser', 'extended')`.\n\n**Supported Operators:**\n\n- `eq` - Equals\n- `ne` - Not equals\n- `cont` - Contains (case-insensitive)\n- `notcont` - Does not contain (case-insensitive)\n- `starts` - Starts with (case-insensitive)\n- `ends` - Ends with (case-insensitive)\n- `gte` - Greater than or equal\n- `lte` - Less than or equal\n- `gt` - Greater than\n- `lt` - Less than\n- `in` - Matches any value from a comma-separated list\n- `nin` - Does not match values from a comma-separated list\n- `isnull` - `true` for `IS NULL`, `false` for `IS NOT NULL`\n\n**Grouping Keys:**\n\n- `and` - Combine nested filters with AND\n- `or` - Combine nested filters with OR\n\n### Extending CRUD Services\n\nAdd custom business logic while keeping CRUD functionality:\n\n```typescript\n@Injectable()\nexport class PostService extends NestCrudService\u003c\n  Post,\n  CreatePostDto,\n  UpdatePostDto\n\u003e {\n  constructor(@InjectRepository(Post) repository: Repository\u003cPost\u003e) {\n    super({\n      repository,\n      allowedFilters: ['title', 'published', 'authorId'], // Whitelist filterable fields\n    });\n  }\n\n  // Add custom methods\n  async findPublished(): Promise\u003cPost[]\u003e {\n    return this.repository.find({ where: { published: true } });\n  }\n\n  async publishPost(id: number): Promise\u003cPost\u003e {\n    const post = await this.findOne(id);\n    return this.update(id, { published: true, publishedAt: new Date() } as any);\n  }\n}\n```\n\n### Custom Controller Endpoints\n\nMix generated CRUD endpoints with custom routes:\n\n```typescript\n@Controller('post')\nexport class PostController\n  extends CreateNestedCrudController(CreatePostDto, UpdatePostDto, Post)\n  implements IBaseController\u003cCreatePostDto, UpdatePostDto, Post\u003e\n{\n  constructor(override readonly service: PostService) {\n    super(service);\n  }\n\n  // Add custom endpoints alongside CRUD routes\n  @Get('published')\n  @Message('fetched published posts')\n  async getPublished() {\n    return this.service.findPublished();\n  }\n\n  @Post(':id/publish')\n  @Message('published')\n  async publish(@Param('id', ParseIntPipe) id: number) {\n    return this.service.publishPost(id);\n  }\n}\n```\n\n---\n\n## 🐛 Troubleshooting\n\n### TypeScript Error: TS2742 (Inferred type is not portable)\n\n**Error:**\n\n```\nThe inferred type of 'MyController' cannot be named without a reference to\n'../node_modules/@nestjs/common'. This is likely not portable.\n```\n\n**Solution:**\nAdd explicit `implements IBaseController` to your controller:\n\n```typescript\nimport {\n  CreateNestedCrudController,\n  IBaseController,\n} from '@nest-util/nest-crud';\n\nexport class MyController\n  extends CreateNestedCrudController(CreateDto, UpdateDto, ResponseDto)\n  implements IBaseController\u003cCreateDto, UpdateDto, ResponseDto\u003e {\n  // ...\n}\n```\n\n\u003e **Note:** The `ncnu` generator automatically includes this fix in generated code.\n\n### Database Connection Issues\n\nEnsure your `TypeOrmModule` is properly configured:\n\n```typescript\nTypeOrmModule.forRoot({\n  type: 'postgres',\n  host: process.env.DB_HOST || 'localhost',\n  port: parseInt(process.env.DB_PORT) || 5432,\n  username: process.env.DB_USER || 'postgres',\n  password: process.env.DB_PASSWORD || 'postgres',\n  database: process.env.DB_NAME || 'mydb',\n  entities: [__dirname + '/**/*.entity{.ts,.js}'],\n  synchronize: process.env.NODE_ENV !== 'production', // Disable in production!\n});\n```\n\n### Filtering Not Working\n\nMake sure you've configured the query parser correctly:\n\n```typescript\n// In main.ts\nconst adapter = app.getHttpAdapter();\nadapter.getInstance().set('query parser', 'extended');\n```\n\nAnd whitelist fields in your service:\n\n```typescript\nsuper({\n  repository,\n  allowedFilters: ['name', 'email', 'status'], // Only these fields can be filtered\n});\n```\n\n### Authentication Token Issues\n\nCheck that:\n\n1. Your user entity has `accessToken` and `refreshToken` fields\n2. JWT secret is consistent across requests\n3. Token fields are excluded from default queries (add `select: false` in entity)\n\n```typescript\n@Column({ select: false })\nrefreshToken?: string;\n```\n\n---\n\n## 📖 Documentation\n\n- **Docs Index**: [docs/README.md](./docs/README.md)\n- **demo-api setup**: [docs/demo-api/README.md](./docs/demo-api/README.md)\n- **nest-auth guide**: [docs/nest-auth/README.md](./docs/nest-auth/README.md)\n- **nest-crud guide**: [docs/nest-crud/README.md](./docs/nest-crud/README.md)\n- **nest-audit guide**: [docs/nest-audit/README.md](./docs/nest-audit/README.md)\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n---\n\n## 📝 License\n\nThis project is licensed under the MIT License.\n\n---\n\n## 🌟 Show Your Support\n\nIf this project helped you, please give it a ⭐ on [GitHub](https://github.com/nigussolomon/nest-util)!\n\n---\n\n\u003e [!TIP]\n\u003e Start from [docs/README.md](./docs/README.md). The module guides are split by package and include demo-api-specific configuration notes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnigussolomon%2Fnest-util","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnigussolomon%2Fnest-util","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnigussolomon%2Fnest-util/lists"}