| 1234567891011121314151617181920212223242526272829303132333435 | import { ReactiveCache } from '/imports/reactiveCache';Meteor.methods({  watch(watchableType, id, level) {    check(watchableType, String);    check(id, String);    check(level, Match.OneOf(String, null));    const userId = Meteor.userId();    let watchableObj = null;    let board = null;    if (watchableType === 'board') {      watchableObj = ReactiveCache.getBoard(id);      if (!watchableObj) throw new Meteor.Error('error-board-doesNotExist');      board = watchableObj;    } else if (watchableType === 'list') {      watchableObj = ReactiveCache.getList(id);      if (!watchableObj) throw new Meteor.Error('error-list-doesNotExist');      board = watchableObj.board();    } else if (watchableType === 'card') {      watchableObj = ReactiveCache.getCard(id);      if (!watchableObj) throw new Meteor.Error('error-card-doesNotExist');      board = watchableObj.board();    } else {      throw new Meteor.Error('error-json-schema');    }    if (board.permission === 'private' && !board.hasMember(userId))      throw new Meteor.Error('error-board-notAMember');    watchableObj.setWatcher(userId, level);    return true;  },});
 |