import { Check, Column, CreateDateColumn, DeleteDateColumn, Entity, Index, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; import { CronTriggerSettings, DatabaseEventTriggerSettings, HttpRouteTriggerSettings, ServerRouteTriggerSettings, ToolTriggerSettings, WorkflowActionTriggerSettings, } from 'twenty-shared/application'; import { SyncableEntity } from 'src/engine/workspace-manager/types/syncable-entity.interface'; import { type JsonbProperty } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/jsonb-property.type'; const DEFAULT_LOGIC_FUNCTION_TIMEOUT_SECONDS = 300; // 5 minutes export enum LogicFunctionRuntime { NODE18 = 'nodejs18.x', NODE22 = 'nodejs22.x', } export enum LogicFunctionExecutionMode { LIVE = 'LIVE', PREBUILT = 'PREBUILT', } @Entity('logicFunction') @Index('IDX_LOGIC_FUNCTION_ID_DELETED_AT', ['id', 'deletedAt']) export class LogicFunctionEntity extends SyncableEntity implements Required { @PrimaryGeneratedColumn('uuid') id: string; @Column({ nullable: false }) name: string; @Column({ nullable: false }) sourceHandlerPath: string; @Column({ nullable: false }) builtHandlerPath: string; @Column({ nullable: false }) handlerName: string; @Column({ nullable: true, type: 'varchar' }) description: string | null; @Column({ nullable: false, default: LogicFunctionRuntime.NODE22 }) runtime: LogicFunctionRuntime; @Column({ nullable: false, default: DEFAULT_LOGIC_FUNCTION_TIMEOUT_SECONDS }) @Check(`"timeoutSeconds" >= 1 AND "timeoutSeconds" <= 900`) timeoutSeconds: number; @Column({ nullable: true, type: 'text' }) checksum: string | null; @Column({ nullable: false, type: 'boolean', default: true }) isBuildUpToDate: boolean; @Column({ type: 'enum', enum: LogicFunctionExecutionMode, default: LogicFunctionExecutionMode.LIVE, nullable: false, }) executionMode: LogicFunctionExecutionMode; @Column({ nullable: true, type: 'jsonb' }) cronTriggerSettings: JsonbProperty | null; @Column({ nullable: true, type: 'jsonb' }) databaseEventTriggerSettings: JsonbProperty | null; @Column({ nullable: true, type: 'jsonb' }) httpRouteTriggerSettings: JsonbProperty | null; @Column({ nullable: true, type: 'jsonb' }) serverRouteTriggerSettings: JsonbProperty | null; @Column({ nullable: true, type: 'jsonb' }) toolTriggerSettings: JsonbProperty | null; @Column({ nullable: true, type: 'jsonb' }) workflowActionTriggerSettings: JsonbProperty | null; @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; @UpdateDateColumn({ type: 'timestamptz' }) updatedAt: Date; @DeleteDateColumn({ type: 'timestamptz' }) deletedAt: Date | null; }