repo_description: Parse Server for Node.js / Express
repo_topics: baas backend file-storage graphql graphql-api graphql-relay graphql-server hacktoberfest mbaas mongodb nodejs notifications object-storage parse-platform parse-server postgres relay rest-api
code: import { ParsePubSub } from './ParsePubSub';
  import Parse from 'parse/node';
  import logger from '../logger';
  
  class ParseCloudCodePublisher {
    parsePublisher: Object;
  
    // config object of the publisher, right now it only contains the redisURL,
    // but we may extend it later.
    constructor(config: any = {}) {
      this.parsePublisher = ParsePubSub.createPublisher(config);
    }
  
    async connect() {
      if (typeof this.parsePublisher.connect === 'function') {
        if (this.parsePublisher.isOpen) {
          return;
        }
        return Promise.resolve(this.parsePublisher.connect());
      }
    }
  
    onCloudCodeAfterSave(request: any): void {
      this._onCloudCodeMessage(Parse.applicationId + 'afterSave', request);
    }
  
    onCloudCodeAfterDelete(request: any): void {
      this._onCloudCodeMessage(Parse.applicationId + 'afterDelete', request);
    }
  
    onClearCachedRoles(user: Parse.Object) {
      this.parsePublisher.publish(
        Parse.applicationId + 'clearCache',
        JSON.stringify({ userId: user.id })
      );
    }
  
    // Request is the request object from cloud code functions. request.object is a ParseObject.
    _onCloudCodeMessage(type: string, request: any): void {
      logger.verbose(
        'Raw request from cloud code current : %j | original : %j',
        request.object,
        request.original
      );
      // We need the full JSON which includes className
      const message = {
        currentParseObject: request.object._toFullJSON(),
      };
      if (request.original) {
        message.originalParseObject = request.original._toFullJSON();
      }
      if (request.classLevelPermissions) {
        message.classLevelPermissions = request.classLevelPermissions;
      }
      this.parsePublisher.publish(type, JSON.stringify(message));
    }
  }
  
  export { ParseCloudCodePublisher };
  