Edits history of script submission #11463 for ' NATS trigger script with preprocessor example (windmill)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    /**
     * General Trigger Preprocessor
     *
     * ⚠️ This function runs BEFORE the main function.
     *
     * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to main().
     * Common tasks:
     * - Convert binary payloads to string/JSON
     * - Extract metadata
     * - Filter messages
     * - Add timestamps/context
     *
     * The returned object determines main() parameters:
     * - {a: 1, b: 2} → main(a, b)
     * - {msg} → main(msg)
     *
     * @param event - Trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
     * @returns Processed data for main()
     */
    export async function preprocessor(
      event: {
        kind: 'nats',
        payload: string, // base64 encoded payload
        servers: string[],
        subject: string,
        headers?: Record<string, string[]>,
        status?: number,
        description?: string,
        length: number
      },
    ) {
      if (event.kind === 'nats') {
        try {
          const msg = atob(event.payload)
          // Assuming the message received is a JSON value
          const data = JSON.parse(msg);
    
          return {
            msg,
            data,
            nats: event.headers
          };
        } catch (error) {
          throw new Error("Failed to parse NATS message as JSON");
        }
        
      }
      
      throw new Error(`Expected nats trigger kind, got: ${event.kind}`);
    }
    
    /**
     * Main Function - Handles processed trigger events
     *
     * ⚠️ Called AFTER preprocessor(), with its return values.
     *
     * @param msg - Decoded message content
     * @param data - Parsed JSON data from the NATS message
     * @param headers - messages headers
     */
    export async function main(
      msg: string,
      data: any,
      headers?: Record<string, string[]>
    ) {
      // Implement the main function logic here
    }
    

    Submitted by hugo697 369 days ago

  • bun
    /**
     * General Trigger Preprocessor
     *
     * ⚠️ This function runs BEFORE the main function.
     *
     * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to main().
     * Common tasks:
     * - Convert binary payloads to string/JSON
     * - Extract metadata
     * - Filter messages
     * - Add timestamps/context
     *
     * The returned object determines main() parameters:
     * - {a: 1, b: 2} → main(a, b)
     * - {msg} → main(msg)
     *
     * @param event - Trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
     * @returns Processed data for main()
     */
    export async function preprocessor(
      event: {
        kind: 'nats',
        payload: string, // base64 encoded payload
        servers: string[],
        subject: string,
        headers?: Record<string, string[]>,
        status?: number,
        description?: string,
        length: number
      },
    ) {
      if (event.kind === 'nats') {
        try {
          const msg = atob(event.payload)
          // Assuming the message received is a JSON value
          const data = JSON.parse(msg);
    
          return {
            msg,
            data,
            nats: event.headers
          };
        } catch (error) {
          throw new Error("Failed to parse NATS message as JSON");
        }
        
      }
      
      throw new Error(`Expected nats trigger kind, got: ${event.kind}`);
    }
    
    /**
     * Main Function - Handles processed trigger events
     *
     * ⚠️ Called AFTER preprocessor(), with its return values.
     *
     * @param msg - Raw message content
     * @param data - Parsed JSON data from the NATS message
     * @param headers - messages headers
     */
    export async function main(
      msg: string,
      data: any,
      headers?: Record<string, string[]>
    ) {
      // Implement the main function logic here
    }
    

    Submitted by hugo697 369 days ago

  • bun
    /**
     * General Trigger Preprocessor
     *
     * ⚠️ This function runs BEFORE the main function.
     *
     * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to main().
     * Common tasks:
     * - Convert binary payloads to string/JSON
     * - Extract metadata
     * - Filter messages
     * - Add timestamps/context
     *
     * The returned object determines main() parameters:
     * - {a: 1, b: 2} → main(a, b)
     * - {msg} → main(msg)
     *
     * @param wm_trigger - Trigger details (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
     * @param msg - Message received from NATS
     * @returns Processed data for main()
     */
    
    export async function preprocessor(
      wm_trigger: {
        kind: 'http' | 'email' | 'webhook' | 'websocket' | 'kafka' | 'nats' | 'postgres' | 'sqs' | 'mqtt',
        nats?: {
          servers: string[],
          subject: string,
          headers?: Record<string, string[]>,
          status?: number,
          description?: string,
          length: number
        }
      },
      msg: string
    ) {
      if (wm_trigger.kind === 'nats' && wm_trigger.nats) {
        let data;
        try {
          // Assuming the message received is a JSON value
          data = JSON.parse(msg);
        } catch (error) {
          throw new Error("Failed to parse NATS message as JSON");
        }
        
        return {
          msg,
          data,
          nats: wm_trigger.nats
        };
      }
      
      throw new Error(`Expected nats trigger kind, got: ${wm_trigger.kind}`);
    }
    
    /**
     * Main Function - Handles processed trigger events
     *
     * ⚠️ Called AFTER preprocessor(), with its return values.
     *
     * @param msg - Raw message content
     * @param data - Parsed JSON data from the NATS message
     * @param nats - NATS metadata object
     */
    export async function main(
      msg: string,
      data: any,
      nats: {
        servers: string[],
        subject: string,
        headers?: Record<string, string[]>,
        status?: number,
        description?: string,
        length: number
      }
    ) {
      // Implement the main function logic here
    }
    

    Submitted by dieriba.pro916 435 days ago

  • bun
    /**
     * General Trigger Preprocessor
     *
     * ⚠️ This function runs BEFORE the main function.
     *
     * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to main().
     * Common tasks:
     * - Convert binary payloads to string/JSON
     * - Extract metadata
     * - Filter messages
     * - Add timestamps/context
     *
     * The returned object determines main() parameters:
     * - {a: 1, b: 2} → main(a, b)
     * - {msg} → main(msg)
     *
     * @param wm_trigger - Trigger details (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
     * @param msg - Raw trigger data (format varies by trigger type)
     * @returns Processed data for main()
     */
    
    export async function preprocessor(
      wm_trigger: {
        kind: 'http' | 'email' | 'webhook' | 'websocket' | 'kafka' | 'nats' | 'postgres' | 'sqs' | 'mqtt',
        nats?: {
          servers: string[],
          subject: string,
          headers?: Record<string, string[]>,
          status?: number,
          description?: string,
          length: number
        }
      },
      msg: string
    ) {
      if (wm_trigger.kind === 'nats' && wm_trigger.nats) {
        let data;
        try {
          // Assuming the message received is a JSON value
          data = JSON.parse(msg);
        } catch (error) {
          throw new Error("Failed to parse NATS message as JSON");
        }
        
        return {
          msg,
          data,
          nats: wm_trigger.nats
        };
      }
      
      throw new Error(`Expected nats trigger kind, got: ${wm_trigger.kind}`);
    }
    
    /**
     * Main Function - Handles processed trigger events
     *
     * ⚠️ Called AFTER preprocessor(), with its return values.
     *
     * @param msg - Raw message content
     * @param data - Parsed JSON data from the NATS message
     * @param nats - NATS metadata object
     */
    export async function main(
      msg: string,
      data: any,
      nats: {
        servers: string[],
        subject: string,
        headers?: Record<string, string[]>,
        status?: number,
        description?: string,
        length: number
      }
    ) {
      // Implement the main function logic here
    }
    

    Submitted by dieriba.pro916 435 days ago

  • bun
    /**
     * General Trigger Preprocessor
     *
     * ⚠️ This function runs BEFORE the main function.
     *
     * It processes raw trigger data (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS) before passing it to `main()`.
     * Common tasks:
     * - Convert binary payloads to string/JSON
     * - Extract metadata
     * - Filter messages
     * - Add timestamps/context
     *
     * The returned object determines `main()` parameters:
     * - `{a: 1, b: 2}` → `main(a, b)`
     * - `{msg}` → `main(msg)`
     *
     * @param wm_trigger - Trigger details (e.g., MQTT, HTTP, SQS, WebSocket, Kafka, NATS)
     * @param msg - Raw trigger data from NATS
     * @returns Processed data for `main()`
     */
    export async function preprocessor(
      wm_trigger: {
        kind: 'http' | 'email' | 'webhook' | 'websocket' | 'kafka' | 'nats' | 'postgres' | 'sqs',
        nats?: {
          servers: string[];
          subject: string;
          headers?: Record<string, string[]>;
          status?: number;
          description?: string;
          length: number;
        };
      },
      msg: string
    ) {
      if (wm_trigger.kind === 'nats' && wm_trigger.nats) {
        return {
          nats: wm_trigger.nats,
          msg
        };
      }
    
      throw new Error(`Expected nats trigger kind, got: ${wm_trigger.kind}`);
    }
    
    /**
     * Main Function - Handles processed trigger events
     *
     * ⚠️ Called AFTER `preprocessor()`, with its return values.
     *
     * @param msg - Raw message from NATS
     * @param nats - NATS event metadata
     */
    export async function main(
      msg: string,
      nats: {
        servers: string[];
        subject: string;
        headers?: Record<string, string[]>;
        status?: number;
        description?: string;
        length: number;
      }
    ) {
      // Implement the main function logic here
    }
    
    

    Submitted by dieriba.pro916 435 days ago