{"flow":{"id":61,"summary":"MQTT flow with preprocessor template","versions":[216,217,218,219,220,221,222,223,266],"created_by":"dieriba.pro916","created_at":"2025-02-28T13:40:11.290Z","votes":0,"approved":true,"apps":["windmill"],"value":{"modules":[],"preprocessor_module":{"id":"preprocessor","value":{"tag":"","type":"rawscript","content":"/**\n * General Trigger Preprocessor\n * \n * ⚠️ This function runs BEFORE the main function.\n * \n * It processes raw trigger data (e.g., MQTT, HTTP, SQS) before passing it to `main()`.\n * Common tasks:\n * - Convert binary payloads to string/JSON\n * - Extract metadata\n * - Filter messages\n * - Add timestamps/context\n * \n * The returned object determines `main()` parameters:\n * - `{a: 1, b: 2}` → `main(a, b)`\n * - `{payload}` → `main(payload)`\n * \n * @param wm_trigger - Trigger details (e.g., MQTT, HTTP)\n * @param payload - Raw trigger data (format varies by trigger type)\n * @returns Processed data for `main()`\n */\nexport async function preprocessor(\n\tevent: {\n\t\tkind: 'mqtt',\n\t  payload: string, // base64 encoded payload\n    topic: string,\n    retain: boolean,\n    pkid: number,\n    qos: number,\n    v5?: {\n      payload_format_indicator?: number,\n      topic_alias?: number,\n      response_topic?: string,\n      correlation_data?: Array<number>,\n      user_properties?: Array<[string, string]>,\n      subscription_identifiers?: Array<number>,\n      content_type?: string\n    }\n\t},\n) {\n\tif (event.kind === 'mqtt') {\n\t\tconst payloadAsString = atob(event.payload);\n\t\treturn {\n\t\t\tcontentType: event.v5?.content_type,\n\t\t\tpayload: event.payload,\n\t\t\tpayloadAsString\n\t\t};\n\t}\n\t// We assume the script is triggered by an MQTT message, which is why an error is thrown for other trigger kinds.\n\t// If the script is intended to support other triggers, update this logic to handle the respective trigger kind.\n\tthrow new Error(`Expected mqtt trigger kind got: ${event.kind}`)\n}\n","language":"bun","input_transforms":{"event":{"type":"static"}}}}},"schema":{"type":"object","order":["payload","payloadAsString","contentType"],"$schema":"https://json-schema.org/draft/2020-12/schema","required":["payload","payloadAsString"],"properties":{"payload":{"type":"string","default":"","description":"Raw base64 encoded payload"},"contentType":{"type":["string","null"],"description":"The content type of the MQTT message, if available."},"payloadAsString":{"type":"string","description":"The payload decoded as a string."}}},"description":"","recording":null,"vcreated_at":"2025-05-08T12:55:23.966Z","vcreated_by":"hugo697","comments":[]}}