Skip to content
This repository was archived by the owner on Sep 3, 2022. It is now read-only.

Commit 217689a

Browse files
authored
Generate MessageId (#106)
1 parent a2ad22c commit 217689a

File tree

4 files changed

+110
-15
lines changed

4 files changed

+110
-15
lines changed

lib/normalize.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ var each = require('@ndhoule/each');
1010
var includes = require('@ndhoule/includes');
1111
var map = require('@ndhoule/map');
1212
var type = require('component-type');
13+
var uuid = require('uuid').v4;
14+
var json = require('json3');
15+
var md5 = require('spark-md5').hash;
1316

1417
/**
1518
* HOP.
@@ -75,6 +78,9 @@ function normalize(msg, list) {
7578
}
7679
}, opts);
7780

81+
// generate and attach a messageId to msg
82+
msg.messageId = 'ajs-' + md5(json.stringify(msg) + uuid());
83+
7884
// cleanup
7985
delete msg.options;
8086
ret.integrations = integrations;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"install": "^0.7.3",
6767
"is": "^3.1.0",
6868
"json3": "^3.3.2",
69+
"spark-md5": "^2.0.2",
6970
"new-date": "^1.0.0",
7071
"next-tick": "^0.2.2",
7172
"segmentio-facade": "^3.0.2",

test/normalize.test.js

Lines changed: 99 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ describe('normalize', function() {
1717
it('should merge original with normalized', function() {
1818
msg.userId = 'user-id';
1919
opts.integrations = { Segment: true };
20-
assert.deepEqual(normalize(msg, list), {
20+
var normalized = normalize(msg, list);
21+
22+
assert.lengthEquals(normalized.messageId, 36);
23+
delete normalized.messageId;
24+
25+
assert.deepEqual(normalized, {
2126
integrations: { Segment: true },
2227
userId: 'user-id',
2328
context: {}
@@ -44,7 +49,12 @@ describe('normalize', function() {
4449
opts.campaign = { name: 'campaign-name' };
4550
opts.library = 'analytics-wordpress';
4651
opts.traits = { trait: true };
47-
assert.deepEqual(normalize(msg, list), {
52+
var normalized = normalize(msg, list);
53+
54+
assert.lengthEquals(normalized.messageId, 36);
55+
delete normalized.messageId;
56+
57+
assert.deepEqual(normalized, {
4858
integrations: {},
4959
context: {
5060
campaign: { name: 'campaign-name' },
@@ -61,7 +71,12 @@ describe('normalize', function() {
6171
it('should move to .integrations', function() {
6272
opts.Segment = true;
6373
opts.KISSmetrics = false;
64-
assert.deepEqual(normalize(msg, list), {
74+
var normalized = normalize(msg, list);
75+
76+
assert.lengthEquals(normalized.messageId, 36);
77+
delete normalized.messageId;
78+
79+
assert.deepEqual(normalized, {
6580
context: {},
6681
integrations: {
6782
Segment: true,
@@ -73,7 +88,12 @@ describe('normalize', function() {
7388
it('should match integration names', function() {
7489
opts.segment = true;
7590
opts.KissMetrics = false;
76-
assert.deepEqual(normalize(msg, list), {
91+
var normalized = normalize(msg, list);
92+
93+
assert.lengthEquals(normalized.messageId, 36);
94+
delete normalized.messageId;
95+
96+
assert.deepEqual(normalized, {
7797
context: {},
7898
integrations: {
7999
segment: true,
@@ -84,7 +104,12 @@ describe('normalize', function() {
84104

85105
it('should move .All', function() {
86106
opts.All = true;
87-
assert.deepEqual(normalize(msg, list), {
107+
var normalized = normalize(msg, list);
108+
109+
assert.lengthEquals(normalized.messageId, 36);
110+
delete normalized.messageId;
111+
112+
assert.deepEqual(normalized, {
88113
context: {},
89114
integrations: {
90115
All: true
@@ -94,7 +119,12 @@ describe('normalize', function() {
94119

95120
it('should move .all', function() {
96121
opts.all = true;
97-
assert.deepEqual(normalize(msg, list), {
122+
var normalized = normalize(msg, list);
123+
124+
assert.lengthEquals(normalized.messageId, 36);
125+
delete normalized.messageId;
126+
127+
assert.deepEqual(normalized, {
98128
context: {},
99129
integrations: {
100130
all: true
@@ -108,7 +138,12 @@ describe('normalize', function() {
108138
opts.integrations = {};
109139
opts.integrations.all = true;
110140
opts.integrations.Segment = true;
111-
assert.deepEqual(normalize(msg, list), {
141+
var normalized = normalize(msg, list);
142+
143+
assert.lengthEquals(normalized.messageId, 36);
144+
delete normalized.messageId;
145+
146+
assert.deepEqual(normalized, {
112147
context: {},
113148
integrations: {
114149
all: true,
@@ -128,7 +163,12 @@ describe('normalize', function() {
128163
it('should move to .integrations', function() {
129164
providers.Segment = true;
130165
providers.KISSmetrics = false;
131-
assert.deepEqual(normalize(msg, list), {
166+
var normalized = normalize(msg, list);
167+
168+
assert.lengthEquals(normalized.messageId, 36);
169+
delete normalized.messageId;
170+
171+
assert.deepEqual(normalized, {
132172
context: {},
133173
integrations: {
134174
Segment: true,
@@ -140,7 +180,12 @@ describe('normalize', function() {
140180
it('should match integration names', function() {
141181
providers.segment = true;
142182
providers.KissMetrics = false;
143-
assert.deepEqual(normalize(msg, list), {
183+
var normalized = normalize(msg, list);
184+
185+
assert.lengthEquals(normalized.messageId, 36);
186+
delete normalized.messageId;
187+
188+
assert.deepEqual(normalized, {
144189
context: {},
145190
integrations: {
146191
segment: true,
@@ -151,7 +196,12 @@ describe('normalize', function() {
151196

152197
it('should move .All', function() {
153198
providers.All = true;
154-
assert.deepEqual(normalize(msg, list), {
199+
var normalized = normalize(msg, list);
200+
201+
assert.lengthEquals(normalized.messageId, 36);
202+
delete normalized.messageId;
203+
204+
assert.deepEqual(normalized, {
155205
context: {},
156206
integrations: {
157207
All: true
@@ -161,7 +211,12 @@ describe('normalize', function() {
161211

162212
it('should move .all', function() {
163213
providers.all = true;
164-
assert.deepEqual(normalize(msg, list), {
214+
var normalized = normalize(msg, list);
215+
216+
assert.lengthEquals(normalized.messageId, 36);
217+
delete normalized.messageId;
218+
219+
assert.deepEqual(normalized, {
165220
context: {},
166221
integrations: {
167222
all: true
@@ -175,7 +230,12 @@ describe('normalize', function() {
175230
opts.integrations = {};
176231
opts.integrations.all = true;
177232
opts.integrations.Segment = true;
178-
assert.deepEqual(normalize(msg, list), {
233+
var normalized = normalize(msg, list);
234+
235+
assert.lengthEquals(normalized.messageId, 36);
236+
delete normalized.messageId;
237+
238+
assert.deepEqual(normalized, {
179239
context: {},
180240
integrations: {
181241
all: true,
@@ -187,7 +247,12 @@ describe('normalize', function() {
187247
it('should override if providers[key] is an object', function() {
188248
providers.Segment = {};
189249
opts.integrations = { Segment: true };
190-
assert.deepEqual(normalize(msg, list), {
250+
var normalized = normalize(msg, list);
251+
252+
assert.lengthEquals(normalized.messageId, 36);
253+
delete normalized.messageId;
254+
255+
assert.deepEqual(normalized, {
191256
context: {},
192257
integrations: {
193258
Segment: {}
@@ -206,7 +271,12 @@ describe('normalize', function() {
206271
it('should move to .integrations', function() {
207272
providers.Segment = true;
208273
opts.KISSmetrics = false;
209-
assert.deepEqual(normalize(msg, list), {
274+
var normalized = normalize(msg, list);
275+
276+
assert.lengthEquals(normalized.messageId, 36);
277+
delete normalized.messageId;
278+
279+
assert.deepEqual(normalized, {
210280
context: {},
211281
integrations: {
212282
Segment: true,
@@ -218,7 +288,12 @@ describe('normalize', function() {
218288
it('should prefer options object', function() {
219289
providers.Segment = { option: true };
220290
opts.Segment = true;
221-
assert.deepEqual(normalize(msg, list), {
291+
var normalized = normalize(msg, list);
292+
293+
assert.lengthEquals(normalized.messageId, 36);
294+
delete normalized.messageId;
295+
296+
assert.deepEqual(normalized, {
222297
context: {},
223298
integrations: {
224299
Segment: { option: true }
@@ -227,4 +302,13 @@ describe('normalize', function() {
227302
});
228303
});
229304
});
305+
it('should properly randomize .messageId', function() {
306+
var set = {};
307+
var count = 1000;
308+
for (var i = 0; i < count; i++) {
309+
var id = normalize(msg).messageId;
310+
set[id] = true;
311+
}
312+
assert.lengthEquals(Object.keys(set), count);
313+
});
230314
});

yarn.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5739,6 +5739,10 @@ source-map@~0.6.1:
57395739
version "0.6.1"
57405740
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
57415741

5742+
spark-md5@^2.0.2:
5743+
version "2.0.2"
5744+
resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-2.0.2.tgz#37b763847763ae7e7acef2ca5233d01e649a78b7"
5745+
57425746
spdx-correct@^3.0.0:
57435747
version "3.0.0"
57445748
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"

0 commit comments

Comments
 (0)