make-mp-data 3.0.3 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +46 -0
  2. package/dungeons/array-of-object-lookup-schema.json +327 -0
  3. package/dungeons/array-of-object-lookup.js +29 -9
  4. package/dungeons/capstone/capstone-ic3.js +291 -0
  5. package/dungeons/capstone/capstone-ic4.js +598 -0
  6. package/dungeons/capstone/capstone-ic5.js +668 -0
  7. package/dungeons/capstone/generate-product-lookup.js +309 -0
  8. package/dungeons/ecommerce-schema.json +462 -0
  9. package/dungeons/{copilot.js → ecommerce.js} +79 -17
  10. package/dungeons/education-schema.json +2409 -0
  11. package/dungeons/education.js +226 -462
  12. package/dungeons/fintech-schema.json +14034 -0
  13. package/dungeons/fintech.js +134 -413
  14. package/dungeons/foobar-schema.json +403 -0
  15. package/dungeons/foobar.js +27 -4
  16. package/dungeons/food-delivery-schema.json +192 -0
  17. package/dungeons/food-delivery.js +602 -0
  18. package/dungeons/food-schema.json +1152 -0
  19. package/dungeons/food.js +173 -406
  20. package/dungeons/gaming-schema.json +1270 -0
  21. package/dungeons/gaming.js +182 -42
  22. package/dungeons/insurance-application-schema.json +204 -0
  23. package/dungeons/insurance-application.js +605 -0
  24. package/dungeons/media-schema.json +906 -0
  25. package/dungeons/media.js +250 -420
  26. package/dungeons/retention-cadence-schema.json +78 -0
  27. package/dungeons/retention-cadence.js +35 -1
  28. package/dungeons/rpg-schema.json +4526 -0
  29. package/dungeons/rpg.js +171 -429
  30. package/dungeons/sanity-schema.json +255 -0
  31. package/dungeons/sanity.js +21 -10
  32. package/dungeons/sass-schema.json +1291 -0
  33. package/dungeons/sass.js +241 -368
  34. package/dungeons/scd-schema.json +919 -0
  35. package/dungeons/scd.js +41 -13
  36. package/dungeons/simple-schema.json +608 -0
  37. package/dungeons/simple.js +52 -15
  38. package/dungeons/simplest-schema.json +1418 -0
  39. package/dungeons/simplest.js +392 -0
  40. package/dungeons/social-schema.json +1118 -0
  41. package/dungeons/social.js +150 -391
  42. package/dungeons/text-generation-schema.json +3096 -0
  43. package/dungeons/text-generation.js +71 -0
  44. package/index.js +8 -6
  45. package/lib/core/config-validator.js +28 -8
  46. package/lib/core/storage.js +5 -5
  47. package/lib/generators/events.js +4 -4
  48. package/lib/orchestrators/mixpanel-sender.js +16 -13
  49. package/lib/orchestrators/user-loop.js +14 -6
  50. package/lib/templates/soup-presets.js +188 -0
  51. package/lib/utils/utils.js +52 -6
  52. package/package.json +1 -1
  53. package/types.d.ts +20 -3
  54. package/dungeons/adspend.js +0 -130
  55. package/dungeons/anon.js +0 -128
  56. package/dungeons/benchmark-heavy.js +0 -240
  57. package/dungeons/benchmark-light.js +0 -140
  58. package/dungeons/big.js +0 -226
  59. package/dungeons/business.js +0 -391
  60. package/dungeons/complex.js +0 -428
  61. package/dungeons/experiments.js +0 -137
  62. package/dungeons/funnels.js +0 -309
  63. package/dungeons/mil.js +0 -323
  64. package/dungeons/mirror.js +0 -161
  65. package/dungeons/soup-test.js +0 -52
  66. package/dungeons/streaming.js +0 -372
  67. package/dungeons/strict-event-test.js +0 -30
  68. package/dungeons/student-teacher.js +0 -438
  69. package/dungeons/too-big-events.js +0 -203
  70. package/dungeons/user-agent.js +0 -209
@@ -0,0 +1,1418 @@
1
+ {
2
+ "schema": {
3
+ "token": "",
4
+ "seed": "simple is best",
5
+ "numDays": 100,
6
+ "numEvents": 250000,
7
+ "numUsers": 2500,
8
+ "format": "json",
9
+ "region": "US",
10
+ "hasAnonIds": false,
11
+ "hasSessionIds": false,
12
+ "hasAdSpend": false,
13
+ "hasLocation": false,
14
+ "hasAndroidDevices": false,
15
+ "hasIOSDevices": false,
16
+ "hasDesktopDevices": false,
17
+ "hasBrowser": false,
18
+ "hasCampaigns": false,
19
+ "isAnonymous": false,
20
+ "alsoInferFunnels": false,
21
+ "concurrency": 1,
22
+ "batchSize": 2500000,
23
+ "writeToDisk": false,
24
+ "events": [
25
+ {
26
+ "event": "page view",
27
+ "weight": 10,
28
+ "properties": {
29
+ "page": {
30
+ "functionName": "arrow",
31
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
32
+ },
33
+ "utm_source": {
34
+ "functionName": "arrow",
35
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
36
+ }
37
+ }
38
+ },
39
+ {
40
+ "event": "sign up",
41
+ "weight": 1,
42
+ "isFirstEvent": true,
43
+ "properties": {
44
+ "signupMethod": [
45
+ "email",
46
+ "google",
47
+ "facebook",
48
+ "github"
49
+ ],
50
+ "referral": {
51
+ "functionName": "arrow",
52
+ "body": "function generateWeightedArray() {\n\t\tconst weightedArray = [];\n\n\t\t// Add each value to the array the number of times specified by its weight\n\t\tweightedItems.forEach(({ value, weight }) => {\n\t\t\tif (!weight) weight = 1;\n\t\t\tfor (let i = 0; i < weight; i++) {\n\t\t\t\tweightedArray.push(value);\n\t\t\t}\n\t\t});\n\n\t\treturn weightedArray;\n\t}"
53
+ }
54
+ }
55
+ },
56
+ {
57
+ "event": "login",
58
+ "weight": 8,
59
+ "properties": {
60
+ "method": [
61
+ "password",
62
+ "google",
63
+ "facebook",
64
+ "github"
65
+ ]
66
+ }
67
+ },
68
+ {
69
+ "event": "search",
70
+ "weight": 7,
71
+ "properties": {
72
+ "query_length": [
73
+ 18,
74
+ 15,
75
+ 11,
76
+ 20,
77
+ 31,
78
+ 31,
79
+ 18,
80
+ 29,
81
+ 8,
82
+ 22,
83
+ 13,
84
+ 25,
85
+ 13,
86
+ 42,
87
+ 11,
88
+ 25,
89
+ 50,
90
+ 29,
91
+ 17,
92
+ 30,
93
+ 8,
94
+ 23,
95
+ 18,
96
+ 14,
97
+ 17,
98
+ 11,
99
+ 11,
100
+ 12,
101
+ 19,
102
+ 24,
103
+ 35,
104
+ 14,
105
+ 17,
106
+ 22,
107
+ 21,
108
+ 19,
109
+ 33,
110
+ 25,
111
+ 13,
112
+ 22,
113
+ 26,
114
+ 31,
115
+ 19,
116
+ 41,
117
+ 16,
118
+ 21,
119
+ 39,
120
+ 16,
121
+ 12,
122
+ 26
123
+ ],
124
+ "resultsReturned": [
125
+ 33,
126
+ 77,
127
+ 73,
128
+ 77,
129
+ 25,
130
+ 64,
131
+ 24,
132
+ 73,
133
+ 27,
134
+ 78,
135
+ 24,
136
+ 75,
137
+ 75,
138
+ 73,
139
+ 26,
140
+ 75,
141
+ 27,
142
+ 68,
143
+ 78,
144
+ 72,
145
+ 33,
146
+ 75,
147
+ 29,
148
+ 29,
149
+ 34,
150
+ 32,
151
+ 25,
152
+ 38,
153
+ 30,
154
+ 27,
155
+ 27,
156
+ 25,
157
+ 68,
158
+ 20,
159
+ 21,
160
+ 34,
161
+ 32,
162
+ 60,
163
+ 31,
164
+ 69,
165
+ 72,
166
+ 27,
167
+ 26,
168
+ 22,
169
+ 25,
170
+ 22,
171
+ 35,
172
+ 77,
173
+ 24,
174
+ 25
175
+ ],
176
+ "category": {
177
+ "functionName": "arrow",
178
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
179
+ }
180
+ }
181
+ },
182
+ {
183
+ "event": "view item",
184
+ "weight": 9,
185
+ "properties": {
186
+ "isFeaturedItem": [
187
+ true,
188
+ false,
189
+ false
190
+ ],
191
+ "itemCategory": {
192
+ "functionName": "arrow",
193
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
194
+ },
195
+ "price": [
196
+ 128,
197
+ 127,
198
+ 374,
199
+ 165,
200
+ 329,
201
+ 358,
202
+ 129,
203
+ 122,
204
+ 126,
205
+ 143,
206
+ 201,
207
+ 131,
208
+ 108,
209
+ 146,
210
+ 134,
211
+ 398,
212
+ 131,
213
+ 128,
214
+ 143,
215
+ 156,
216
+ 363,
217
+ 365,
218
+ 125,
219
+ 189,
220
+ 147,
221
+ 145,
222
+ 134,
223
+ 175,
224
+ 117,
225
+ 124,
226
+ 375,
227
+ 138,
228
+ 169,
229
+ 134,
230
+ 170,
231
+ 362,
232
+ 143,
233
+ 128,
234
+ 141,
235
+ 142,
236
+ 127,
237
+ 364,
238
+ 341,
239
+ 367,
240
+ 364,
241
+ 123,
242
+ 346,
243
+ 362,
244
+ 223,
245
+ 360
246
+ ],
247
+ "rating": [
248
+ 2,
249
+ 2,
250
+ 2,
251
+ 3,
252
+ 3,
253
+ 3,
254
+ 2,
255
+ 1,
256
+ 2,
257
+ 5,
258
+ 2,
259
+ 2,
260
+ 2,
261
+ 2,
262
+ 2,
263
+ 2,
264
+ 3,
265
+ 2,
266
+ 4,
267
+ 3,
268
+ 2,
269
+ 2,
270
+ 3,
271
+ 3,
272
+ 2,
273
+ 4,
274
+ 3,
275
+ 4,
276
+ 2,
277
+ 2,
278
+ 3,
279
+ 5,
280
+ 5,
281
+ 2,
282
+ 2,
283
+ 2,
284
+ 2,
285
+ 4,
286
+ 2,
287
+ 2,
288
+ 3,
289
+ 4,
290
+ 3,
291
+ 1,
292
+ 2,
293
+ 3,
294
+ 3,
295
+ 2,
296
+ 5,
297
+ 4
298
+ ]
299
+ }
300
+ },
301
+ {
302
+ "event": "add to cart",
303
+ "weight": 5,
304
+ "properties": {
305
+ "amount": [
306
+ 130,
307
+ 380,
308
+ 342,
309
+ 180,
310
+ 174,
311
+ 116,
312
+ 363,
313
+ 128,
314
+ 201,
315
+ 356,
316
+ 164,
317
+ 126,
318
+ 141,
319
+ 149,
320
+ 130,
321
+ 161,
322
+ 291,
323
+ 133,
324
+ 154,
325
+ 170,
326
+ 135,
327
+ 129,
328
+ 121,
329
+ 131,
330
+ 159,
331
+ 324,
332
+ 382,
333
+ 151,
334
+ 120,
335
+ 339,
336
+ 363,
337
+ 375,
338
+ 130,
339
+ 346,
340
+ 112,
341
+ 151,
342
+ 375,
343
+ 148,
344
+ 331,
345
+ 153,
346
+ 135,
347
+ 288,
348
+ 99,
349
+ 342,
350
+ 384,
351
+ 127,
352
+ 125,
353
+ 145,
354
+ 128,
355
+ 128
356
+ ],
357
+ "itemCategory": {
358
+ "functionName": "arrow",
359
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
360
+ },
361
+ "numItems": [
362
+ 4,
363
+ 3,
364
+ 4,
365
+ 1,
366
+ 4,
367
+ 3,
368
+ 2,
369
+ 4,
370
+ 2,
371
+ 4,
372
+ 2,
373
+ 3,
374
+ 2,
375
+ 3,
376
+ 2,
377
+ 2,
378
+ 4,
379
+ 2,
380
+ 2,
381
+ 3,
382
+ 2,
383
+ 3,
384
+ 3,
385
+ 2,
386
+ 3,
387
+ 3,
388
+ 2,
389
+ 2,
390
+ 2,
391
+ 2,
392
+ 2,
393
+ 2,
394
+ 5,
395
+ 2,
396
+ 3,
397
+ 1,
398
+ 3,
399
+ 3,
400
+ 2,
401
+ 4,
402
+ 2,
403
+ 2,
404
+ 3,
405
+ 3,
406
+ 4,
407
+ 3,
408
+ 2,
409
+ 2,
410
+ 2,
411
+ 3
412
+ ]
413
+ }
414
+ },
415
+ {
416
+ "event": "checkout",
417
+ "weight": 3,
418
+ "properties": {
419
+ "amount": [
420
+ 131,
421
+ 368,
422
+ 362,
423
+ 170,
424
+ 366,
425
+ 143,
426
+ 363,
427
+ 167,
428
+ 143,
429
+ 151,
430
+ 187,
431
+ 125,
432
+ 174,
433
+ 255,
434
+ 187,
435
+ 380,
436
+ 346,
437
+ 143,
438
+ 292,
439
+ 136,
440
+ 150,
441
+ 164,
442
+ 144,
443
+ 365,
444
+ 355,
445
+ 123,
446
+ 117,
447
+ 141,
448
+ 387,
449
+ 365,
450
+ 145,
451
+ 152,
452
+ 361,
453
+ 156,
454
+ 140,
455
+ 359,
456
+ 150,
457
+ 362,
458
+ 132,
459
+ 142,
460
+ 255,
461
+ 160,
462
+ 141,
463
+ 383,
464
+ 383,
465
+ 132,
466
+ 161,
467
+ 141,
468
+ 134,
469
+ 138
470
+ ],
471
+ "currency": [
472
+ "USD",
473
+ "CAD",
474
+ "EUR",
475
+ "JPY"
476
+ ],
477
+ "coupon": {
478
+ "functionName": "arrow",
479
+ "body": "function generateWeightedArray() {\n\t\tconst weightedArray = [];\n\n\t\t// Add each value to the array the number of times specified by its weight\n\t\tweightedItems.forEach(({ value, weight }) => {\n\t\t\tif (!weight) weight = 1;\n\t\t\tfor (let i = 0; i < weight; i++) {\n\t\t\t\tweightedArray.push(value);\n\t\t\t}\n\t\t});\n\n\t\treturn weightedArray;\n\t}"
480
+ },
481
+ "numItems": [
482
+ 6,
483
+ 3,
484
+ 4,
485
+ 5,
486
+ 6,
487
+ 3,
488
+ 8,
489
+ 4,
490
+ 7,
491
+ 2,
492
+ 4,
493
+ 3,
494
+ 5,
495
+ 4,
496
+ 3,
497
+ 5,
498
+ 7,
499
+ 3,
500
+ 5,
501
+ 5,
502
+ 1,
503
+ 3,
504
+ 5,
505
+ 5,
506
+ 3,
507
+ 5,
508
+ 4,
509
+ 5,
510
+ 3,
511
+ 5,
512
+ 4,
513
+ 6,
514
+ 8,
515
+ 8,
516
+ 7,
517
+ 5,
518
+ 5,
519
+ 6,
520
+ 5,
521
+ 8,
522
+ 4,
523
+ 4,
524
+ 5,
525
+ 5,
526
+ 8,
527
+ 4,
528
+ 3,
529
+ 4,
530
+ 9,
531
+ 7
532
+ ]
533
+ }
534
+ },
535
+ {
536
+ "event": "watch video",
537
+ "weight": 6,
538
+ "properties": {
539
+ "videoCategory": {
540
+ "functionName": "arrow",
541
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
542
+ },
543
+ "watchTimeSec": [
544
+ 413,
545
+ 153,
546
+ 494,
547
+ 430,
548
+ 191,
549
+ 440,
550
+ 149,
551
+ 443,
552
+ 153,
553
+ 411,
554
+ 171,
555
+ 435,
556
+ 158,
557
+ 162,
558
+ 154,
559
+ 400,
560
+ 168,
561
+ 162,
562
+ 172,
563
+ 458,
564
+ 173,
565
+ 459,
566
+ 148,
567
+ 141,
568
+ 160,
569
+ 187,
570
+ 161,
571
+ 432,
572
+ 421,
573
+ 194,
574
+ 149,
575
+ 154,
576
+ 459,
577
+ 464,
578
+ 400,
579
+ 134,
580
+ 167,
581
+ 163,
582
+ 407,
583
+ 182,
584
+ 165,
585
+ 386,
586
+ 167,
587
+ 439,
588
+ 200,
589
+ 157,
590
+ 159,
591
+ 401,
592
+ 157,
593
+ 225
594
+ ],
595
+ "quality": [
596
+ "1080p",
597
+ "720p",
598
+ "480p",
599
+ "360p"
600
+ ]
601
+ }
602
+ },
603
+ {
604
+ "event": "share content",
605
+ "weight": 2,
606
+ "properties": {
607
+ "platform": [
608
+ "twitter",
609
+ "facebook",
610
+ "linkedin",
611
+ "email",
612
+ "link"
613
+ ],
614
+ "contentType": [
615
+ "video",
616
+ "product",
617
+ "article"
618
+ ]
619
+ }
620
+ },
621
+ {
622
+ "event": "rate item",
623
+ "weight": 4,
624
+ "properties": {
625
+ "rating": [
626
+ 1,
627
+ 2,
628
+ 4,
629
+ 3,
630
+ 3,
631
+ 2,
632
+ 3,
633
+ 1,
634
+ 1,
635
+ 2,
636
+ 3,
637
+ 3,
638
+ 3,
639
+ 3,
640
+ 3,
641
+ 2,
642
+ 4,
643
+ 2,
644
+ 4,
645
+ 4,
646
+ 2,
647
+ 2,
648
+ 3,
649
+ 1,
650
+ 4,
651
+ 3,
652
+ 4,
653
+ 3,
654
+ 4,
655
+ 3,
656
+ 2,
657
+ 3,
658
+ 2,
659
+ 2,
660
+ 3,
661
+ 4,
662
+ 5,
663
+ 2,
664
+ 3,
665
+ 3,
666
+ 2,
667
+ 3,
668
+ 2,
669
+ 3,
670
+ 3,
671
+ 4,
672
+ 2,
673
+ 2,
674
+ 3,
675
+ 3
676
+ ],
677
+ "itemCategory": {
678
+ "functionName": "arrow",
679
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
680
+ },
681
+ "hasReviewText": [
682
+ true,
683
+ false,
684
+ false,
685
+ false
686
+ ]
687
+ }
688
+ },
689
+ {
690
+ "event": "support ticket",
691
+ "weight": 2,
692
+ "properties": {
693
+ "priority": {
694
+ "functionName": "arrow",
695
+ "body": "function generateWeightedArray() {\n\t\tconst weightedArray = [];\n\n\t\t// Add each value to the array the number of times specified by its weight\n\t\tweightedItems.forEach(({ value, weight }) => {\n\t\t\tif (!weight) weight = 1;\n\t\t\tfor (let i = 0; i < weight; i++) {\n\t\t\t\tweightedArray.push(value);\n\t\t\t}\n\t\t});\n\n\t\treturn weightedArray;\n\t}"
696
+ },
697
+ "category": [
698
+ "billing",
699
+ "technical",
700
+ "account",
701
+ "shipping",
702
+ "returns"
703
+ ]
704
+ }
705
+ },
706
+ {
707
+ "event": "add to wishlist",
708
+ "weight": 4,
709
+ "properties": {
710
+ "itemCategory": {
711
+ "functionName": "arrow",
712
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
713
+ },
714
+ "price": [
715
+ 324,
716
+ 144,
717
+ 121,
718
+ 184,
719
+ 389,
720
+ 141,
721
+ 120,
722
+ 360,
723
+ 361,
724
+ 352,
725
+ 297,
726
+ 133,
727
+ 335,
728
+ 169,
729
+ 388,
730
+ 121,
731
+ 163,
732
+ 175,
733
+ 384,
734
+ 215,
735
+ 163,
736
+ 132,
737
+ 126,
738
+ 345,
739
+ 378,
740
+ 332,
741
+ 122,
742
+ 139,
743
+ 150,
744
+ 357,
745
+ 151,
746
+ 138,
747
+ 125,
748
+ 120,
749
+ 138,
750
+ 125,
751
+ 149,
752
+ 113,
753
+ 158,
754
+ 125,
755
+ 120,
756
+ 368,
757
+ 379,
758
+ 114,
759
+ 253,
760
+ 127,
761
+ 145,
762
+ 340,
763
+ 143,
764
+ 381
765
+ ]
766
+ }
767
+ },
768
+ {
769
+ "event": "remove from cart",
770
+ "weight": 3,
771
+ "properties": {
772
+ "reason": {
773
+ "functionName": "arrow",
774
+ "body": "function generateWeightedArray() {\n\t\tconst weightedArray = [];\n\n\t\t// Add each value to the array the number of times specified by its weight\n\t\tweightedItems.forEach(({ value, weight }) => {\n\t\t\tif (!weight) weight = 1;\n\t\t\tfor (let i = 0; i < weight; i++) {\n\t\t\t\tweightedArray.push(value);\n\t\t\t}\n\t\t});\n\n\t\treturn weightedArray;\n\t}"
775
+ }
776
+ }
777
+ },
778
+ {
779
+ "event": "apply coupon",
780
+ "weight": 2,
781
+ "properties": {
782
+ "couponCode": {
783
+ "functionName": "arrow",
784
+ "body": "function generateWeightedArray() {\n\t\tconst weightedArray = [];\n\n\t\t// Add each value to the array the number of times specified by its weight\n\t\tweightedItems.forEach(({ value, weight }) => {\n\t\t\tif (!weight) weight = 1;\n\t\t\tfor (let i = 0; i < weight; i++) {\n\t\t\t\tweightedArray.push(value);\n\t\t\t}\n\t\t});\n\n\t\treturn weightedArray;\n\t}"
785
+ },
786
+ "discountPercent": [
787
+ 24,
788
+ 7,
789
+ 38,
790
+ 19,
791
+ 15,
792
+ 25,
793
+ 23,
794
+ 28,
795
+ 5,
796
+ 17,
797
+ 26,
798
+ 23,
799
+ 39,
800
+ 32,
801
+ 19,
802
+ 38,
803
+ 31,
804
+ 29,
805
+ 39,
806
+ 21,
807
+ 40,
808
+ 13,
809
+ 47,
810
+ 19,
811
+ 16,
812
+ 24,
813
+ 11,
814
+ 15,
815
+ 26,
816
+ 24,
817
+ 20,
818
+ 15,
819
+ 29,
820
+ 28,
821
+ 26,
822
+ 14,
823
+ 28,
824
+ 35,
825
+ 15,
826
+ 37,
827
+ 39,
828
+ 35,
829
+ 23,
830
+ 9,
831
+ 11,
832
+ 31,
833
+ 36,
834
+ 21,
835
+ 36,
836
+ 25
837
+ ]
838
+ }
839
+ },
840
+ {
841
+ "event": "notification received",
842
+ "weight": 7,
843
+ "properties": {
844
+ "channel": [
845
+ "push",
846
+ "email",
847
+ "in-app",
848
+ "sms"
849
+ ],
850
+ "type": [
851
+ "promo",
852
+ "order update",
853
+ "recommendation",
854
+ "reminder"
855
+ ]
856
+ }
857
+ },
858
+ {
859
+ "event": "notification clicked",
860
+ "weight": 5,
861
+ "properties": {
862
+ "channel": [
863
+ "push",
864
+ "email",
865
+ "in-app",
866
+ "sms"
867
+ ],
868
+ "type": [
869
+ "promo",
870
+ "order update",
871
+ "recommendation",
872
+ "reminder"
873
+ ]
874
+ }
875
+ },
876
+ {
877
+ "event": "add payment method",
878
+ "weight": 1,
879
+ "properties": {
880
+ "type": [
881
+ "credit card",
882
+ "debit card",
883
+ "paypal",
884
+ "apple pay",
885
+ "google pay"
886
+ ]
887
+ }
888
+ },
889
+ {
890
+ "event": "update profile",
891
+ "weight": 3,
892
+ "properties": {
893
+ "field": [
894
+ "avatar",
895
+ "name",
896
+ "email",
897
+ "address",
898
+ "phone",
899
+ "preferences"
900
+ ]
901
+ }
902
+ },
903
+ {
904
+ "event": "invite friend",
905
+ "weight": 1,
906
+ "properties": {
907
+ "method": [
908
+ "email",
909
+ "link",
910
+ "sms"
911
+ ]
912
+ }
913
+ },
914
+ {
915
+ "event": "view category",
916
+ "weight": 8,
917
+ "properties": {
918
+ "category": {
919
+ "functionName": "arrow",
920
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
921
+ },
922
+ "sortBy": [
923
+ "popular",
924
+ "newest",
925
+ "price low",
926
+ "price high",
927
+ "rating"
928
+ ]
929
+ }
930
+ },
931
+ {
932
+ "event": "save address",
933
+ "weight": 1,
934
+ "properties": {
935
+ "type": [
936
+ "home",
937
+ "work",
938
+ "other"
939
+ ]
940
+ }
941
+ },
942
+ {
943
+ "event": "compare items",
944
+ "weight": 3,
945
+ "properties": {
946
+ "numItems": [
947
+ 3,
948
+ 3,
949
+ 3,
950
+ 4,
951
+ 4,
952
+ 3,
953
+ 2,
954
+ 5,
955
+ 3,
956
+ 4,
957
+ 3,
958
+ 3,
959
+ 3,
960
+ 2,
961
+ 3,
962
+ 4,
963
+ 2,
964
+ 5,
965
+ 2,
966
+ 5,
967
+ 3,
968
+ 3,
969
+ 3,
970
+ 4,
971
+ 3,
972
+ 3,
973
+ 3,
974
+ 3,
975
+ 2,
976
+ 4,
977
+ 4,
978
+ 3,
979
+ 3,
980
+ 5,
981
+ 3,
982
+ 4,
983
+ 4,
984
+ 3,
985
+ 4,
986
+ 3,
987
+ 3,
988
+ 3,
989
+ 4,
990
+ 3,
991
+ 3,
992
+ 3,
993
+ 3,
994
+ 3,
995
+ 4,
996
+ 3
997
+ ],
998
+ "itemCategory": {
999
+ "functionName": "arrow",
1000
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
1001
+ }
1002
+ }
1003
+ },
1004
+ {
1005
+ "event": "subscribe newsletter",
1006
+ "weight": 1,
1007
+ "properties": {
1008
+ "frequency": [
1009
+ "daily",
1010
+ "weekly",
1011
+ "monthly"
1012
+ ],
1013
+ "topics": {
1014
+ "functionName": "arrow",
1015
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
1016
+ }
1017
+ }
1018
+ },
1019
+ {
1020
+ "event": "leave review",
1021
+ "weight": 2,
1022
+ "properties": {
1023
+ "rating": [
1024
+ 3,
1025
+ 2,
1026
+ 4,
1027
+ 1,
1028
+ 4,
1029
+ 2,
1030
+ 3,
1031
+ 4,
1032
+ 2,
1033
+ 2,
1034
+ 2,
1035
+ 1,
1036
+ 3,
1037
+ 3,
1038
+ 4,
1039
+ 2,
1040
+ 3,
1041
+ 3,
1042
+ 2,
1043
+ 2,
1044
+ 3,
1045
+ 3,
1046
+ 2,
1047
+ 2,
1048
+ 2,
1049
+ 1,
1050
+ 2,
1051
+ 3,
1052
+ 2,
1053
+ 3,
1054
+ 2,
1055
+ 2,
1056
+ 4,
1057
+ 3,
1058
+ 4,
1059
+ 2,
1060
+ 2,
1061
+ 3,
1062
+ 2,
1063
+ 2,
1064
+ 2,
1065
+ 3,
1066
+ 2,
1067
+ 2,
1068
+ 2,
1069
+ 3,
1070
+ 3,
1071
+ 3,
1072
+ 2,
1073
+ 1
1074
+ ],
1075
+ "wordCount": [
1076
+ 62,
1077
+ 59,
1078
+ 61,
1079
+ 52,
1080
+ 147,
1081
+ 150,
1082
+ 54,
1083
+ 139,
1084
+ 149,
1085
+ 68,
1086
+ 52,
1087
+ 64,
1088
+ 51,
1089
+ 136,
1090
+ 58,
1091
+ 140,
1092
+ 62,
1093
+ 66,
1094
+ 56,
1095
+ 76,
1096
+ 58,
1097
+ 65,
1098
+ 55,
1099
+ 53,
1100
+ 50,
1101
+ 73,
1102
+ 142,
1103
+ 64,
1104
+ 61,
1105
+ 58,
1106
+ 145,
1107
+ 137,
1108
+ 155,
1109
+ 64,
1110
+ 144,
1111
+ 53,
1112
+ 71,
1113
+ 68,
1114
+ 65,
1115
+ 54,
1116
+ 147,
1117
+ 146,
1118
+ 55,
1119
+ 154,
1120
+ 57,
1121
+ 146,
1122
+ 142,
1123
+ 140,
1124
+ 158,
1125
+ 157
1126
+ ],
1127
+ "hasPhotos": [
1128
+ true,
1129
+ false,
1130
+ false,
1131
+ false,
1132
+ false
1133
+ ]
1134
+ }
1135
+ },
1136
+ {
1137
+ "event": "redeem reward",
1138
+ "weight": 1,
1139
+ "properties": {
1140
+ "rewardType": [
1141
+ "discount",
1142
+ "free shipping",
1143
+ "free item",
1144
+ "points bonus"
1145
+ ],
1146
+ "pointsUsed": [
1147
+ 1284,
1148
+ 1556,
1149
+ 1213,
1150
+ 1347,
1151
+ 1561,
1152
+ 3771,
1153
+ 1376,
1154
+ 1385,
1155
+ 3339,
1156
+ 1451,
1157
+ 1235,
1158
+ 1958,
1159
+ 1511,
1160
+ 1497,
1161
+ 1438,
1162
+ 1569,
1163
+ 1521,
1164
+ 1467,
1165
+ 2033,
1166
+ 1481,
1167
+ 1375,
1168
+ 1567,
1169
+ 1210,
1170
+ 1432,
1171
+ 3401,
1172
+ 3784,
1173
+ 2001,
1174
+ 1975,
1175
+ 1286,
1176
+ 1548,
1177
+ 1321,
1178
+ 2238,
1179
+ 1754,
1180
+ 3566,
1181
+ 1637,
1182
+ 3673,
1183
+ 3549,
1184
+ 1253,
1185
+ 1415,
1186
+ 1060,
1187
+ 1420,
1188
+ 3876,
1189
+ 1603,
1190
+ 1306,
1191
+ 1477,
1192
+ 3648,
1193
+ 1598,
1194
+ 3816,
1195
+ 3857,
1196
+ 3760
1197
+ ]
1198
+ }
1199
+ }
1200
+ ],
1201
+ "funnels": [
1202
+ {
1203
+ "sequence": [
1204
+ "page view",
1205
+ "sign up"
1206
+ ],
1207
+ "conversionRate": 55,
1208
+ "order": "sequential",
1209
+ "weight": 5,
1210
+ "isFirstFunnel": true,
1211
+ "timeToConvert": 1,
1212
+ "name": "Signup Funnel"
1213
+ },
1214
+ {
1215
+ "sequence": [
1216
+ "search",
1217
+ "view item",
1218
+ "add to cart",
1219
+ "checkout"
1220
+ ],
1221
+ "conversionRate": 35,
1222
+ "order": "sequential",
1223
+ "weight": 8,
1224
+ "timeToConvert": 3,
1225
+ "name": "Purchase Funnel"
1226
+ },
1227
+ {
1228
+ "sequence": [
1229
+ "page view",
1230
+ "watch video",
1231
+ "share content"
1232
+ ],
1233
+ "conversionRate": 40,
1234
+ "order": "sequential",
1235
+ "weight": 6,
1236
+ "timeToConvert": 2,
1237
+ "name": "Content Engagement"
1238
+ },
1239
+ {
1240
+ "sequence": [
1241
+ "view item",
1242
+ "rate item"
1243
+ ],
1244
+ "conversionRate": 25,
1245
+ "order": "sequential",
1246
+ "weight": 3,
1247
+ "timeToConvert": 5,
1248
+ "name": "Review Funnel"
1249
+ },
1250
+ {
1251
+ "sequence": [
1252
+ "view category",
1253
+ "view item",
1254
+ "compare items",
1255
+ "add to cart"
1256
+ ],
1257
+ "conversionRate": 30,
1258
+ "order": "sequential",
1259
+ "weight": 7,
1260
+ "timeToConvert": 3,
1261
+ "name": "Browse to Cart"
1262
+ },
1263
+ {
1264
+ "sequence": [
1265
+ "notification received",
1266
+ "notification clicked",
1267
+ "view item"
1268
+ ],
1269
+ "conversionRate": 45,
1270
+ "order": "sequential",
1271
+ "weight": 4,
1272
+ "timeToConvert": 1,
1273
+ "name": "Notification Engagement"
1274
+ },
1275
+ {
1276
+ "sequence": [
1277
+ "view item",
1278
+ "add to wishlist",
1279
+ "apply coupon",
1280
+ "add to cart",
1281
+ "checkout"
1282
+ ],
1283
+ "conversionRate": 20,
1284
+ "order": "sequential",
1285
+ "weight": 2,
1286
+ "timeToConvert": 7,
1287
+ "name": "Wishlist to Purchase"
1288
+ },
1289
+ {
1290
+ "sequence": [
1291
+ "checkout",
1292
+ "leave review",
1293
+ "invite friend"
1294
+ ],
1295
+ "conversionRate": 15,
1296
+ "order": "sequential",
1297
+ "weight": 1,
1298
+ "timeToConvert": 14,
1299
+ "name": "Post-Purchase Advocacy"
1300
+ },
1301
+ {
1302
+ "sequence": [
1303
+ "login",
1304
+ "view item",
1305
+ "add to cart",
1306
+ "apply coupon",
1307
+ "checkout"
1308
+ ],
1309
+ "conversionRate": 30,
1310
+ "order": "sequential",
1311
+ "weight": 9,
1312
+ "timeToConvert": 2,
1313
+ "name": "Coupon Purchase Flow"
1314
+ },
1315
+ {
1316
+ "sequence": [
1317
+ "subscribe newsletter",
1318
+ "notification received",
1319
+ "notification clicked",
1320
+ "checkout"
1321
+ ],
1322
+ "conversionRate": 10,
1323
+ "order": "sequential",
1324
+ "weight": 3,
1325
+ "timeToConvert": 14,
1326
+ "name": "Newsletter to Purchase"
1327
+ },
1328
+ {
1329
+ "sequence": [
1330
+ "support ticket",
1331
+ "update profile",
1332
+ "checkout"
1333
+ ],
1334
+ "conversionRate": 20,
1335
+ "order": "sequential",
1336
+ "weight": 10,
1337
+ "timeToConvert": 7,
1338
+ "name": "Support Recovery"
1339
+ }
1340
+ ],
1341
+ "superProps": {
1342
+ "theme": {
1343
+ "functionName": "arrow",
1344
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
1345
+ }
1346
+ },
1347
+ "userProps": {
1348
+ "title": {
1349
+ "functionName": "arrow",
1350
+ "body": "function () { [native code] }"
1351
+ },
1352
+ "luckyNumber": [
1353
+ 348,
1354
+ 154,
1355
+ 148,
1356
+ 142,
1357
+ 330,
1358
+ 148,
1359
+ 323,
1360
+ 129,
1361
+ 151,
1362
+ 189,
1363
+ 300,
1364
+ 129,
1365
+ 346,
1366
+ 160,
1367
+ 149,
1368
+ 145,
1369
+ 125,
1370
+ 149,
1371
+ 167,
1372
+ 271,
1373
+ 150,
1374
+ 163,
1375
+ 148,
1376
+ 163,
1377
+ 124,
1378
+ 125,
1379
+ 121,
1380
+ 145,
1381
+ 180,
1382
+ 341,
1383
+ 139,
1384
+ 201,
1385
+ 147,
1386
+ 157,
1387
+ 306,
1388
+ 320,
1389
+ 324,
1390
+ 149,
1391
+ 123,
1392
+ 146,
1393
+ 299,
1394
+ 118,
1395
+ 164,
1396
+ 326,
1397
+ 169,
1398
+ 136,
1399
+ 153,
1400
+ 334,
1401
+ 333,
1402
+ 334
1403
+ ],
1404
+ "spiritAnimal": {
1405
+ "functionName": "arrow",
1406
+ "body": "function () {\n\t\tconst weighted = [];\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tconst rand = chance.d10(); // Random number between 1 and 10\n\n\t\t\t// 35% chance to favor the most chosen index\n\t\t\tif (chance.bool({ likelihood: 35 })) {\n\t\t\t\t// 50% chance to slightly alter the index\n\t\t\t\tif (chance.bool({ likelihood: 50 })) {\n\t\t\t\t\tweighted.push(items[mostChosenIndex]);\n\t\t\t\t} else {\n\t\t\t\t\tconst addOrSubtract = chance.bool({ likelihood: 50 }) ? -rand : rand;\n\t\t\t\t\tlet newIndex = mostChosenIndex + addOrSubtract;\n\n\t\t\t\t\t// Ensure newIndex is within bounds\n\t\t\t\t\tif (newIndex < 0) newIndex = 0;\n\t\t\t\t\tif (newIndex >= items.length) newIndex = items.length - 1;\n\t\t\t\t\tweighted.push(items[newIndex]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// 25% chance to favor the second most chosen index\n\t\t\telse if (chance.bool({ likelihood: 25 })) {\n\t\t\t\tweighted.push(items[secondMostChosenIndex]);\n\t\t\t}\n\t\t\t// 15% chance to favor the third most chosen index\n\t\t\telse if (chance.bool({ likelihood: 15 })) {\n\t\t\t\tweighted.push(items[thirdMostChosenIndex]);\n\t\t\t}\n\t\t\t// Otherwise, pick a random item from the list\n\t\t\telse {\n\t\t\t\tweighted.push(chance.pickone(items));\n\t\t\t}\n\t\t}\n\t\treturn weighted;\n\t}"
1407
+ }
1408
+ },
1409
+ "scdProps": {},
1410
+ "mirrorProps": {},
1411
+ "groupKeys": [],
1412
+ "groupProps": {},
1413
+ "lookupTables": []
1414
+ },
1415
+ "hooks": "function (record, type, meta) {\n\n\t\t// no hooks!\n\t\treturn record;\n\t}",
1416
+ "timestamp": "2026-04-10T01:39:07.681Z",
1417
+ "version": "4.0"
1418
+ }