Email trigger script with preprocessor template

Script windmill Verified

by hugo697 · 9/9/2025

The script

Submitted by hugo697 Bun
Verified 245 days ago
1
/**
2
 * Trigger Preprocessor
3
 *
4
 * ⚠️ This function runs BEFORE the main function.
5
 *
6
 * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to `main()`.
7
 * Common tasks:
8
 * - Convert binary payloads to string/JSON
9
 * - Extract metadata
10
 * - Filter messages
11
 * - Add timestamps/context
12
 *
13
 * The returned object determines `main()` parameters:
14
 * - `{a: 1, b: 2}` → `main(a, b)`
15
 *
16
 * @param event - Trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
17
 * @returns Processed data for `main()`
18
 */
19
export async function preprocessor(
20
  event: {
21
    kind: 'email';
22
    parsed_email: any;
23
    raw_email: string;
24
    email_extra_args?: Record<string, string>
25
  }
26
) {
27
  if (event.kind === 'email') {
28
    return {
29
      parsed_email: event.parsed_email,
30
      raw_email: event.raw_email,
31
      email_extra_args: event.email_extra_args,
32
    };
33
  }
34

35
  throw new Error(`Expected email trigger kind, got: ${event.kind}`);
36
}
37

38
/**
39
 * Main Function - Handles processed trigger events
40
 *
41
 * ⚠️ Called AFTER `preprocessor()`, with its return values.
42
 *
43
 * @param parsed_email - Parsed email
44
 * @param raw_email - Raw email as string
45
 * @param email_extra_args - Extra email arguments
46
 */
47
export async function main(
48
  parsed_email: any,
49
  raw_email: string,
50
  email_extra_args?: Record<string, string>
51
) {
52
  // Implement the main function logic here
53
}
54