/* eslint-disable prefer-arrow-callback */ import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import { check } from 'meteor/check'; import Perlin from 'loms.perlin'; import Subscriptions from '../Subscriptions'; Perlin.seed(Math.random()); Meteor.publishTransformed('userSubsToFires', function transform() { // https://en.wikipedia.org/wiki/Location_obfuscation // https://en.wikipedia.org/wiki/Decimal_degrees#Precision // https://gis.stackexchange.com/questions/27792/what-simple-effective-techniques-for-obfuscating-points-are-available return Subscriptions.find().serverTransform(function transformDoc(odoc) { const doc = odoc; // Destructuring gives me an error: "Cannot destructure property `location` of 'undefined'" const location = doc.location; /* doc.lat = location.lat; * doc.lon = location.lon; */ let lat; let lon; if (location) { lat = Math.round(location.lat * 10) / 10; lon = Math.round(location.lon * 10) / 10; // console.log(`[${lat}, ${lon}]`); const noiseBase = Perlin.perlin2(lat, lon); const noise = Math.abs(noiseBase / 3); // console.log(`Noise ${noise}, abs: ${Math.abs(noise)}`); lat += noise; lon += noise; doc.location.lat = lat; doc.location.lon = lon; doc.distance += noiseBase; } // console.log(`with noise: [${doc.lat}, ${doc.lon}]`); delete doc.chatId; delete doc.geo; return doc; }); }); Meteor.publish('mysubscriptions', function subscriptions() { return Subscriptions.find({ owner: this.userId }); // type: 'web' }); // Note: subscriptions.view is also used when editing an existing subscription. Meteor.publish('subscriptions.view', function subscriptionsView(subscriptionId) { check(subscriptionId, String); const id = new Mongo.ObjectID(subscriptionId); check(id, Meteor.Collection.ObjectID); return Subscriptions.find({ _id: id, owner: this.userId, type: 'web' }); });