UNPKG

camunda-external-task-client-js

Version:

Implement your [BPMN Service Task](https://docs.camunda.org/manual/latest/user-guide/process-engine/external-tasks/) in NodeJS.

159 lines (121 loc) 10.8 kB
# `Client` ```js const { Client } = require("camunda-external-task-handler-js"); const client = new Client({baseUrl: "http://localhost:8080/engine-rest"}); client.subscribe("foo", async function({task, taskService}) { // Put your business logic }); ``` Client is the core class of the external task client. It is mainly used to start/stop the external task client and subscribe to a certain topic. ## `new Client(options)` Options are **mandatory** when creating a _Client_ instance. Here"s a list of the available options: | Option | Description | Type | Required | Default | |:--------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|------------------------|:--------:|:----------------:| | baseUrl | Path to the engine api | string | ✓ | | | workerId | The id of the worker on which behalf tasks are fetched. The returned tasks are locked for that worker and can only be completed when providing the same worker id. | string | | "some-random-id" | | maxTasks | The maximum number of tasks to fetch | number | | 10 | | maxParallelExecutions | The maximum number of tasks to be worked on simultaneously | number | | | | interval | Interval of time to wait before making a new poll. | number | | 300 | | lockDuration | The default duration to lock the external tasks for in milliseconds. | number | | 50000 | | autoPoll | If true, then polling start automatically as soon as a Client instance is created. | boolean | | true | | asyncResponseTimeout | The Long Polling timeout in milliseconds. | number | | | | usePriority | If false, task will be fetched arbitrarily instead of based on its priority. | boolean | | true | | interceptors | Function(s) that will be called before a request is sent. Interceptors receive the configuration of the request and return a new configuration. | function or [function] | | | | use | Function(s) that have access to the client instance as soon as it is created and before any polling happens. Check out [logger](/lib/logger.js) for a better understanding of the usage of middlewares. | function or [function] | | | | sorting | Defines the sorting of the fetched tasks. It can be used together with `usePriority`, but the sorting will be based on priority first. | Array of `Sorting` objects | | | `Sorting` object properties: | Option | Description | Type | Required | Default | |:---------:|:-------------------------------------------------------------------------:|--------|:--------:|:-------:| | sortBy | Specifies the sorting by property. [Possible values.](/lib/Client.js#L67) | string | ✓ | | | sortOrder | Specifies the sorting direction. [Possible values.](/lib/Client.js#L71) | string | ✓ | | ### About interceptors * Interceptors receive the configuration of the request and return a new configuration. * In the case of multiple interceptors, they are piped in the order they are provided. * Check out [BasicAuthInterceptor](/lib/BasicAuthInterceptor.js) for a better understanding of the usage of interceptors. ## `client.start()` Triggers polling. ### About Polling * Polling tasks from the engine works by performing a fetch & lock operation of tasks that have subscriptions. It then calls the handler registered to each task. * Polling is done periodically based on the _interval_ configuration. * [Long Polling](https://docs.camunda.org/manual/latest/user-guide/process-engine/external-tasks/#long-polling-to-fetch-and-lock-external-tasks) is enabled by configuring the option _asyncResponseTimeout_. ## `client.subscribe(topic, options, handler)` Subscribes a handler to a specific topic and returns a _topic subscription_. Here"s a list of the available parameters: | Parameter | Description | Type | Required | | --------- | ----------------------------------------------------- | -------- | -------- | | topic | topic name for which external tasks should be fetched | string | ✓ | | options | options about subscription | object | | | handler | function to handle fetched task. Checkout [this](/docs/handler.md) for more information | function | ✓ | The currently supported options are: | Option | Description | Type | Required | Default | |--------------|-------------------------------------------------------------------------------------|--------|----------|-------------------------------------------------------| | lockDuration | specifies the lock duration for this specific handler. | number | | global lockDuration configured in the client instance | | variables | defines a subset of variables available in the handler. | array | | global lockDuration configured in the client instance | | businessKey | A value which allows to filter tasks based on process instance business key | string | | | | processDefinitionId | A value which allows to filter tasks based on process definition id | string | | | | processDefinitionIdIn | A value which allows to filter tasks based on process definition ids | string | | | | processDefinitionKey | A value which allows to filter tasks based on process definition key | string | | | | processDefinitionKeyIn | A value which allows to filter tasks based on process definition keys | string | | | | processDefinitionVersionTag | A value which allows to filter tasks based on process definition Version Tag | string | | | processVariables | A JSON object used for filtering tasks based on process instance variable values. A property name of the object represents a process variable name, while the property value represents the process variable value to filter tasks by. | object | | | | tenantIdIn | A value which allows to filter tasks based on tenant ids | string | | | | withoutTenantId | A value which allows to filter tasks without tenant id | boolean | | | | localVariables | A value which allow to fetch only local variables | boolean | | | | includeExtensionProperties | A value which allow to fetch `extensionProperties` | boolean | | | ### About topic subscriptions A topic subscription, which is returned by the **subscribe()** method, is a an object that provides the following: * **handler:** a function that is executed whenever a task is fetched & locked for the topic subscribed to. * **unsubscribe():** a function to unsubscribe from a topic. * **lockDuration:** the configured lockDuration for this specific topic subscription. * **variables:** the selected subset of variables. ```js const {Client} = require("camunda-external-task-client-js"); const client = new Client({baseUrl: "http://localhost:8080/engine-rest"}); const topicSubscription = client.subscribe( "foo", { // Put your options here processDefinitionVersionTag: "v2" }, async function({task, taskService}) { // Put your business logic } ); // unsubscribe from a topic topicSubscription.unsubscribe(); ``` ## `client.stop()` Stops polling. ## Client Events > Check out [logger](/lib/logger.js) for a better understanding of the usage of events. > Here"s a list of available client events: * `client.on("subscribe", function(topic, topicSubscription) {})` * `client.on("unsubscribe", function(topic, topicSubscription) {})` * `client.on("poll:start", function() {})` * `client.on("poll:stop", function() {})` * `client.on("poll:success", function(tasks) {})` * `client.on("poll:error", function(error) {})` * `client.on("complete:success", function(task) {})` * `client.on("complete:error", function(task, error) {})` * `client.on("handleFailure:success", function(task) {})` * `client.on("handleFailure:error", function(task, error) {})` * `client.on("handleBpmnError:success", function(task) {})` * `client.on("handleBpmnError:error", function(task, error) {})` * `client.on("extendLock:success", function(task) {})` * `client.on("extendLock:error", function(task, error) {})` * `client.on("unlock:success", function(task) {})` * `client.on("unlock:error", function(task, error) {})` * `client.on("lock:success", function(task) {})` * `client.on("lock:error", function(task, error) {})` ### Error The error object exposes the response body of the REST API request and has the following properties: | Property | Description | Type | |----------------|------------------------------------------------------------------------------------------------------------------------------------|--------| | message | A summary of the error, e.g., `Response code 400 (Bad Request); Error: my engine error; Type: ProcessEngineException; Code: 33333` | string | | httpStatusCode | The HTTP status code returned by the REST API, e.g., `400` | number | | engineMsg | The engine error message, e.g., `my engine error` | string | | type | The class name of the exception, e.g., `ProcessEngineException` | string | | code | A numeric exception error code, e.g., `33333`. | number | You can find more information about the exception error code feature in the [Camunda Platform 7 Documentation](https://docs.camunda.org/manual/latest/user-guide/process-engine/error-handling/#exception-codes).