Invect

NestJS

Add Invect to a NestJS application via module import.

Installation

npm install @invect/core @invect/nestjs

Setup

Import InvectModule in your app module:

app.module.ts
import { Module } from '@nestjs/common';
import { InvectModule } from '@invect/nestjs';

@Module({
  imports: [
    InvectModule.forRoot({
      baseDatabaseConfig: {
        type: 'sqlite',
        connectionString: process.env.DATABASE_URL || 'file:./dev.db',
        id: 'main',
      },
    }),
  ],
})
export class AppModule {}

Async Configuration

Use forRootAsync for dynamic configuration with dependency injection:

app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { InvectModule } from '@invect/nestjs';

@Module({
  imports: [
    ConfigModule.forRoot(),
    InvectModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (config: ConfigService) => ({
        baseDatabaseConfig: {
          type: 'postgresql' as const,
          connectionString: config.get('DATABASE_URL')!,
          id: 'main',
        },
      }),
    }),
  ],
})
export class AppModule {}

Accessing the Core

Inject InvectService to access the core directly:

my.service.ts
import { Injectable } from '@nestjs/common';
import { InvectService } from '@invect/nestjs';

@Injectable()
export class MyService {
  constructor(private readonly invectService: InvectService) {}

  async triggerWorkflow(flowId: string, data: any) {
    const core = this.invectService.getCore();
    return core.startFlowRun(flowId, data);
  }
}

How It Works

The module creates a singleton Invect core instance via NestJS dependency injection:

  1. InvectModule.forRoot() creates a dynamic module
  2. An INVECT_CORE provider instantiates and initializes the core
  3. InvectController handles HTTP endpoints (same as Express routes)
  4. InvectService exposes the core for direct access

This gives you full NestJS ecosystem support — guards, interceptors, pipes, and exception filters all work on Invect endpoints.