From 3ebeac6b301ff0dac3d13c7568bb3ce4bcc9a9d5 Mon Sep 17 00:00:00 2001 From: Harry Adel Date: Thu, 5 Mar 2026 05:16:40 +0200 Subject: [PATCH] Replace konecty:mongo-counter with inline implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the konecty:mongo-counter Meteor package dependency and replace it with a minimal inline incrementCounter function using raw MongoDB findOneAndUpdate. Also exports an async version for future Meteor 3.0 migration. No data migration needed — uses the same next_val field. --- .meteor/packages | 1 - .meteor/versions | 1 - models/counters.js | 24 ++++++++++++++++++++++++ models/orgUser.js | 4 +++- models/usersessiondata.js | 4 +++- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/.meteor/packages b/.meteor/packages index 3211eb507..b591e9628 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -60,7 +60,6 @@ msavin:usercache meteorhacks:subs-manager meteorhacks:aggregate@1.3.0 wekan-markdown -konecty:mongo-counter quave:synced-cron ostrio:cookies ostrio:files@2.3.0 diff --git a/.meteor/versions b/.meteor/versions index 8fa670345..f8188f7f5 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -48,7 +48,6 @@ http@2.0.0 id-map@1.1.1 inter-process-messaging@0.1.1 jquery@3.0.0 -konecty:mongo-counter@0.0.5_3 lmieulet:meteor-coverage@1.1.4 localstorage@1.2.0 logging@1.3.4 diff --git a/models/counters.js b/models/counters.js index 232353fbe..144d5b5b9 100644 --- a/models/counters.js +++ b/models/counters.js @@ -1 +1,25 @@ +import { Meteor } from 'meteor/meteor'; + Counters = new Mongo.Collection('counters'); + +// Async version (for future Meteor 3.0 migration) +async function incrementCounterAsync(counterName, amount = 1) { + const result = await Counters.rawCollection().findOneAndUpdate( + { _id: counterName }, + { $inc: { next_val: amount } }, + { upsert: true, returnDocument: 'after' }, + ); + return result.value ? result.value.next_val : result.next_val; +} + +// Sync version (for Meteor 2.x autoValue compatibility) +const incrementCounter = Meteor.wrapAsync(async (counterName, amount, callback) => { + try { + const result = await incrementCounterAsync(counterName, amount); + callback(null, result); + } catch (err) { + callback(err); + } +}); + +export { incrementCounter, incrementCounterAsync }; diff --git a/models/orgUser.js b/models/orgUser.js index aea757587..8eecc86fc 100644 --- a/models/orgUser.js +++ b/models/orgUser.js @@ -1,3 +1,5 @@ +import { incrementCounter } from './counters'; + OrgUser = new Mongo.Collection('orgUser'); /** @@ -14,7 +16,7 @@ OrgUser.attachSchema( // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert && !this.isSet) { - return incrementCounter('counters', 'orgUserId', 1); + return incrementCounter('orgUserId', 1); } }, }, diff --git a/models/usersessiondata.js b/models/usersessiondata.js index a100574e6..04be3748e 100644 --- a/models/usersessiondata.js +++ b/models/usersessiondata.js @@ -1,3 +1,5 @@ +import { incrementCounter } from './counters'; + SessionData = new Mongo.Collection('sessiondata'); /** @@ -14,7 +16,7 @@ SessionData.attachSchema( // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert && !this.isSet) { - return incrementCounter('counters', 'orgId', 1); + return incrementCounter('orgId', 1); } }, },