Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
8b3e68f
chore(deps-dev): bump lint-staged from 16.2.3 to 16.2.4
dependabot[bot] Oct 13, 2025
03fbe22
chore(deps): bump github/codeql-action from 3 to 4 in the actions group
dependabot[bot] Oct 13, 2025
1bdf939
Merge branch 'master' into ar2rsawseen/feature/tracking
ar2rsawseen Oct 14, 2025
0f88fda
chore(deps): bump @faker-js/faker from 10.0.0 to 10.1.0 in /ui-tests
dependabot[bot] Oct 15, 2025
39f0dbb
Update changelog
widatama Oct 2, 2025
56acf81
Add entry for version 25.03.XX in CHANGELOG
Cookiezaurs Oct 15, 2025
18cb104
Add checks for pace running and active states
can-angun Oct 15, 2025
6eaec0b
Merge pull request #6796 from Countly/profile-group
widatama Oct 15, 2025
0fb450e
Merge branch 'master' into add-check-stats-page-load
can-angun Oct 15, 2025
ecad025
Merge branch 'master' into dependabot/npm_and_yarn/lint-staged-16.2.4
ar2rsawseen Oct 15, 2025
166124c
Merge pull request #6801 from Countly/add-check-stats-page-load
can-angun Oct 15, 2025
7e512b1
Merge branch 'master' into Cookiezaurs-patch-16
ar2rsawseen Oct 15, 2025
98778fc
Merge pull request #6799 from Countly/Cookiezaurs-patch-16
ar2rsawseen Oct 15, 2025
368fa7c
Merge branch 'master' into dependabot/npm_and_yarn/lint-staged-16.2.4
ar2rsawseen Oct 15, 2025
59b78fa
Merge pull request #6778 from Countly/dependabot/npm_and_yarn/lint-st…
ar2rsawseen Oct 15, 2025
fdb3286
Merge branch 'master' into dependabot/npm_and_yarn/ui-tests/faker-js/…
ar2rsawseen Oct 15, 2025
d90b2f7
chore(deps): bump countly-sdk-nodejs from 24.10.2 to 24.10.3
dependabot[bot] Oct 15, 2025
97bb211
chore(deps): bump puppeteer from 24.23.0 to 24.24.1
dependabot[bot] Oct 15, 2025
acaa616
Merge pull request #6795 from Countly/dependabot/npm_and_yarn/ui-test…
ar2rsawseen Oct 15, 2025
d49cb7e
Merge branch 'master' into dependabot/npm_and_yarn/puppeteer-24.24.1
ar2rsawseen Oct 15, 2025
f137e81
Merge pull request #6794 from Countly/dependabot/npm_and_yarn/puppete…
ar2rsawseen Oct 15, 2025
1f5fc79
Merge branch 'master' into dependabot/npm_and_yarn/countly-sdk-nodejs…
ar2rsawseen Oct 15, 2025
64b90e0
Merge pull request #6793 from Countly/dependabot/npm_and_yarn/countly…
ar2rsawseen Oct 15, 2025
69d1927
Merge branch 'master' into dependabot/github_actions/actions-1893dd32ff
ar2rsawseen Oct 15, 2025
87c6057
Merge pull request #6781 from Countly/dependabot/github_actions/actio…
ar2rsawseen Oct 15, 2025
2a03669
Update CHANGELOG.md
ar2rsawseen Oct 15, 2025
b8253f0
Merge pull request #6808 from Countly/ar2rsawseen-patch-56
ar2rsawseen Oct 15, 2025
f6255a6
Merge branch 'master' into ar2rsawseen/feature/tracking
ar2rsawseen Oct 15, 2025
e7c9f4c
Merge pull request #6656 from Countly/ar2rsawseen/feature/tracking
ar2rsawseen Oct 15, 2025
f577bef
[core] Rename release to prerelease
widatama Oct 16, 2025
4a80819
Merge pull request #6811 from Countly/av-prerelease
widatama Oct 16, 2025
0e80c68
chore: update CHANGELOG
gabrieloliveirapinto Oct 17, 2025
777a4f3
Merge pull request #6816 from Countly/fix-allow-transformation-of-eve…
gabrieloliveirapinto Oct 17, 2025
0e444e7
Consent fixes
ar2rsawseen Oct 17, 2025
382dfda
Merge branch 'master' into ar2rsawseen/master2
ar2rsawseen Oct 17, 2025
ba9bfbc
Update CHANGELOG with recent enterprise fixes
ar2rsawseen Oct 17, 2025
695f6e1
Merge pull request #6818 from Countly/ar2rsawseen/master2
ar2rsawseen Oct 17, 2025
528da0c
[jobs] Fix condition for scheduling alert job
widatama Oct 9, 2025
bd7d1cb
Update changelog
widatama Oct 20, 2025
0732651
Merge pull request #6823 from Countly/alert-job
widatama Oct 21, 2025
7c88f7f
Update changelog
widatama Oct 21, 2025
ae77c17
Merge pull request #6827 from Countly/license-exp
widatama Oct 21, 2025
a04ddc5
Update CHANGELOG.md
gabrieloliveirapinto Oct 21, 2025
56d4bc7
Merge pull request #6830 from Countly/changelog-update-v25.03.24
gabrieloliveirapinto Oct 21, 2025
748372f
Merge remote-tracking branch 'origin/next' into master-v25.03.24-into…
gabrieloliveirapinto Oct 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -52,7 +52,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
Expand All @@ -66,4 +66,4 @@ jobs:
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@
Dependencies:
- Remove SQLite

## Version 25.03.24
Fixes:
- [jobs] Fix condition for scheduling alert job

Enterprise Fixes:
- [compliance-hub] Fixed query patterns
- [data-manager] Fixed bug preventing transformation of events ending in a dot
- [data-manager] Fixed segment data deletion
- [license] Stop sending metric after license expired
- [users] Fix add/remove user to profile group
- [users] Remove link to profile group page after removing user from group

Dependencies
- Bump @faker-js/faker from 10.0.0 to 10.1.0 in /ui-tests
- Bump countly-sdk-nodejs from 24.10.2 to 24.10.3
- Bump lint-staged from 16.2.3 to 16.2.4
- Bump puppeteer from 24.23.0 to 24.24.1

## Version 25.03.23
Fixes:
- [events] Entries in the event list are now sorted alphabetically
Expand Down
2 changes: 1 addition & 1 deletion api/parts/data/usage.js
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,7 @@ plugins.register("/sdk/user_properties", async function(ob) {
userProps.av_major = null;
userProps.av_minor = null;
userProps.av_patch = null;
userProps.av_rel = null;
userProps.av_prerel = null;
userProps.av_build = null;
}
}
Expand Down
49 changes: 25 additions & 24 deletions api/parts/jobs/job.js
Original file line number Diff line number Diff line change
Expand Up @@ -254,32 +254,33 @@ class Job extends EventEmitter {

this._json.next = next.getTime();
}
if (this.name !== "alerts:monitor") {
//check if any job already scheduled or running
let query = {
status: {"$in": [STATUS.SCHEDULED, STATUS.RUNNING]},
name: this.name,
};
if (this._id) {
query._id = {$ne: this._id};
}
var self = this;
return new Promise((resolve, reject) => {
Job.findMany(this.db(), query).then(existing => {
if (existing && existing.length) {
log.d('Job already scheduled or running: %j', existing);
this._json.status = STATUS.CANCELLED; //set this as cancelled now as we have other scheduled
}
else {
self._save().then(resolve, reject);
}

});
});
//check if any job already scheduled or running
let query = {
status: {"$in": [STATUS.SCHEDULED, STATUS.RUNNING]},
name: this.name,
};

if (this.name === 'alerts:monitor' && this.data && Object.keys(this.data).length) {
query.data = this.data;
}
else {
return this._save();

if (this._id) {
query._id = {$ne: this._id};
}

var self = this;
return new Promise((resolve, reject) => {
Job.findMany(this.db(), query).then(existing => {
if (existing && existing.length) {
log.d('Job already scheduled or running: %j', existing);
this._json.status = STATUS.CANCELLED; //set this as cancelled now as we have other scheduled
}
else {
self._save().then(resolve, reject);
}
});
});
}

/**
Expand Down Expand Up @@ -1142,4 +1143,4 @@ module.exports = {
STATUS: STATUS,
STATUS_MAP: STATUS_MAP,
debounce: debounce
};
};
84 changes: 46 additions & 38 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 14 additions & 4 deletions plugins/compliance-hub/api/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ const FEATURE_NAME = 'compliance_hub';

plugins.internalDrillEvents.push("[CLY]_consent");

plugins.register("/master", function() {
common.db.collection('consent_history').ensureIndex({app_id: 1, device_id: 1}, function() {});
common.db.collection('consent_history').ensureIndex({app_id: 1, uid: 1}, function() {});
common.db.collection('consent_history').ensureIndex({app_id: 1, type: 1}, function() {});
common.db.collection('consent_history').ensureIndex({app_id: 1, ts: 1}, function() {});
});

//write api call
plugins.register("/sdk/user_properties", function(ob) {
var params = ob.params;
Expand Down Expand Up @@ -162,7 +169,8 @@ const FEATURE_NAME = 'compliance_hub';
query = {};
}
}
common.db.collection("consent_history").count(query, function(err, total) {
query.app_id = params.app_id.toString();
common.db.collection("consent_history").countDocuments(query, function(err, total) {
if (err) {
common.returnMessage(params, 400, err);
}
Expand Down Expand Up @@ -338,7 +346,7 @@ const FEATURE_NAME = 'compliance_hub';
var newUid = ob.newUser.uid;
if (oldUid !== newUid) {
return new Promise(function(resolve, reject) {
common.db.collection('consent_history').update({uid: oldUid}, {'$set': {uid: newUid}}, {multi: true}, function(err) {
common.db.collection('consent_history').update({uid: oldUid}, {'$set': {app_id: ob.app_id, uid: newUid}}, {multi: true}, function(err) {
if (err) {
reject(err);
return;
Expand All @@ -364,7 +372,7 @@ const FEATURE_NAME = 'compliance_hub';
plugins.register("/i/apps/delete", function(ob) {
var appId = ob.appId;
common.db.collection('consents').remove({'_id': {$regex: appId + ".*"}}, function() {});
common.db.collection('consent_history').drop(function() {});
common.db.collection('consent_history').deleteMany({app_id: appId}, function() {});
if (common.drillDb) {
common.drillDb.collection("drill_events" + crypto.createHash('sha1').update("[CLY]_consent" + appId).digest('hex')).drop(function() {});
}
Expand All @@ -373,7 +381,7 @@ const FEATURE_NAME = 'compliance_hub';
plugins.register("/i/apps/reset", function(ob) {
var appId = ob.appId;
common.db.collection('consents').remove({'_id': {$regex: appId + ".*"}}, function() {});
common.db.collection('consent_history').drop(function() {});
common.db.collection('consent_history').deleteMany({app_id: appId}, function() {});
if (common.drillDb) {
common.drillDb.collection("drill_events" + crypto.createHash('sha1').update("[CLY]_consent" + appId).digest('hex')).drop(function() {});
}
Expand All @@ -382,6 +390,7 @@ const FEATURE_NAME = 'compliance_hub';
plugins.register("/i/apps/clear_all", function(ob) {
var appId = ob.appId;
common.db.collection('consents').remove({'_id': {$regex: appId + ".*"}}, function() {});
common.db.collection('consent_history').deleteMany({app_id: appId}, function() {});
if (common.drillDb) {
common.drillDb.collection("drill_events" + crypto.createHash('sha1').update("[CLY]_consent" + appId).digest('hex')).drop(function() {});
}
Expand All @@ -391,6 +400,7 @@ const FEATURE_NAME = 'compliance_hub';
var appId = ob.appId;
var ids = ob.ids;
common.db.collection('consents').remove({$and: [{'_id': {$regex: appId + ".*"}}, {'_id': {$nin: ids}}]}, function() {});
common.db.collection('consent_history').deleteMany({app_id: appId, ts: {$lt: ob.moment.valueOf()}}, function() {});
if (common.drillDb) {
common.drillDb.collection("drill_events" + crypto.createHash('sha1').update("[CLY]_consent" + appId).digest('hex')).remove({ts: {$lt: ob.moment.valueOf()}}, function() {});
}
Expand Down
32 changes: 0 additions & 32 deletions plugins/compliance-hub/install.js
Original file line number Diff line number Diff line change
@@ -1,32 +0,0 @@
var pluginManager = require('../pluginManager.js'),
async = require('async');

console.log("Installing compliance-hub plugin");
pluginManager.dbConnection().then((countlyDb) => {
countlyDb.collection('apps').find({}).toArray(function(err, apps) {

if (!apps || err) {
console.log("No apps to upgrade");
countlyDb.close();
return;
}
function upgrade(app, done) {
console.log("Adding compliance-hub indexes to " + app.name);
var cnt = 0;
function cb() {
cnt++;
if (cnt == 4) {
done();
}
}
countlyDb.collection('consent_history').ensureIndex({device_id: 1}, cb);
countlyDb.collection('consent_history').ensureIndex({uid: 1}, cb);
countlyDb.collection('consent_history').ensureIndex({type: 1}, cb);
countlyDb.collection('consent_history').ensureIndex({ts: 1}, cb);
}
async.forEach(apps, upgrade, function() {
console.log("Compliance hub plugin installation finished");
countlyDb.close();
});
});
});
Loading
Loading