text: import _ from 'underscore';
  
  Meteor.methods({
  	loadSurroundingMessages(message, limit = 50) {
  		check(message, Object);
  		check(limit, Number);
  
  		if (!Meteor.userId()) {
  			throw new Meteor.Error('error-invalid-user', 'Invalid user', {
  				method: 'loadSurroundingMessages'
  			});
  		}
  
  		const fromId = Meteor.userId();
  
  		if (!message._id) {
  			return false;
  		}
  
  		message = RocketChat.models.Messages.findOneById(message._id);
  
  		if (!message || !message.rid) {
  			return false;
  		}
  
  		if (!Meteor.call('canAccessRoom', message.rid, fromId)) {
  			return false;
  		}
  
  		limit = limit - 1;
  
  		const options = {
  			sort: {
  				ts: -1
  			},
  			limit: Math.ceil(limit / 2)
  		};
  
  		if (!RocketChat.settings.get('Message_ShowEditedStatus')) {
  			options.fields = {
  				editedAt: 0
  			};
  		}
  
  		const recordsBefore = RocketChat.models.Messages.findVisibleByRoomIdBeforeTimestamp(message.rid, message.ts, options).fetch();
  
  		const messages = recordsBefore.map((message) => {
  			message.starred = _.findWhere(message.starred, {
  				_id: fromId
  			});
  			return message;
  		});
  
  		const moreBefore = messages.length === options.limit;
  
  		messages.push(message);
  
  		options.sort = {
  			ts: 1
  		};
  
  		options.limit = Math.floor(limit / 2);
  
  		const recordsAfter = RocketChat.models.Messages.findVisibleByRoomIdAfterTimestamp(message.rid, message.ts, options).fetch();
  		const afterMessages = recordsAfter.map((message) => {
  			message.starred = _.findWhere(message.starred, {
  				_id: fromId
  			});
  			return message;
  		});
  
  		const moreAfter = afterMessages.length === options.limit;
  
  		return {
  			messages: messages.concat(afterMessages),
  			moreBefore,
  			moreAfter
  		};
  	}
  });
  