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 | |
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 | |
67 | } |
68 |
|