- config.ts: add SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM
- engine.ts: prepare() queries real scrips from DB, matches by queue_id + condition_type, loads lifecycle for OnResolve context, renders Handlebars templates, builds PreparedScrip. commit() dispatches to real action executors.
- actions.ts: SendEmail via nodemailer SMTP, Webhook via fetch POST, SetCustomField writes to custom_field_values table
- conditions.ts: OnResolve uses LifecycleValidator.isResolvedStatus()
- tickets.ts: updated to pass lifecycleDef context to scrip engine
- nodemailer installed
- Port changed to 9876 (8080 occupied by Apache)
Verification: bun run src/index.ts starts server, GET /health returns {"status":"ok","version":"0.1.0"}
15 lines
503 B
TypeScript
15 lines
503 B
TypeScript
import { z } from 'zod/v4';
|
|
|
|
const configSchema = z.object({
|
|
DATABASE_URL: z.string().min(1),
|
|
SERVER_HOST: z.string().default('127.0.0.1'),
|
|
SERVER_PORT: z.coerce.number().int().positive().default(8080),
|
|
SMTP_HOST: z.string().default('localhost'),
|
|
SMTP_PORT: z.coerce.number().int().positive().default(587),
|
|
SMTP_USER: z.string().optional(),
|
|
SMTP_PASS: z.string().optional(),
|
|
SMTP_FROM: z.string().default('tessera@localhost'),
|
|
});
|
|
|
|
export const config = configSchema.parse(process.env);
|