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 | |
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 | |
58 | } |
59 |
|