HTTP trigger script with preprocessor template

Script windmill Verified

by dieriba.pro916 · 3/3/2025

The script

Submitted by dieriba.pro916 Bun
Verified 361 days ago
1
/**
2
 * General 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
 * - `{http}` → `main(http)`
16
 *
17
 * @param event - Trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
18
 * @returns Processed data for `main()`
19
 */
20
export async function preprocessor(
21
  event: {
22
    kind: 'http';
23
    body: any;
24
    raw_string: string | null;
25
    route: string;
26
    path: string;
27
    method: string;
28
    params: Record<string, string>; // path params
29
    query: Record<string, string>; // query params
30
    headers: Record<string, string>;
31
  }
32
) {
33
  if (event.kind === 'http') {
34
    return {
35
      body: event.body,
36
      params: event.params,
37
      query: event.query,
38
    };
39
  }
40

41
  throw new Error(`Expected http trigger kind, got: ${event.kind}`);
42
}
43

44
/**
45
 * Main Function - Handles processed trigger events
46
 *
47
 * ⚠️ Called AFTER `preprocessor()`, with its return values.
48
 *
49
 * @param body - HTTP request body
50
 * @param params - Path parameters from the HTTP request
51
 * @param query - Query parameters from the HTTP request
52
 */
53
export async function main(
54
  body: any,
55
  params: Record<string, string>,
56
  query: Record<string, string>
57
) {
58
  // Implement the main function logic here
59
}
60