NestJS
Add Invect to a NestJS application via module import.
Installation
npm install @invect/core @invect/nestjsSetup
Import InvectModule in your app module:
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:
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:
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:
InvectModule.forRoot()creates a dynamic module- An
INVECT_COREprovider instantiates and initializes the core InvectControllerhandles HTTP endpoints (same as Express routes)InvectServiceexposes the core for direct access
This gives you full NestJS ecosystem support — guards, interceptors, pipes, and exception filters all work on Invect endpoints.