Edits history of script submission #14003 for ' Nextcloud script with preprocessor template (windmill)'

  • bun
    // Nextcloud webhook payload types
    export interface NextcloudWebhookPayload {
      event: NextcloudEvent;
      user: NextcloudUser;
      time: number; // UNIX timestamp in seconds
    }
    
    export interface NextcloudEvent {
      node: NextcloudNode;
      class: string; // e.g. "OCP\\Files\\Events\\Node\\NodeWrittenEvent"
    }
    
    export interface NextcloudNode {
      id: number;
      path: string;
      // optional fields you may see in other events
      storage?: string;
      size?: number;
      name?: string;
    }
    
    export interface NextcloudUser {
      uid: string;
      displayName?: string;
    }
    
    /**
     * Nextcloud Trigger Preprocessor
     * 
     * This function runs BEFORE the main function.
     * 
     * It processes raw Nextcloud webhook trigger data before passing it to `main()`.
     * Supports the available Nextcloud events:
     * - FormSubmittedEvent: Form submissions from Nextcloud Forms
     * - NodeWrittenEvent: File/folder operations (create, update, delete)
     * 
     * The returned object determines `main()` parameters based on event type.
     * 
     * @param event - Nextcloud trigger data and details
     * @returns Processed data for `main()`
     */
    export async function preprocessor(
      event: {
        kind: 'nextcloud',
        payload: NextcloudWebhookPayload,
        base_url: string,
        access_token: string
      },
    ) {
      if (event.kind === 'nextcloud') {
        const payload = event.payload;
    
        const baseEvent = {
          eventType: payload.event.class,
          userId: payload.user.uid,
          timestamp: new Date(payload.time * 1000).toISOString(), // Convert UNIX timestamp to ISO
        };
    
        // Extract event type from class name
        const eventTypeMatch = payload.event.class.match(/(\w+)Event$/);
        const eventType = eventTypeMatch ? eventTypeMatch[1] : 'Unknown';
    
        // Handle specific Nextcloud event types
        switch (eventType) {
          case 'FormSubmitted':
            return {
              ...baseEvent,
              category: 'form',
              user: {
                uid: payload.user.uid,
                displayName: payload.user.displayName || ''
              },
              rawPayload: payload
            };
    
          case 'NodeWritten':
            return {
              ...baseEvent,
              category: 'file',
              user: {
                uid: payload.user.uid,
                displayName: payload.user.displayName || ''
              },
              node: {
                id: payload.event.node.id,
                path: payload.event.node.path,
                storage: payload.event.node.storage,
                size: payload.event.node.size,
                name: payload.event.node.name
              },
              rawPayload: payload
            };
    
          default:
            return {
              ...baseEvent,
              category: 'other',
              eventClass: payload.event.class,
              data: payload.event
            };
        }
      }
    
      throw new Error(`Expected nextcloud trigger kind, got: ${event.kind}`);
    }
    
    /**
     * Main Function - Handles processed Nextcloud events
     * 
     * Called AFTER `preprocessor()`, with its return values.
     * 
     * This example demonstrates integrating with Nextcloud APIs using openapi-fetch
     * and windmill-client, following the official Nextcloud Hub example patterns.
     * 
     * @param eventType - Type of Nextcloud event class name
     * @param category - Event category ('form', 'file', or 'other')
     * @param userId - ID of the user who triggered the event
     * @param user - User information
     * @param node - Node information (for file events)
     * @param eventClass - Full event class name (for other events)
     * @param data - Generic event data (for other events)
     * @param timestamp - Event timestamp
     * @param rawPayload - Raw event payload from Nextcloud
     */
    export async function main(
      eventType: string,
      category: string,
      userId?: string,
      user?: {
        uid: string;
        displayName: string;
      },
      node?: {
        id?: number;
        path?: string;
        storage?: string;
        size?: number;
        name?: string;
      },
      eventClass?: string,
      data?: any,
      timestamp?: string,
      rawPayload?: NextcloudWebhookPayload,
    ) {
        
    }

    Submitted by dieriba.pro916 207 days ago

  • bun
    // Nextcloud webhook payload types
    export interface NextcloudWebhookPayload {
      event: NextcloudEvent;
      user: NextcloudUser;
      time: number; // UNIX timestamp in seconds
    }
    
    export interface NextcloudEvent {
      node: NextcloudNode;
      class: string; // e.g. "OCP\\Files\\Events\\Node\\NodeWrittenEvent"
    }
    
    export interface NextcloudNode {
      id: number;
      path: string;
      // optional fields you may see in other events
      storage?: string;
      size?: number;
      name?: string;
    }
    
    export interface NextcloudUser {
      uid: string;
      displayName?: string;
    }
    
    /**
     * Nextcloud Trigger Preprocessor
     * 
     * This function runs BEFORE the main function.
     * 
     * It processes raw Nextcloud webhook trigger data before passing it to `main()`.
     * Supports the available Nextcloud events:
     * - FormSubmittedEvent: Form submissions from Nextcloud Forms
     * - NodeWrittenEvent: File/folder operations (create, update, delete)
     * 
     * The returned object determines `main()` parameters based on event type.
     * 
     * @param event - Nextcloud trigger data and details
     * @returns Processed data for `main()`
     */
    export async function preprocessor(
      event: {
        kind: 'nextcloud',
        payload: NextcloudWebhookPayload,
      },
    ) {
      if (event.kind === 'nextcloud') {
        const payload = event.payload;
    
        const baseEvent = {
          eventType: payload.event.class,
          userId: payload.user.uid,
          timestamp: new Date(payload.time * 1000).toISOString(), // Convert UNIX timestamp to ISO
        };
    
        // Extract event type from class name
        const eventTypeMatch = payload.event.class.match(/(\w+)Event$/);
        const eventType = eventTypeMatch ? eventTypeMatch[1] : 'Unknown';
    
        // Handle specific Nextcloud event types
        switch (eventType) {
          case 'FormSubmitted':
            return {
              ...baseEvent,
              category: 'form',
              user: {
                uid: payload.user.uid,
                displayName: payload.user.displayName || ''
              },
              rawPayload: payload
            };
    
          case 'NodeWritten':
            return {
              ...baseEvent,
              category: 'file',
              user: {
                uid: payload.user.uid,
                displayName: payload.user.displayName || ''
              },
              node: {
                id: payload.event.node.id,
                path: payload.event.node.path,
                storage: payload.event.node.storage,
                size: payload.event.node.size,
                name: payload.event.node.name
              },
              rawPayload: payload
            };
    
          default:
            return {
              ...baseEvent,
              category: 'other',
              eventClass: payload.event.class,
              data: payload.event
            };
        }
      }
    
      throw new Error(`Expected nextcloud trigger kind, got: ${event.kind}`);
    }
    
    /**
     * Main Function - Handles processed Nextcloud events
     * 
     * Called AFTER `preprocessor()`, with its return values.
     * 
     * This example demonstrates integrating with Nextcloud APIs using openapi-fetch
     * and windmill-client, following the official Nextcloud Hub example patterns.
     * 
     * @param eventType - Type of Nextcloud event class name
     * @param category - Event category ('form', 'file', or 'other')
     * @param userId - ID of the user who triggered the event
     * @param user - User information
     * @param node - Node information (for file events)
     * @param eventClass - Full event class name (for other events)
     * @param data - Generic event data (for other events)
     * @param timestamp - Event timestamp
     * @param rawPayload - Raw event payload from Nextcloud
     */
    export async function main(
      eventType: string,
      category: string,
      userId?: string,
      user?: {
        uid: string;
        displayName: string;
      },
      node?: {
        id?: number;
        path?: string;
        storage?: string;
        size?: number;
        name?: string;
      },
      eventClass?: string,
      data?: any,
      timestamp?: string,
      rawPayload?: NextcloudWebhookPayload,
    ) {
        
    }

    Submitted by dieriba.pro916 209 days ago