Service Library - messagingCenter

This document provides a complete reference of the custom code library for the messagingCenter service. It includes all library functions, edge functions with their REST endpoints, templates, and assets.

Library Functions

Library functions are reusable modules available to all business APIs and other custom code within the service via require("lib/<moduleName>").

validateParticipantsCount.js

module.exports = function validateParticipantsCount(participantIds,isGroup) {
  if (!Array.isArray(participantIds)) return false;
  const uniqueCount = new Set(participantIds).size;
  if (isGroup) {
    return uniqueCount >= 2;
  } else {
    return uniqueCount === 2;
  }
};

isThreadAccessibleByUser.js

module.exports = function isThreadAccessibleByUser(threadOrThreadCtx,session) {
  if(!threadOrThreadCtx||!session||!session.userId) return false;
  if(['superAdmin','admin'].includes(session.roleId)) return true;
  if(Array.isArray(threadOrThreadCtx.participantIds))
    return threadOrThreadCtx.participantIds.includes(session.userId);
  return false;
};

canUpdateThread.js

module.exports = function canUpdateThread(apiContext,session,thread) {
  if(!session||!thread) return false;
  if(['superAdmin','admin'].includes(session.roleId)) return true;
  if(thread.createdBy===session.userId) return true;
  if(Array.isArray(thread.participantIds)&&thread.participantIds.includes(session.userId)){
    // Only allow subject/threadStatus update for participants
    return true;
  }
  return false;
};

isMessageSendAllowed.js

module.exports = function isMessageSendAllowed(userId,thread) {
  if(!thread||!userId) return false;
  if(Array.isArray(thread.participantIds)){
    return thread.participantIds.includes(userId);
  }
  return false;
};

canUpdateMessage.js

module.exports = function canUpdateMessage(session,msgInstance,updateInput) {
  if(!session||!msgInstance) return false;
  const isAdmin = ['superAdmin','admin'].includes(session.roleId);
  const upFields = Object.keys(updateInput||{});
  // Only admin can update moderationStatus, flaggedReason, adminAction
  if(
    upFields.some(f=>['moderationStatus','flaggedReason','adminAction'].includes(f))
    && !isAdmin
  )return false;
  // Only sender can update content if not flagged/removed
  if(upFields.includes('content')) {
    if(msgInstance.senderId===session.userId && ['normal'].includes(msgInstance.moderationStatus)){
      return true;
    }
    return false;
  }
  return isAdmin; // allow if admin
};

canDeleteMessage.js

module.exports = function canDeleteMessage(session,msgInstance) {
  if(!session||!msgInstance) return false;
  if(['superAdmin','admin'].includes(session.roleId)) return true;
  if(msgInstance.senderId===session.userId && ['normal'].includes(msgInstance.moderationStatus)){
    return true;
  }
  return false;
};

This document was generated from the service library configuration and should be kept in sync with design changes.