NestJS SDK
@cohorly/nest is a standard NestJS dynamic module (forRoot / forRootAsync) plus an injectable CohorlyService wrapping @cohorly/node, with an automatic final flush on application shutdown. Supports @nestjs/common ^10 and ^11.
Install
bashpnpm add @cohorly/nest
Register the module
typescript// app.module.tsimport { Module } from "@nestjs/common";import { CohorlyModule } from "@cohorly/nest";@Module({imports: [CohorlyModule.forRoot({token: process.env.COHORLY_TOKEN!,host: "https://cohorly-service.velloalabs.com",isGlobal: true, // inject CohorlyService anywhere without re-importing}),],})export class AppModule {}
Inject the service
typescriptimport { Injectable } from "@nestjs/common";import { CohorlyService } from "@cohorly/nest";@Injectable()export class SignupService {constructor(private readonly cohorly: CohorlyService) {}async signUp(userId: string, email: string) {this.cohorly.track("signed_up", { distinct_id: userId, method: "email" });this.cohorly.people.set(userId, { $email: email, plan: "free" });}}
CohorlyService exposes the full mixpanel-node-style surface: track, trackBatch, import, importBatch, people.*, alias, flush, and the raw client at service.client.
Async configuration
typescriptimport { ConfigModule, ConfigService } from "@nestjs/config";import { CohorlyModule } from "@cohorly/nest";CohorlyModule.forRootAsync({imports: [ConfigModule],inject: [ConfigService],isGlobal: true,useFactory: (config: ConfigService) => ({token: config.getOrThrow("COHORLY_TOKEN"),host: config.get("COHORLY_HOST") ?? "https://cohorly-service.velloalabs.com",}),});
All @cohorly/node config options are accepted (host, flushIntervalMs, batchSize, debug, maxQueueSize, maxRetryDelayMs), plus token (required) and isGlobal.
Graceful shutdown
CohorlyService implements OnApplicationShutdown: when the Nest application closes it stops the SDK's flush timer and performs a final flush. To also cover process signals, enable Nest's shutdown hooks:
typescriptconst app = await NestFactory.create(AppModule);app.enableShutdownHooks();