SQS trigger script template

Script windmill Verified

by dieriba.pro916 · 2/11/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) 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)
18
 * @returns Processed data for main()
19
 */
20

21
export async function preprocessor(
22
  event: {
23
    kind: 'sqs',
24
    msg: string,
25
    queue_url: string,
26
    message_id?: string,
27
    receipt_handle?: string,
28
    attributes: Record<string, string>,
29
    message_attributes?: Record<string, {
30
      string_value?: string,
31
      data_type: string
32
    }>
33
  },
34
) {
35
  if (event.kind === 'sqs') {
36
    try {
37
      // We assume the message is a JSON value
38
      const data = JSON.parse(event.msg);
39
      return {
40
        msg: event.msg,
41
        data,
42
        message_attributes: event.message_attributes
43
      };
44
    } catch (error) {
45
      throw new Error("Failed to parse SQS message as JSON");
46
    }
47
  }
48
  
49
  throw new Error(`Expected SQS trigger kind, got: ${event.kind}`);
50
}
51

52
/**
53
 * Main Function - Handles processed trigger events
54
 *
55
 * ⚠️ Called AFTER preprocessor(), with its return values.
56
 *
57
 * @param msg - Raw message content
58
 * @param data - Parsed JSON data
59
 * @param message_attributes - User-defined attributes
60
 */
61
export async function main(
62
  msg: string,
63
  data: any,
64
  message_attributes?: Record<string, { string_value?: string; data_type: string }>
65
) {
66
  // Implement the main function logic here
67
}
68