UNPKG

@nocobase/plugin-workflow

Version:

A powerful BPM tool that provides foundational support for business automation, with the capability to extend unlimited triggers and nodes.

47 lines (46 loc) 2 kB
/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import { Transactionable } from '@nocobase/database'; import type PluginWorkflowServer from './Plugin'; import type { ExecutionModel } from './types'; export default class ExecutionTimeoutManager { private readonly plugin; private readonly timers; private scanTimer; private nextExpiresAtTimer; private nextExpiresAt; private scanning; private stopped; constructor(plugin: PluginWorkflowServer); getTimeout(execution: ExecutionModel): number; getExpiresAt(execution: ExecutionModel, startedAt: Date): Date; load(): Promise<void>; unload(): Promise<void>; isExpired(execution: ExecutionModel, now?: Date): boolean; getRemainingMs(execution: ExecutionModel, now?: Date): number; abort(execution: ExecutionModel, options?: Transactionable): Promise<boolean>; abortExecutionIfExpired(execution: ExecutionModel, options?: Transactionable): Promise<boolean>; private abortExecutionIfExpiredWithLock; clear(executionId: number | string): void; shouldContinue(execution: ExecutionModel, options?: Transactionable): Promise<boolean>; /** * Owner-only per-execution timer. Only call from code paths that have acquired * local execution ownership, such as Dispatcher/Processor processing paths. */ scheduleExecutionTimeout(execution: ExecutionModel): void; invalidateNextExpiresAtIfMatches(expiresAt?: Date | null): void; private scanExpiredExecutions; private scheduleScan; private scheduleNextExpiresAtTimer; private scheduleNextExpiresAtIfEarlier; private handleNextExpiresAtTimeout; private clearNextExpiresAtTimer; private clearExecutionTimeout; private handleExecutionTimeout; }