diff --git a/lib/mixpanel-node.d.ts b/lib/mixpanel-node.d.ts index 6b00577..9254f75 100644 --- a/lib/mixpanel-node.d.ts +++ b/lib/mixpanel-node.d.ts @@ -64,6 +64,8 @@ declare namespace mixpanel { alias(distinctId: string, alias: string, callback?: Callback): void; + merge(distinctIds: string, distinctId2: string, callback?: Callback): void; + people: People; groups: Groups; diff --git a/lib/mixpanel-node.js b/lib/mixpanel-node.js index e7dc125..e3b4bb2 100644 --- a/lib/mixpanel-node.js +++ b/lib/mixpanel-node.js @@ -434,6 +434,25 @@ var create_client = function(token, config) { metrics.track('$create_alias', properties, callback); }; + /** + merge(distinct_id_1, distinct_id_2) + --- + This function merges 2 distinct_id s + + For more information look at: + https://developer.mixpanel.com/reference/identity-merge + + distinct_id_1:string one distinct id + distinct_id_2:string a second distinct id + */ + metrics.merge = function(distinct_id_1, distinct_id_2, callback) { + var properties = { + distinct_ids: [distinct_id_1, distinct_id_2] + }; + + metrics.import('$merge', new Date().getDate(), properties, callback); + }; + metrics.groups = new MixpanelGroups(metrics); metrics.people = new MixpanelPeople(metrics); diff --git a/test/merge.js b/test/merge.js new file mode 100644 index 0000000..a579c88 --- /dev/null +++ b/test/merge.js @@ -0,0 +1,39 @@ +var Mixpanel = require('../lib/mixpanel-node'), + Sinon = require('sinon'); + +exports.merge = { + setUp: function(next) { + this.mixpanel = Mixpanel.init('token', { key: 'key' }); + + Sinon.stub(this.mixpanel, 'send_request'); + + next(); + }, + + tearDown: function(next) { + this.mixpanel.send_request.restore(); + + next(); + }, + + "calls send_request with correct endpoint and data": function(test) { + var distinct_id_1 = "distinct_id1", + distinct_id_2 = "distinct_id2", + expected_endpoint = "/import", + expected_data = { + event: '$merge', + properties: { + distinct_ids: [distinct_id_1, distinct_id_2], + token: 'token' + } + }; + + this.mixpanel.merge(distinct_id_1, distinct_id_2); + test.ok( + this.mixpanel.send_request.calledWithMatch({ endpoint: expected_endpoint, data: expected_data }), + "merge didn't call send_request with correct arguments" + ); + + test.done(); + } +};