WebSocket trigger script with preprocessor template

Script windmill Verified

by dieriba.pro916 · 3/3/2025

The script

Submitted by dieriba.pro916 Bun
Verified 369 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) 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
 * - {msg} → main(msg)
16
 *
17
 * @param event - Trigger data (e.g., MQTT, HTTP, SQS, WebSocket)
18
 * @returns Processed data for main()
19
 */
20
export async function preprocessor(
21
  event: {
22
    kind: 'http' | 'email' | 'webhook' | 'websocket' | 'kafka' | 'nats' | 'postgres' | 'sqs' | 'mqtt',
23
    msg: string
24
    url: string // The WebSocket URL
25
  },
26
) {
27
  if (event.kind === 'websocket') {
28
    let data;
29
    try {
30
      // Assuming the message received is a JSON value
31
      data = JSON.parse(event.msg);
32
    } catch (error) {
33
      throw new Error("Failed to parse WebSocket message as JSON");
34
    }
35
    
36
    return {
37
      msg: event.msg,
38
      data,
39
    };
40
  }
41
  
42
  throw new Error(`Expected websocket trigger kind, got: ${event.kind}`);
43
}
44

45
/**
46
 * Main Function - Handles processed trigger events
47
 *
48
 * ⚠️ Called AFTER preprocessor(), with its return values.
49
 *
50
 * @param msg - Raw message content
51
 * @param data - Parsed JSON data from the WebSocket message
52
 */
53
export async function main(
54
  msg: string,
55
  data: any,
56
) {
57
  // Implement the main function logic here
58
}
59