An open API service indexing awesome lists of open source software.

https://github.com/camunda-community-hub/nestjs-zeebe

Zeebe transport and client for nestjs framework
https://github.com/camunda-community-hub/nestjs-zeebe

Last synced: 4 months ago
JSON representation

Zeebe transport and client for nestjs framework

Awesome Lists containing this project

README

        


Sponsored by Precise Finance


Sponsored by Precise

[![Community extension badge](https://img.shields.io/badge/Community%20Extension-An%20open%20source%20community%20maintained%20project-FF4700)](https://github.com/camunda-community-hub/community) [![Lifecycle: Stable badge](https://img.shields.io/badge/Lifecycle-Stable-brightgreen)](https://github.com/Camunda-Community-Hub/community/blob/main/extension-lifecycle.md#stable-) ![Compatible with: Camunda Platform 8](https://img.shields.io/badge/Compatible%20with-Camunda%20Platform%208-0072Ce)


Nest Logo

# NestJS Zeebe Connector (Transport and Client) - Up-to-date
A zeebe transport and client for NestJS 7.x

Using the zeebe-node module and exposing it as a NestJS transport and module.



[![Build Status](https://dansh.visualstudio.com/nestjs-zeebe/_apis/build/status/camunda-community-hub.nestjs-zeebe?branchName=master)](https://dansh.visualstudio.com/nestjs-zeebe/_build/latest?definitionId=2&branchName=master)

# Use version 2.x.x and above for Zeebe 1.x.x and above

## Install
npm install nestjs-zeebe

## Basic usage

```ts
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { ZeebeModule, ZeebeServer } from 'nestjs-zeebe';

@Module({
imports: [ ZeebeModule.forRoot({ gatewayAddress: 'localhost:26500' })],
controllers: [AppController],
providers: [ZeebeServer],
})
export class AppModule {}
```

```ts
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ZeebeServer } from 'nestjs-zeebe';

async function bootstrap() {
const app = await NestFactory.create(AppModule);
const microservice = app.connectMicroservice({
strategy: app.get(ZeebeServer),
});

await app.startAllMicroservicesAsync();

await app.listen(3000);
}
bootstrap();

```

```ts
// app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { ZBClient } from 'zeebe-node';
import { ZEEBE_CONNECTION_PROVIDER, ZeebeWorker, ZeebeJob } from 'nestjs-zeebe';
import {
Ctx,
Payload,
} from '@nestjs/microservices';
import { ZBClient, ZBWorker, ICustomHeaders, IInputVariables, IOutputVariables, CompleteFn } from 'zeebe-node';
import { CreateProcessInstanceResponse } from 'zeebe-node/dist/lib/interfaces-grpc-1.0';

@Controller()
export class AppController {
constructor(private readonly appService: AppService, @Inject(ZEEBE_CONNECTION_PROVIDER) private readonly zbClient: ZBClient) {}

// Use the client to create a new workflow instance
@Get()
getHello() : Promise {
return this.zbClient.createProcessInstance('order-process', { test: 1, or: 'romano'});
}

// Subscribe to events of type 'payment-service
@ZeebeWorker('payment-service')
paymentService(@Payload() job: ZeebeJob, @Ctx() context: { complete: CompleteFn, worker: ZBWorker }) {
console.log('Payment-service, Task variables', job.variables);
let updatedVariables = Object.assign({}, job.variables, {
paymentService: 'Did my job',
});

// Task worker business logic goes here

job.complete(updatedVariables);
}

// Subscribe to events of type 'inventory-service and create a worker with the options as passed below (zeebe-node ZBWorkerOptions)
@ZeebeWorker('inventory-service', { maxJobsToActivate: 10, timeout: 300 })
inventoryService(@Payload() job: ZeebeJob, @Ctx() context: { complete: CompleteFn, worker: ZBWorker }) {
console.log('inventory-service, Task variables', job.variables);
let updatedVariables = Object.assign({}, job.variables, {
inventoryVar: 'Inventory donnnneee',
});

// Task worker business logic goes here
//job.complete(updatedVariables);
job.complete(updatedVariables);
}
}

```

## For v1.x.x

```ts
// app.controller.ts
import { Controller, Get, Inject } from '@nestjs/common';
import { AppService } from './app.service';
import { ZBClient } from 'zeebe-node';
import { CreateWorkflowInstanceResponse, CompleteFn, Job } from 'zeebe-node/interfaces';
import { ZEEBE_CONNECTION_PROVIDER, ZeebeWorker } from 'nestjs-zeebe';
import {
Ctx,
Payload,
} from '@nestjs/microservices';

@Controller()
export class AppController {
constructor(private readonly appService: AppService, @Inject(ZEEBE_CONNECTION_PROVIDER) private readonly zbClient: ZBClient) {}

// Use the client to create a new workflow instance
@Get()
getHello() : Promise {
return this.zbClient.createWorkflowInstance('order-process', { test: 1, or: 'romano'});
}

// Subscribe to events of type 'payment-service
@ZeebeWorker('payment-service')
paymentService(@Payload() job, @Ctx() fn: CompleteFn {
console.log('Payment-service, Task variables', job.variables);
let updatedVariables = Object.assign({}, job.variables, {
paymentService: 'Did my job',
});

// Task worker business logic goes here

complete.success(updatedVariables);
}

// Subscribe to events of type 'inventory-service and create a worker with the options as passed below (zeebe-node ZBWorkerOptions)
@ZeebeWorker('inventory-service', { maxJobsToActivate: 10, timeout: 300 })
inventoryService(@Payload() job, @Ctx() fn: CompleteFn) {
console.log('inventory-service, Task variables', job.variables);
let updatedVariables = Object.assign({}, job.variables, {
inventoryVar: 'Inventory donnnneee',
});

// Task worker business logic goes here

complete.success(updatedVariables);
}
}

```




###### Hint:
For mac, you need to have xcode installed
```xcode-select --install```


Sponsored by Precise Finance


Sponsored by Precise