@ak--47/dungeon-master 1.0.0

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 (66) hide show
  1. package/README.md +518 -0
  2. package/dungeons/array-of-object-lookup-schema.json +327 -0
  3. package/dungeons/array-of-object-lookup.js +220 -0
  4. package/dungeons/ecommerce-schema.json +462 -0
  5. package/dungeons/ecommerce.js +447 -0
  6. package/dungeons/education-schema.json +2409 -0
  7. package/dungeons/education.js +768 -0
  8. package/dungeons/fintech-schema.json +14034 -0
  9. package/dungeons/fintech.js +696 -0
  10. package/dungeons/foobar-schema.json +403 -0
  11. package/dungeons/foobar.js +296 -0
  12. package/dungeons/food-delivery-schema.json +192 -0
  13. package/dungeons/food-delivery.js +602 -0
  14. package/dungeons/food-schema.json +1152 -0
  15. package/dungeons/food.js +754 -0
  16. package/dungeons/gaming-schema.json +1270 -0
  17. package/dungeons/gaming.js +508 -0
  18. package/dungeons/insurance-application-schema.json +204 -0
  19. package/dungeons/insurance-application.js +605 -0
  20. package/dungeons/media-schema.json +906 -0
  21. package/dungeons/media.js +790 -0
  22. package/dungeons/retention-cadence-schema.json +78 -0
  23. package/dungeons/retention-cadence.js +244 -0
  24. package/dungeons/rpg-schema.json +4526 -0
  25. package/dungeons/rpg.js +919 -0
  26. package/dungeons/sanity-schema.json +255 -0
  27. package/dungeons/sanity.js +152 -0
  28. package/dungeons/sass-schema.json +1291 -0
  29. package/dungeons/sass.js +795 -0
  30. package/dungeons/scd-schema.json +919 -0
  31. package/dungeons/scd.js +277 -0
  32. package/dungeons/simple-schema.json +608 -0
  33. package/dungeons/simple.js +285 -0
  34. package/dungeons/simplest-schema.json +1418 -0
  35. package/dungeons/simplest.js +392 -0
  36. package/dungeons/social-schema.json +1118 -0
  37. package/dungeons/social.js +686 -0
  38. package/dungeons/text-generation-schema.json +3096 -0
  39. package/dungeons/text-generation.js +812 -0
  40. package/index.js +567 -0
  41. package/lib/core/config-validator.js +395 -0
  42. package/lib/core/context.js +204 -0
  43. package/lib/core/dungeon-loader.js +337 -0
  44. package/lib/core/storage.js +379 -0
  45. package/lib/generators/adspend.js +132 -0
  46. package/lib/generators/events.js +271 -0
  47. package/lib/generators/funnels.js +407 -0
  48. package/lib/generators/mirror.js +167 -0
  49. package/lib/generators/product-lookup.js +262 -0
  50. package/lib/generators/product-names.js +195 -0
  51. package/lib/generators/profiles.js +93 -0
  52. package/lib/generators/scd.js +124 -0
  53. package/lib/generators/text.js +1192 -0
  54. package/lib/orchestrators/mixpanel-sender.js +266 -0
  55. package/lib/orchestrators/user-loop.js +335 -0
  56. package/lib/templates/abbreviated.d.ts +169 -0
  57. package/lib/templates/defaults.js +1405 -0
  58. package/lib/templates/phrases.js +2526 -0
  59. package/lib/templates/schema.d.ts +173 -0
  60. package/lib/templates/soup-presets.js +188 -0
  61. package/lib/utils/function-registry.js +302 -0
  62. package/lib/utils/json-evaluator.js +172 -0
  63. package/lib/utils/logger.js +34 -0
  64. package/lib/utils/utils.js +1490 -0
  65. package/package.json +89 -0
  66. package/types.d.ts +865 -0
@@ -0,0 +1,403 @@
1
+ {
2
+ "schema": {
3
+ "token": "",
4
+ "seed": "0.5990981939869162",
5
+ "numDays": 30,
6
+ "numEvents": 2000000000,
7
+ "numUsers": 2000000,
8
+ "format": "json",
9
+ "region": "US",
10
+ "hasAnonIds": false,
11
+ "hasSessionIds": false,
12
+ "batchSize": 2500000,
13
+ "hasAdSpend": false,
14
+ "hasAvatar": false,
15
+ "hasBrowser": false,
16
+ "hasCampaigns": false,
17
+ "hasIOSDevices": false,
18
+ "hasLocation": false,
19
+ "isAnonymous": true,
20
+ "hasAndroidDevices": false,
21
+ "hasDesktopDevices": false,
22
+ "writeToDisk": false,
23
+ "concurrency": 1,
24
+ "events": [
25
+ {
26
+ "event": "foo",
27
+ "weight": 10,
28
+ "properties": {}
29
+ },
30
+ {
31
+ "event": "bar",
32
+ "weight": 9,
33
+ "properties": {}
34
+ },
35
+ {
36
+ "event": "baz",
37
+ "weight": 8,
38
+ "properties": {}
39
+ },
40
+ {
41
+ "event": "qux",
42
+ "weight": 7,
43
+ "properties": {}
44
+ },
45
+ {
46
+ "event": "garply",
47
+ "weight": 6,
48
+ "properties": {}
49
+ },
50
+ {
51
+ "event": "durtle",
52
+ "weight": 5,
53
+ "properties": {}
54
+ },
55
+ {
56
+ "event": "linny",
57
+ "weight": 4,
58
+ "properties": {}
59
+ },
60
+ {
61
+ "event": "fonk",
62
+ "weight": 3,
63
+ "properties": {}
64
+ },
65
+ {
66
+ "event": "crumn",
67
+ "weight": 2,
68
+ "properties": {}
69
+ },
70
+ {
71
+ "event": "yak",
72
+ "weight": 1,
73
+ "properties": {}
74
+ }
75
+ ],
76
+ "superProps": {
77
+ "string": [
78
+ "red",
79
+ "orange",
80
+ "yellow",
81
+ "green",
82
+ "blue",
83
+ "indigo",
84
+ "violet"
85
+ ],
86
+ "number": {
87
+ "functionName": "integer",
88
+ "args": []
89
+ },
90
+ "boolean": [
91
+ true,
92
+ false
93
+ ],
94
+ "date": [
95
+ "2024-09-18T21:48:28.173Z",
96
+ "2024-12-09T03:17:46.661Z",
97
+ "2024-02-26T07:52:14.943Z",
98
+ "2024-04-22T08:35:17.647Z",
99
+ "2024-11-25T17:03:58.061Z",
100
+ "2024-01-14T21:46:58.982Z",
101
+ "2024-06-20T12:47:25.687Z",
102
+ "2024-08-13T22:18:08.665Z",
103
+ "2024-08-09T07:47:18.321Z",
104
+ "2024-06-21T19:04:43.432Z",
105
+ "2024-03-09T00:18:37.705Z",
106
+ "2024-08-02T09:23:41.699Z",
107
+ "2024-11-26T13:25:08.673Z",
108
+ "2024-05-23T11:51:34.238Z",
109
+ "2024-10-24T20:14:05.106Z",
110
+ "2024-10-01T18:52:32.463Z",
111
+ "2024-10-15T19:22:40.675Z",
112
+ "2024-06-13T21:29:11.962Z",
113
+ "2024-08-29T12:02:48.632Z",
114
+ "2024-12-22T12:11:40.809Z",
115
+ "2024-01-03T03:39:19.446Z",
116
+ "2024-06-28T10:05:43.908Z",
117
+ "2024-12-01T18:49:00.447Z",
118
+ "2024-12-30T05:44:23.418Z",
119
+ "2024-03-14T22:38:40.833Z",
120
+ "2024-12-28T06:45:31.946Z",
121
+ "2024-07-20T21:40:19.498Z",
122
+ "2024-12-26T06:44:41.982Z",
123
+ "2024-10-28T13:45:35.409Z",
124
+ "2024-02-28T00:11:54.916Z",
125
+ "2024-07-08T10:01:57.834Z",
126
+ "2024-02-23T08:00:59.386Z",
127
+ "2024-08-20T05:23:33.024Z",
128
+ "2024-02-10T20:52:46.564Z",
129
+ "2024-08-24T21:32:15.202Z",
130
+ "2024-06-17T03:51:35.142Z",
131
+ "2024-04-09T13:13:45.218Z",
132
+ "2024-07-26T16:31:51.091Z",
133
+ "2024-05-26T04:06:33.013Z",
134
+ "2024-11-05T17:15:37.412Z",
135
+ "2024-10-20T17:01:38.205Z",
136
+ "2024-01-08T05:09:18.692Z",
137
+ "2024-08-24T13:52:14.774Z",
138
+ "2024-06-26T13:47:07.276Z",
139
+ "2024-06-19T15:05:53.246Z",
140
+ "2024-05-01T04:06:52.028Z",
141
+ "2024-05-26T22:45:59.626Z",
142
+ "2024-04-17T20:50:58.460Z",
143
+ "2024-07-28T04:32:04.578Z",
144
+ "2024-01-29T05:31:48.744Z",
145
+ "2024-08-06T18:47:29.190Z",
146
+ "2024-04-03T23:12:20.415Z",
147
+ "2024-09-13T08:47:35.938Z",
148
+ "2024-07-27T15:12:15.145Z",
149
+ "2024-10-24T00:39:21.835Z",
150
+ "2024-10-08T16:50:36.591Z",
151
+ "2024-02-27T15:53:19.204Z",
152
+ "2024-04-21T08:24:05.883Z",
153
+ "2024-03-08T10:07:46.720Z",
154
+ "2024-01-10T08:36:19.554Z",
155
+ "2024-02-17T12:56:00.562Z",
156
+ "2024-10-03T07:54:46.486Z",
157
+ "2024-05-29T10:18:36.289Z",
158
+ "2024-05-06T23:27:07.145Z",
159
+ "2024-05-27T08:41:47.787Z",
160
+ "2024-09-16T12:22:09.573Z",
161
+ "2024-05-03T00:31:06.036Z",
162
+ "2024-11-24T19:38:43.380Z",
163
+ "2024-06-03T04:01:56.328Z",
164
+ "2024-05-04T02:25:25.455Z",
165
+ "2024-12-19T18:35:25.052Z",
166
+ "2024-05-07T21:54:28.113Z",
167
+ "2024-11-24T09:58:08.766Z",
168
+ "2024-03-17T02:46:20.903Z",
169
+ "2024-09-04T09:20:24.930Z",
170
+ "2024-02-04T10:23:33.624Z",
171
+ "2024-01-26T02:42:06.668Z",
172
+ "2024-08-11T02:26:21.969Z",
173
+ "2024-07-11T13:34:51.283Z",
174
+ "2024-12-20T00:09:10.080Z",
175
+ "2024-05-28T00:20:07.079Z",
176
+ "2024-01-13T14:54:03.339Z",
177
+ "2024-08-10T17:18:12.759Z",
178
+ "2024-10-06T15:05:11.437Z",
179
+ "2024-11-18T03:53:12.932Z",
180
+ "2024-02-19T18:06:13.680Z",
181
+ "2024-08-03T11:48:00.207Z",
182
+ "2024-11-22T15:19:47.316Z",
183
+ "2024-06-30T19:56:49.636Z",
184
+ "2024-12-03T00:25:23.926Z",
185
+ "2024-07-30T15:27:18.198Z",
186
+ "2024-09-07T01:40:58.245Z",
187
+ "2024-05-16T05:24:14.727Z",
188
+ "2024-11-14T03:46:49.323Z",
189
+ "2024-02-16T09:18:23.473Z",
190
+ "2024-10-19T14:07:11.462Z",
191
+ "2024-02-09T08:52:04.735Z",
192
+ "2024-06-06T09:41:11.810Z",
193
+ "2024-05-07T23:14:05.114Z",
194
+ "2024-06-03T06:52:21.652Z"
195
+ ]
196
+ },
197
+ "userProps": {
198
+ "luckyNumber": {
199
+ "functionName": "integer",
200
+ "args": []
201
+ },
202
+ "spiritAnimal": [
203
+ "duck",
204
+ "dog",
205
+ "otter",
206
+ "penguin",
207
+ "cat",
208
+ "elephant",
209
+ "lion",
210
+ "cheetah",
211
+ "giraffe",
212
+ "zebra",
213
+ "rhino",
214
+ "hippo",
215
+ "whale",
216
+ "dolphin",
217
+ "shark",
218
+ "octopus",
219
+ "squid",
220
+ "jellyfish",
221
+ "starfish",
222
+ "seahorse",
223
+ "crab",
224
+ "lobster",
225
+ "shrimp",
226
+ "clam",
227
+ "snail",
228
+ "slug",
229
+ "butterfly",
230
+ "moth",
231
+ "bee",
232
+ "wasp",
233
+ "ant",
234
+ "beetle",
235
+ "ladybug",
236
+ "caterpillar",
237
+ "centipede",
238
+ "millipede",
239
+ "scorpion",
240
+ "spider",
241
+ "tarantula",
242
+ "tick",
243
+ "mite",
244
+ "mosquito",
245
+ "fly",
246
+ "dragonfly",
247
+ "damselfly",
248
+ "grasshopper",
249
+ "cricket",
250
+ "locust",
251
+ "mantis",
252
+ "cockroach",
253
+ "termite",
254
+ "praying mantis",
255
+ "walking stick",
256
+ "stick bug",
257
+ "leaf insect",
258
+ "lacewing",
259
+ "aphid",
260
+ "cicada",
261
+ "thrips",
262
+ "psyllid",
263
+ "scale insect",
264
+ "whitefly",
265
+ "mealybug",
266
+ "planthopper",
267
+ "leafhopper",
268
+ "treehopper",
269
+ "flea",
270
+ "louse",
271
+ "bedbug",
272
+ "flea beetle",
273
+ "weevil",
274
+ "longhorn beetle",
275
+ "leaf beetle",
276
+ "tiger beetle",
277
+ "ground beetle",
278
+ "lady beetle",
279
+ "firefly",
280
+ "click beetle",
281
+ "rove beetle",
282
+ "scarab beetle",
283
+ "dung beetle",
284
+ "stag beetle",
285
+ "rhinoceros beetle",
286
+ "hercules beetle",
287
+ "goliath beetle",
288
+ "jewel beetle",
289
+ "tortoise beetle"
290
+ ],
291
+ "created": [
292
+ "2024-09-18T21:48:28.173Z",
293
+ "2024-12-09T03:17:46.661Z",
294
+ "2024-02-26T07:52:14.943Z",
295
+ "2024-04-22T08:35:17.647Z",
296
+ "2024-11-25T17:03:58.061Z",
297
+ "2024-01-14T21:46:58.982Z",
298
+ "2024-06-20T12:47:25.687Z",
299
+ "2024-08-13T22:18:08.665Z",
300
+ "2024-08-09T07:47:18.321Z",
301
+ "2024-06-21T19:04:43.432Z",
302
+ "2024-03-09T00:18:37.705Z",
303
+ "2024-08-02T09:23:41.699Z",
304
+ "2024-11-26T13:25:08.673Z",
305
+ "2024-05-23T11:51:34.238Z",
306
+ "2024-10-24T20:14:05.106Z",
307
+ "2024-10-01T18:52:32.463Z",
308
+ "2024-10-15T19:22:40.675Z",
309
+ "2024-06-13T21:29:11.962Z",
310
+ "2024-08-29T12:02:48.632Z",
311
+ "2024-12-22T12:11:40.809Z",
312
+ "2024-01-03T03:39:19.446Z",
313
+ "2024-06-28T10:05:43.908Z",
314
+ "2024-12-01T18:49:00.447Z",
315
+ "2024-12-30T05:44:23.418Z",
316
+ "2024-03-14T22:38:40.833Z",
317
+ "2024-12-28T06:45:31.946Z",
318
+ "2024-07-20T21:40:19.498Z",
319
+ "2024-12-26T06:44:41.982Z",
320
+ "2024-10-28T13:45:35.409Z",
321
+ "2024-02-28T00:11:54.916Z",
322
+ "2024-07-08T10:01:57.834Z",
323
+ "2024-02-23T08:00:59.386Z",
324
+ "2024-08-20T05:23:33.024Z",
325
+ "2024-02-10T20:52:46.564Z",
326
+ "2024-08-24T21:32:15.202Z",
327
+ "2024-06-17T03:51:35.142Z",
328
+ "2024-04-09T13:13:45.218Z",
329
+ "2024-07-26T16:31:51.091Z",
330
+ "2024-05-26T04:06:33.013Z",
331
+ "2024-11-05T17:15:37.412Z",
332
+ "2024-10-20T17:01:38.205Z",
333
+ "2024-01-08T05:09:18.692Z",
334
+ "2024-08-24T13:52:14.774Z",
335
+ "2024-06-26T13:47:07.276Z",
336
+ "2024-06-19T15:05:53.246Z",
337
+ "2024-05-01T04:06:52.028Z",
338
+ "2024-05-26T22:45:59.626Z",
339
+ "2024-04-17T20:50:58.460Z",
340
+ "2024-07-28T04:32:04.578Z",
341
+ "2024-01-29T05:31:48.744Z",
342
+ "2024-08-06T18:47:29.190Z",
343
+ "2024-04-03T23:12:20.415Z",
344
+ "2024-09-13T08:47:35.938Z",
345
+ "2024-07-27T15:12:15.145Z",
346
+ "2024-10-24T00:39:21.835Z",
347
+ "2024-10-08T16:50:36.591Z",
348
+ "2024-02-27T15:53:19.204Z",
349
+ "2024-04-21T08:24:05.883Z",
350
+ "2024-03-08T10:07:46.720Z",
351
+ "2024-01-10T08:36:19.554Z",
352
+ "2024-02-17T12:56:00.562Z",
353
+ "2024-10-03T07:54:46.486Z",
354
+ "2024-05-29T10:18:36.289Z",
355
+ "2024-05-06T23:27:07.145Z",
356
+ "2024-05-27T08:41:47.787Z",
357
+ "2024-09-16T12:22:09.573Z",
358
+ "2024-05-03T00:31:06.036Z",
359
+ "2024-11-24T19:38:43.380Z",
360
+ "2024-06-03T04:01:56.328Z",
361
+ "2024-05-04T02:25:25.455Z",
362
+ "2024-12-19T18:35:25.052Z",
363
+ "2024-05-07T21:54:28.113Z",
364
+ "2024-11-24T09:58:08.766Z",
365
+ "2024-03-17T02:46:20.903Z",
366
+ "2024-09-04T09:20:24.930Z",
367
+ "2024-02-04T10:23:33.624Z",
368
+ "2024-01-26T02:42:06.668Z",
369
+ "2024-08-11T02:26:21.969Z",
370
+ "2024-07-11T13:34:51.283Z",
371
+ "2024-12-20T00:09:10.080Z",
372
+ "2024-05-28T00:20:07.079Z",
373
+ "2024-01-13T14:54:03.339Z",
374
+ "2024-08-10T17:18:12.759Z",
375
+ "2024-10-06T15:05:11.437Z",
376
+ "2024-11-18T03:53:12.932Z",
377
+ "2024-02-19T18:06:13.680Z",
378
+ "2024-08-03T11:48:00.207Z",
379
+ "2024-11-22T15:19:47.316Z",
380
+ "2024-06-30T19:56:49.636Z",
381
+ "2024-12-03T00:25:23.926Z",
382
+ "2024-07-30T15:27:18.198Z",
383
+ "2024-09-07T01:40:58.245Z",
384
+ "2024-05-16T05:24:14.727Z",
385
+ "2024-11-14T03:46:49.323Z",
386
+ "2024-02-16T09:18:23.473Z",
387
+ "2024-10-19T14:07:11.462Z",
388
+ "2024-02-09T08:52:04.735Z",
389
+ "2024-06-06T09:41:11.810Z",
390
+ "2024-05-07T23:14:05.114Z",
391
+ "2024-06-03T06:52:21.652Z"
392
+ ]
393
+ },
394
+ "scdProps": {},
395
+ "mirrorProps": {},
396
+ "lookupTables": [],
397
+ "groupKeys": [],
398
+ "groupProps": {}
399
+ },
400
+ "hooks": "function (record, type, meta) {\n\t\t// event hook: high-weight events get a \"hot\" flag, low-weight get \"cold\"\n\t\tif (type === \"event\") {\n\t\t\tconst hotEvents = [\"foo\", \"bar\", \"baz\"];\n\t\t\tconst coldEvents = [\"crumn\", \"yak\"];\n\t\t\tif (hotEvents.includes(record.event)) {\n\t\t\t\trecord.temperature = \"hot\";\n\t\t\t} else if (coldEvents.includes(record.event)) {\n\t\t\t\trecord.temperature = \"cold\";\n\t\t\t} else {\n\t\t\t\trecord.temperature = \"warm\";\n\t\t\t}\n\t\t}\n\n\t\t// everything hook: hash-based cohort — 10% of users (by distinct_id) get doubled events\n\t\tif (type === \"everything\") {\n\t\t\tif (record.length > 0) {\n\t\t\t\tconst userId = record[0].user_id || record[0].distinct_id || \"\";\n\t\t\t\tif (userId && userId.charCodeAt(0) % 10 === 0) {\n\t\t\t\t\t// power user: duplicate each event with a slight time offset\n\t\t\t\t\tconst extras = record.slice(0, 3).map(e => ({\n\t\t\t\t\t\t...e,\n\t\t\t\t\t\tevent: e.event,\n\t\t\t\t\t\tuser_id: e.user_id,\n\t\t\t\t\t\ttime: e.time,\n\t\t\t\t\t\tis_duplicate: true,\n\t\t\t\t\t}));\n\t\t\t\t\treturn record.concat(extras);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn record;\n\t\t}\n\n\t\treturn record;\n\t}",
401
+ "timestamp": "2026-04-10T01:39:06.924Z",
402
+ "version": "4.0"
403
+ }
@@ -0,0 +1,296 @@
1
+ /**
2
+ * ═══════════════════════════════════════════════════════════════
3
+ * DATASET OVERVIEW
4
+ * ═══════════════════════════════════════════════════════════════
5
+ *
6
+ * Foobar — minimal test/sanity dungeon with abstract event names.
7
+ * - Configurable scale (default 2 billion events for stress testing)
8
+ * - 10 events: foo, bar, baz, qux, garply, durtle, linny, fonk, crumn, yak
9
+ * - Super props: string, number, boolean, date
10
+ * - No funnels, no properties on events — pure weight-driven distribution
11
+ *
12
+ * ═══════════════════════════════════════════════════════════════
13
+ * ANALYTICS HOOKS (2 patterns)
14
+ * ═══════════════════════════════════════════════════════════════
15
+ *
16
+ * 1. TEMPERATURE TAGGING (event hook)
17
+ * foo/bar/baz = "hot", crumn/yak = "cold", everything else = "warm".
18
+ *
19
+ * Mixpanel Report:
20
+ * - Insights: any event, total events, breakdown by temperature
21
+ * Expected: "hot" dominates (highest-weight events)
22
+ *
23
+ * 2. HASH-BASED POWER USERS (everything hook)
24
+ * ~10% of users (by distinct_id hash) get 3 extra duplicate events.
25
+ *
26
+ * Mixpanel Report:
27
+ * - Insights: any event, total per user, breakdown by is_duplicate
28
+ * Expected: ~10% of users have extra events tagged is_duplicate=true
29
+ */
30
+
31
+
32
+
33
+
34
+ function integer(min = 1, max = 100) {
35
+ // If min equals max, just return the value
36
+ if (min === max) {
37
+ return min;
38
+ }
39
+
40
+ // Swap min and max if min is greater than max
41
+ if (min > max) {
42
+ [min, max] = [max, min];
43
+ }
44
+
45
+ // Generate a random integer between min and max (inclusive)
46
+ return Math.floor(Math.random() * (max - min + 1)) + min;
47
+ }
48
+
49
+
50
+ const dates = [
51
+ "2024-09-18T21:48:28.173Z",
52
+ "2024-12-09T03:17:46.661Z",
53
+ "2024-02-26T07:52:14.943Z",
54
+ "2024-04-22T08:35:17.647Z",
55
+ "2024-11-25T17:03:58.061Z",
56
+ "2024-01-14T21:46:58.982Z",
57
+ "2024-06-20T12:47:25.687Z",
58
+ "2024-08-13T22:18:08.665Z",
59
+ "2024-08-09T07:47:18.321Z",
60
+ "2024-06-21T19:04:43.432Z",
61
+ "2024-03-09T00:18:37.705Z",
62
+ "2024-08-02T09:23:41.699Z",
63
+ "2024-11-26T13:25:08.673Z",
64
+ "2024-05-23T11:51:34.238Z",
65
+ "2024-10-24T20:14:05.106Z",
66
+ "2024-10-01T18:52:32.463Z",
67
+ "2024-10-15T19:22:40.675Z",
68
+ "2024-06-13T21:29:11.962Z",
69
+ "2024-08-29T12:02:48.632Z",
70
+ "2024-12-22T12:11:40.809Z",
71
+ "2024-01-03T03:39:19.446Z",
72
+ "2024-06-28T10:05:43.908Z",
73
+ "2024-12-01T18:49:00.447Z",
74
+ "2024-12-30T05:44:23.418Z",
75
+ "2024-03-14T22:38:40.833Z",
76
+ "2024-12-28T06:45:31.946Z",
77
+ "2024-07-20T21:40:19.498Z",
78
+ "2024-12-26T06:44:41.982Z",
79
+ "2024-10-28T13:45:35.409Z",
80
+ "2024-02-28T00:11:54.916Z",
81
+ "2024-07-08T10:01:57.834Z",
82
+ "2024-02-23T08:00:59.386Z",
83
+ "2024-08-20T05:23:33.024Z",
84
+ "2024-02-10T20:52:46.564Z",
85
+ "2024-08-24T21:32:15.202Z",
86
+ "2024-06-17T03:51:35.142Z",
87
+ "2024-04-09T13:13:45.218Z",
88
+ "2024-07-26T16:31:51.091Z",
89
+ "2024-05-26T04:06:33.013Z",
90
+ "2024-11-05T17:15:37.412Z",
91
+ "2024-10-20T17:01:38.205Z",
92
+ "2024-01-08T05:09:18.692Z",
93
+ "2024-08-24T13:52:14.774Z",
94
+ "2024-06-26T13:47:07.276Z",
95
+ "2024-06-19T15:05:53.246Z",
96
+ "2024-05-01T04:06:52.028Z",
97
+ "2024-05-26T22:45:59.626Z",
98
+ "2024-04-17T20:50:58.460Z",
99
+ "2024-07-28T04:32:04.578Z",
100
+ "2024-01-29T05:31:48.744Z",
101
+ "2024-08-06T18:47:29.190Z",
102
+ "2024-04-03T23:12:20.415Z",
103
+ "2024-09-13T08:47:35.938Z",
104
+ "2024-07-27T15:12:15.145Z",
105
+ "2024-10-24T00:39:21.835Z",
106
+ "2024-10-08T16:50:36.591Z",
107
+ "2024-02-27T15:53:19.204Z",
108
+ "2024-04-21T08:24:05.883Z",
109
+ "2024-03-08T10:07:46.720Z",
110
+ "2024-01-10T08:36:19.554Z",
111
+ "2024-02-17T12:56:00.562Z",
112
+ "2024-10-03T07:54:46.486Z",
113
+ "2024-05-29T10:18:36.289Z",
114
+ "2024-05-06T23:27:07.145Z",
115
+ "2024-05-27T08:41:47.787Z",
116
+ "2024-09-16T12:22:09.573Z",
117
+ "2024-05-03T00:31:06.036Z",
118
+ "2024-11-24T19:38:43.380Z",
119
+ "2024-06-03T04:01:56.328Z",
120
+ "2024-05-04T02:25:25.455Z",
121
+ "2024-12-19T18:35:25.052Z",
122
+ "2024-05-07T21:54:28.113Z",
123
+ "2024-11-24T09:58:08.766Z",
124
+ "2024-03-17T02:46:20.903Z",
125
+ "2024-09-04T09:20:24.930Z",
126
+ "2024-02-04T10:23:33.624Z",
127
+ "2024-01-26T02:42:06.668Z",
128
+ "2024-08-11T02:26:21.969Z",
129
+ "2024-07-11T13:34:51.283Z",
130
+ "2024-12-20T00:09:10.080Z",
131
+ "2024-05-28T00:20:07.079Z",
132
+ "2024-01-13T14:54:03.339Z",
133
+ "2024-08-10T17:18:12.759Z",
134
+ "2024-10-06T15:05:11.437Z",
135
+ "2024-11-18T03:53:12.932Z",
136
+ "2024-02-19T18:06:13.680Z",
137
+ "2024-08-03T11:48:00.207Z",
138
+ "2024-11-22T15:19:47.316Z",
139
+ "2024-06-30T19:56:49.636Z",
140
+ "2024-12-03T00:25:23.926Z",
141
+ "2024-07-30T15:27:18.198Z",
142
+ "2024-09-07T01:40:58.245Z",
143
+ "2024-05-16T05:24:14.727Z",
144
+ "2024-11-14T03:46:49.323Z",
145
+ "2024-02-16T09:18:23.473Z",
146
+ "2024-10-19T14:07:11.462Z",
147
+ "2024-02-09T08:52:04.735Z",
148
+ "2024-06-06T09:41:11.810Z",
149
+ "2024-05-07T23:14:05.114Z",
150
+ "2024-06-03T06:52:21.652Z"
151
+ ];
152
+
153
+ const billionsOfEvents = 2
154
+
155
+ const numEvents = billionsOfEvents * 1_000_000_000;
156
+ const eventPerUser = 1_000;
157
+ const numUsers = Math.floor(numEvents / eventPerUser);
158
+ const seed = Math.random().toString()
159
+
160
+ /** @type {import('../types').Dungeon} */
161
+ const config = {
162
+ token: "",
163
+ seed: seed,
164
+ numDays: 30, //how many days worth of data
165
+ numEvents: numEvents, //how many events
166
+ numUsers: numUsers, //how many users
167
+ format: 'json', //csv or json
168
+ region: "US",
169
+ hasAnonIds: false, //if true, anonymousIds are created for each user
170
+ hasSessionIds: false, //if true, hasSessionIds are created for each user
171
+ batchSize: 2_500_000,
172
+ hasAdSpend: false,
173
+ hasAvatar: false,
174
+ hasBrowser: false,
175
+ hasCampaigns: false,
176
+ hasIOSDevices: false,
177
+ hasLocation: false,
178
+ isAnonymous: true,
179
+ hasAndroidDevices: false,
180
+ hasDesktopDevices: false,
181
+ writeToDisk: false,
182
+ concurrency: 1,
183
+
184
+ events: [
185
+ {
186
+ event: "foo",
187
+ weight: 10,
188
+ properties: {}
189
+ },
190
+ {
191
+ event: "bar",
192
+ weight: 9,
193
+ properties: {}
194
+ },
195
+ {
196
+ event: "baz",
197
+ weight: 8,
198
+ properties: {}
199
+ },
200
+ {
201
+ event: "qux",
202
+ weight: 7,
203
+ properties: {}
204
+ },
205
+ {
206
+ event: "garply",
207
+ weight: 6,
208
+ properties: {}
209
+ },
210
+ {
211
+ event: "durtle",
212
+ weight: 5,
213
+ properties: {}
214
+ },
215
+ {
216
+ event: "linny",
217
+ weight: 4,
218
+ properties: {}
219
+ },
220
+ {
221
+ event: "fonk",
222
+ weight: 3,
223
+ properties: {}
224
+ },
225
+ {
226
+ event: "crumn",
227
+ weight: 2,
228
+ properties: {}
229
+ },
230
+ {
231
+ event: "yak",
232
+ weight: 1,
233
+ properties: {}
234
+ }
235
+ ],
236
+ superProps: {
237
+ string: ["red", "orange", "yellow", "green", "blue", "indigo", "violet"],
238
+ number: integer,
239
+ boolean: [true, false],
240
+ date: dates,
241
+
242
+ },
243
+ userProps: {
244
+ luckyNumber: integer,
245
+ spiritAnimal: ["duck", "dog", "otter", "penguin", "cat", "elephant", "lion", "cheetah", "giraffe", "zebra", "rhino", "hippo", "whale", "dolphin", "shark", "octopus", "squid", "jellyfish", "starfish", "seahorse", "crab", "lobster", "shrimp", "clam", "snail", "slug", "butterfly", "moth", "bee", "wasp", "ant", "beetle", "ladybug", "caterpillar", "centipede", "millipede", "scorpion", "spider", "tarantula", "tick", "mite", "mosquito", "fly", "dragonfly", "damselfly", "grasshopper", "cricket", "locust", "mantis", "cockroach", "termite", "praying mantis", "walking stick", "stick bug", "leaf insect", "lacewing", "aphid", "cicada", "thrips", "psyllid", "scale insect", "whitefly", "mealybug", "planthopper", "leafhopper", "treehopper", "flea", "louse", "bedbug", "flea beetle", "weevil", "longhorn beetle", "leaf beetle", "tiger beetle", "ground beetle", "lady beetle", "firefly", "click beetle", "rove beetle", "scarab beetle", "dung beetle", "stag beetle", "rhinoceros beetle", "hercules beetle", "goliath beetle", "jewel beetle", "tortoise beetle"],
246
+ created: dates,
247
+ },
248
+
249
+ scdProps: {},
250
+ mirrorProps: {},
251
+ lookupTables: [],
252
+ groupKeys: [
253
+ ],
254
+ groupProps: {
255
+ },
256
+
257
+ hook: function (record, type, meta) {
258
+ // event hook: high-weight events get a "hot" flag, low-weight get "cold"
259
+ if (type === "event") {
260
+ const hotEvents = ["foo", "bar", "baz"];
261
+ const coldEvents = ["crumn", "yak"];
262
+ if (hotEvents.includes(record.event)) {
263
+ record.temperature = "hot";
264
+ } else if (coldEvents.includes(record.event)) {
265
+ record.temperature = "cold";
266
+ } else {
267
+ record.temperature = "warm";
268
+ }
269
+ }
270
+
271
+ // everything hook: hash-based cohort — 10% of users (by distinct_id) get doubled events
272
+ if (type === "everything") {
273
+ if (record.length > 0) {
274
+ const userId = record[0].user_id || record[0].distinct_id || "";
275
+ if (userId && userId.charCodeAt(0) % 10 === 0) {
276
+ // power user: duplicate each event with a slight time offset
277
+ const extras = record.slice(0, 3).map(e => ({
278
+ ...e,
279
+ event: e.event,
280
+ user_id: e.user_id,
281
+ time: e.time,
282
+ is_duplicate: true,
283
+ }));
284
+ return record.concat(extras);
285
+ }
286
+ }
287
+ return record;
288
+ }
289
+
290
+ return record;
291
+ }
292
+ };
293
+
294
+
295
+
296
+ export default config;