karafka 2.4.18 → 2.5.0.beta2

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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +3 -0
  3. data/.github/workflows/ci.yml +58 -14
  4. data/.github/workflows/push.yml +36 -0
  5. data/.github/workflows/verify-action-pins.yml +16 -0
  6. data/.ruby-version +1 -1
  7. data/CHANGELOG.md +60 -0
  8. data/Gemfile +2 -2
  9. data/Gemfile.lock +69 -50
  10. data/LICENSE-COMM +2 -2
  11. data/README.md +1 -1
  12. data/Rakefile +4 -0
  13. data/bin/clean_kafka +43 -0
  14. data/bin/integrations +19 -6
  15. data/bin/rspecs +15 -3
  16. data/bin/verify_kafka_warnings +35 -0
  17. data/bin/verify_topics_naming +27 -0
  18. data/config/locales/errors.yml +3 -0
  19. data/config/locales/pro_errors.yml +13 -2
  20. data/docker-compose.yml +1 -1
  21. data/examples/payloads/json/enrollment_event.json +579 -0
  22. data/examples/payloads/json/ingestion_event.json +30 -0
  23. data/examples/payloads/json/transaction_event.json +17 -0
  24. data/examples/payloads/json/user_event.json +11 -0
  25. data/karafka.gemspec +3 -8
  26. data/lib/karafka/active_job/current_attributes.rb +1 -1
  27. data/lib/karafka/admin/acl.rb +5 -1
  28. data/lib/karafka/admin/configs.rb +5 -1
  29. data/lib/karafka/admin.rb +69 -34
  30. data/lib/karafka/base_consumer.rb +17 -8
  31. data/lib/karafka/cli/base.rb +8 -2
  32. data/lib/karafka/cli/topics/align.rb +7 -4
  33. data/lib/karafka/cli/topics/base.rb +17 -0
  34. data/lib/karafka/cli/topics/create.rb +9 -7
  35. data/lib/karafka/cli/topics/delete.rb +4 -2
  36. data/lib/karafka/cli/topics/help.rb +39 -0
  37. data/lib/karafka/cli/topics/repartition.rb +4 -2
  38. data/lib/karafka/cli/topics.rb +10 -3
  39. data/lib/karafka/cli.rb +2 -0
  40. data/lib/karafka/connection/client.rb +30 -9
  41. data/lib/karafka/connection/listener.rb +24 -12
  42. data/lib/karafka/connection/messages_buffer.rb +1 -1
  43. data/lib/karafka/connection/proxy.rb +3 -0
  44. data/lib/karafka/constraints.rb +3 -3
  45. data/lib/karafka/contracts/config.rb +3 -0
  46. data/lib/karafka/contracts/topic.rb +1 -1
  47. data/lib/karafka/errors.rb +46 -2
  48. data/lib/karafka/helpers/async.rb +3 -1
  49. data/lib/karafka/instrumentation/callbacks/rebalance.rb +5 -1
  50. data/lib/karafka/instrumentation/logger_listener.rb +86 -23
  51. data/lib/karafka/instrumentation/proctitle_listener.rb +5 -1
  52. data/lib/karafka/instrumentation/vendors/datadog/metrics_listener.rb +2 -2
  53. data/lib/karafka/messages/builders/batch_metadata.rb +1 -1
  54. data/lib/karafka/pro/cleaner.rb +8 -0
  55. data/lib/karafka/pro/cli/parallel_segments/base.rb +89 -0
  56. data/lib/karafka/pro/cli/parallel_segments/collapse.rb +164 -0
  57. data/lib/karafka/pro/cli/parallel_segments/distribute.rb +164 -0
  58. data/lib/karafka/pro/cli/parallel_segments.rb +60 -0
  59. data/lib/karafka/pro/connection/manager.rb +5 -8
  60. data/lib/karafka/pro/encryption.rb +8 -0
  61. data/lib/karafka/pro/instrumentation/performance_tracker.rb +1 -1
  62. data/lib/karafka/pro/iterator/expander.rb +5 -3
  63. data/lib/karafka/pro/iterator/tpl_builder.rb +23 -0
  64. data/lib/karafka/pro/loader.rb +10 -0
  65. data/lib/karafka/pro/processing/coordinator.rb +4 -1
  66. data/lib/karafka/pro/processing/coordinators/errors_tracker.rb +27 -3
  67. data/lib/karafka/pro/processing/coordinators/filters_applier.rb +11 -0
  68. data/lib/karafka/pro/processing/filters/base.rb +10 -2
  69. data/lib/karafka/pro/processing/filters/expirer.rb +5 -0
  70. data/lib/karafka/pro/processing/filters/inline_insights_delayer.rb +2 -2
  71. data/lib/karafka/pro/processing/filters/virtual_limiter.rb +5 -0
  72. data/lib/karafka/pro/processing/parallel_segments/filters/base.rb +73 -0
  73. data/lib/karafka/pro/processing/parallel_segments/filters/default.rb +85 -0
  74. data/lib/karafka/pro/processing/parallel_segments/filters/mom.rb +66 -0
  75. data/lib/karafka/pro/processing/partitioner.rb +1 -13
  76. data/lib/karafka/pro/processing/piping/consumer.rb +13 -13
  77. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom.rb +1 -1
  78. data/lib/karafka/pro/processing/strategies/aj/dlq_ftr_lrj_mom_vp.rb +1 -1
  79. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom.rb +1 -1
  80. data/lib/karafka/pro/processing/strategies/aj/dlq_lrj_mom_vp.rb +1 -1
  81. data/lib/karafka/pro/processing/strategies/aj/ftr_lrj_mom_vp.rb +1 -1
  82. data/lib/karafka/pro/processing/strategies/aj/lrj_mom_vp.rb +1 -1
  83. data/lib/karafka/pro/processing/strategies/default.rb +36 -8
  84. data/lib/karafka/pro/processing/strategies/dlq/default.rb +14 -10
  85. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj.rb +1 -1
  86. data/lib/karafka/pro/processing/strategies/dlq/ftr_lrj_mom.rb +1 -1
  87. data/lib/karafka/pro/processing/strategies/dlq/lrj.rb +3 -1
  88. data/lib/karafka/pro/processing/strategies/dlq/lrj_mom.rb +1 -1
  89. data/lib/karafka/pro/processing/strategies/ftr/default.rb +1 -1
  90. data/lib/karafka/pro/processing/strategies/lrj/default.rb +4 -1
  91. data/lib/karafka/pro/processing/strategies/lrj/ftr.rb +1 -1
  92. data/lib/karafka/pro/processing/strategies/lrj/ftr_mom.rb +1 -1
  93. data/lib/karafka/pro/processing/strategies/lrj/mom.rb +1 -1
  94. data/lib/karafka/pro/processing/virtual_partitions/distributors/balanced.rb +50 -0
  95. data/lib/karafka/pro/processing/virtual_partitions/distributors/base.rb +29 -0
  96. data/lib/karafka/pro/processing/virtual_partitions/distributors/consistent.rb +27 -0
  97. data/lib/karafka/pro/recurring_tasks/contracts/config.rb +8 -4
  98. data/lib/karafka/pro/recurring_tasks/dispatcher.rb +3 -3
  99. data/lib/karafka/pro/recurring_tasks/setup/config.rb +7 -2
  100. data/lib/karafka/pro/recurring_tasks.rb +13 -0
  101. data/lib/karafka/pro/routing/features/dead_letter_queue/topic.rb +1 -1
  102. data/lib/karafka/pro/routing/features/multiplexing/config.rb +1 -0
  103. data/lib/karafka/pro/routing/features/multiplexing/contracts/topic.rb +17 -0
  104. data/lib/karafka/pro/routing/features/multiplexing/proxy.rb +5 -2
  105. data/lib/karafka/pro/routing/features/multiplexing/subscription_group.rb +8 -1
  106. data/lib/karafka/pro/routing/features/parallel_segments/builder.rb +47 -0
  107. data/lib/karafka/pro/routing/features/parallel_segments/config.rb +27 -0
  108. data/lib/karafka/pro/routing/features/parallel_segments/consumer_group.rb +83 -0
  109. data/lib/karafka/pro/routing/features/parallel_segments/contracts/consumer_group.rb +49 -0
  110. data/lib/karafka/pro/routing/features/parallel_segments/topic.rb +43 -0
  111. data/lib/karafka/pro/routing/features/parallel_segments.rb +24 -0
  112. data/lib/karafka/pro/routing/features/patterns/pattern.rb +1 -1
  113. data/lib/karafka/pro/routing/features/recurring_tasks/builder.rb +2 -2
  114. data/lib/karafka/pro/routing/features/scheduled_messages/builder.rb +10 -6
  115. data/lib/karafka/pro/routing/features/virtual_partitions/config.rb +20 -2
  116. data/lib/karafka/pro/routing/features/virtual_partitions/contracts/topic.rb +1 -0
  117. data/lib/karafka/pro/routing/features/virtual_partitions/topic.rb +8 -2
  118. data/lib/karafka/pro/scheduled_messages/consumer.rb +19 -21
  119. data/lib/karafka/pro/scheduled_messages/daily_buffer.rb +9 -6
  120. data/lib/karafka/pro/scheduled_messages/deserializers/headers.rb +7 -1
  121. data/lib/karafka/pro/scheduled_messages/max_epoch.rb +15 -6
  122. data/lib/karafka/pro/scheduled_messages.rb +13 -0
  123. data/lib/karafka/processing/coordinators_buffer.rb +1 -0
  124. data/lib/karafka/processing/strategies/default.rb +4 -4
  125. data/lib/karafka/routing/features/dead_letter_queue/contracts/topic.rb +1 -0
  126. data/lib/karafka/routing/subscription_group.rb +1 -1
  127. data/lib/karafka/runner.rb +7 -1
  128. data/lib/karafka/server.rb +19 -19
  129. data/lib/karafka/setup/attributes_map.rb +2 -0
  130. data/lib/karafka/setup/config.rb +22 -1
  131. data/lib/karafka/setup/defaults_injector.rb +26 -1
  132. data/lib/karafka/status.rb +6 -1
  133. data/lib/karafka/swarm/node.rb +31 -0
  134. data/lib/karafka/swarm/supervisor.rb +4 -0
  135. data/lib/karafka/templates/karafka.rb.erb +14 -1
  136. data/lib/karafka/version.rb +1 -1
  137. data/lib/karafka.rb +17 -9
  138. data/renovate.json +14 -2
  139. metadata +40 -40
  140. checksums.yaml.gz.sig +0 -0
  141. data/certs/cert.pem +0 -26
  142. data.tar.gz.sig +0 -0
  143. metadata.gz.sig +0 -0
@@ -0,0 +1,579 @@
1
+ {
2
+ "event_type": "enrollment",
3
+ "data": {
4
+ "tenant_id": "tenant_5",
5
+ "tenant_dashed_id": "tenant_5",
6
+ "tenant_name": "Tenant 5",
7
+ "rc_base_url": "https://tenant-5.example.com",
8
+ "domain": "tenant-5.example.com",
9
+ "admin_domain": "tenant-5.admin.example.com",
10
+ "admin_email": "email@example.com",
11
+ "country_codes": [
12
+ "US"
13
+ ],
14
+ "cash_currency": "USD",
15
+ "locales": [
16
+ "en-US"
17
+ ],
18
+ "tenant_locales": [
19
+ {
20
+ "locale": "en-US",
21
+ "enabled": true,
22
+ "default_for_tenant": true
23
+ }
24
+ ],
25
+ "time_zone": "America/New_York",
26
+ "provider_config": {
27
+ "request_phase_url": "https://random.tenant-5.com/example"
28
+ },
29
+ "partner_name_for_te": "tenant_InternalId partner",
30
+ "tenant_code_for_tc": "CODE_FOR_TC",
31
+ "webhook_resource_app_name_for_tc": "service_4",
32
+ "tenant_status_for_tc": "live",
33
+ "nn_internal_domain": "service-4.internal.com",
34
+ "mc_internal_domain": "service-5.internal.com",
35
+ "nn_internal_webhook_url": "https://service-4.internal.com/int/webhooks",
36
+ "loyalty_programs_for_nn": [
37
+ {
38
+ "loyalty_program": {
39
+ "transfer_connect_identifier": "tenant_InternalId",
40
+ "active": true,
41
+ "tenant": true,
42
+ "manual_verification_required": false,
43
+ "tenant_id": "tenant_InternalId",
44
+ "name_required": false,
45
+ "category": "airline",
46
+ "name": "tenant_InternalId Rewards",
47
+ "short_name": "tenant_InternalId Rewards",
48
+ "description": "tenant_InternalId",
49
+ "translations": {
50
+ "en-US": {
51
+ "name": "tenant_InternalId Rewards",
52
+ "short_name": "tenant_InternalId Rewards"
53
+ }
54
+ }
55
+ },
56
+ "capability": {},
57
+ "loyalty_currency": {
58
+ "name": "Rewards Points",
59
+ "short_name": "Rewards Points",
60
+ "translations": {
61
+ "en-US": {
62
+ "name": "Rewards Points",
63
+ "short_name": "Rewards Points"
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ],
69
+ "payment_tier_id": "paid_at_redemption",
70
+ "demo": true,
71
+ "feature_settings": {
72
+ "accrual_campaign": {
73
+ "enabled": true
74
+ },
75
+ "gift_card_campaign": {
76
+ "enabled": true
77
+ },
78
+ "comms_campaign": {
79
+ "enabled": true
80
+ }
81
+ },
82
+ "ui_settings": {
83
+ "application": {
84
+ "components": {
85
+ "buttons": {
86
+ "primary": {
87
+ "borderRadius": "4px",
88
+ "borderWidth": "1px",
89
+ "textColor": "#FFFFFF"
90
+ },
91
+ "secondary": {
92
+ "borderRadius": "4px",
93
+ "borderWidth": "1px",
94
+ "textColor": "#22285A"
95
+ }
96
+ },
97
+ "breadcrumbs": {
98
+ "enabled": true
99
+ },
100
+ "footer": {
101
+ "enabled": true,
102
+ "backgroundColor": "#22285A",
103
+ "color": "#E3E4EB",
104
+ "logo": "inverted",
105
+ "footerLogo": "https://some.random.url.com/logo.png",
106
+ "hideBranding": false,
107
+ "textAlign": "text-left",
108
+ "textDecoration": "no-underline",
109
+ "textTransform": "none",
110
+ "variant": "footer-2"
111
+ },
112
+ "header": {
113
+ "enabled": true,
114
+ "avatar": "primary",
115
+ "backgroundColor": "#22285A",
116
+ "color": "#FFFFFF",
117
+ "logo": "primary",
118
+ "showLogo": true,
119
+ "twoLayer": true
120
+ },
121
+ "heroBannerAndQuickLinks": {
122
+ "backgroundColor": "#22285A",
123
+ "textColor": "#FFFFFF"
124
+ },
125
+ "navigation": {
126
+ "descriptionColor": "#818181",
127
+ "hoverBackgroundColor": "#00000000"
128
+ },
129
+ "spinner": {}
130
+ },
131
+ "features": {
132
+ "cashback": {
133
+ "description": {
134
+ "color": "#FFFFFF",
135
+ "text": " Maximize Your Rewards: Cash in on Incredible Cashback Offers",
136
+ "transform": "none"
137
+ },
138
+ "enabled": false,
139
+ "listingImageUrl": "https://some-random-url.com/assets/image.jpg",
140
+ "productImageUrl": "https://some-random-url.com/assets/image.jpg",
141
+ "title": {
142
+ "color": "#FFFFFF",
143
+ "text": "Cashback",
144
+ "transform": "capitalize"
145
+ }
146
+ },
147
+ "crypto": {
148
+ "description": {
149
+ "color": "#FFFFFF",
150
+ "text": "Unlock the Future: Convert Your Events into Stream",
151
+ "transform": "none"
152
+ },
153
+ "enabled": false,
154
+ "listingImageUrl": "https://some-random-url.com/assets/crypto.jpg",
155
+ "productImageUrl": "https://some-random-url.com/assets/crypto.jpg",
156
+ "title": {
157
+ "color": "#FFFFFF",
158
+ "text": "Crypto",
159
+ "transform": "capitalize"
160
+ }
161
+ },
162
+ "giftCard": {
163
+ "description": {
164
+ "color": "#FFFFFF",
165
+ "text": "Unlock Endless Possibilities: Redeem Gift Cards for Your Favorite Events",
166
+ "transform": "none"
167
+ },
168
+ "enabled": false,
169
+ "listingImageUrl": "https://some-random-url.com/assets/gift_card.jpg",
170
+ "productImageUrl": "https://some-random-url.com/assets/gift_card.jpg",
171
+ "title": {
172
+ "color": "#FFFFFF",
173
+ "text": "Gift Card",
174
+ "transform": "capitalize"
175
+ }
176
+ },
177
+ "offer": {
178
+ "title": {
179
+ "text": "Offers",
180
+ "color": "#FFFFFF",
181
+ "transform": "capitalize"
182
+ },
183
+ "enabled": false,
184
+ "description": {
185
+ "text": "Save with free hand-picked coupons, promo codes, discounts & deals.",
186
+ "color": "#FFFFFF",
187
+ "transform": "uppercase"
188
+ },
189
+ "listingImageUrl": "https://some-random-url.com/assets/offers_banner.jpeg",
190
+ "productImageUrl": "https://some-random-url.com/assets/offers_banner.jpeg"
191
+ },
192
+ "dining": {
193
+ "enabled": false,
194
+ "title": {
195
+ "text": "Premium dining",
196
+ "color": "#FFFFFF",
197
+ "transform": "capitalize"
198
+ },
199
+ "description": {
200
+ "text": "Earn points on your purchases when you make payment using an eligible card.",
201
+ "color": "#FFFFFF",
202
+ "transform": "uppercase"
203
+ },
204
+ "listingImageUrl": "https://some-random-url.com/assets/dining-background.jpeg",
205
+ "productImageUrl": "https://some-random-url.com/assets/dining-background.jpeg"
206
+ },
207
+ "extraCredit": {
208
+ "title": {
209
+ "text": "Karafka Credit",
210
+ "color": "#FFFFFF",
211
+ "transform": "capitalize"
212
+ },
213
+ "enabled": false,
214
+ "description": {
215
+ "text": "Turn points into Karafka credit for convenient rides and food delivery",
216
+ "color": "#FFFFFF",
217
+ "transform": "uppercase"
218
+ },
219
+ "listingImageUrl": "https://some-random-url.com/assets/extra.png",
220
+ "productImageUrl": "https://some-random-url.com/assets/extra.png"
221
+ },
222
+ "pointsTransfer": {
223
+ "description": {
224
+ "color": "#FFFFFF",
225
+ "text": "Extend your Reach: Transfer Points to Unlock New Rewards",
226
+ "transform": "none"
227
+ },
228
+ "enabled": false,
229
+ "listingImageUrl": "https://some-random-url.com/assets/frequent_traveller_programs.jpg",
230
+ "productImageUrl": "https://some-random-url.com/assets/frequent_traveller_programs.jpg",
231
+ "title": {
232
+ "color": "#FFFFFF",
233
+ "text": "Transfer",
234
+ "transform": "capitalize"
235
+ }
236
+ },
237
+ "rewardsSummary": {
238
+ "listingImageUrl": "https://some-random-url.com/assets/reward_summary.jpg",
239
+ "title": {
240
+ "color": "#FFFFFF",
241
+ "text": "My Rewards Summary",
242
+ "transform": "capitalize"
243
+ },
244
+ "includeHeadlessRedemptions": true
245
+ },
246
+ "sustainability": {
247
+ "description": {
248
+ "color": "#FFFFFF",
249
+ "text": "Rewarding Sustainability: Make Every Point Count for a Better Planet",
250
+ "transform": "none"
251
+ },
252
+ "enabled": false,
253
+ "listingImageUrl": "https://some-random-url.com/assets/sustainability.jpg",
254
+ "productImageUrl": "https://some-random-url.com/assets/sustainability.jpg",
255
+ "title": {
256
+ "color": "#FFFFFF",
257
+ "text": "Carbon offset",
258
+ "transform": "capitalize"
259
+ }
260
+ },
261
+ "termsAndConditions": {
262
+ "enabled": true
263
+ },
264
+ "travel": {
265
+ "enabled": false,
266
+ "features": {
267
+ "cars": {
268
+ "title": {
269
+ "text": "Travel",
270
+ "color": "#FFFFFF",
271
+ "transform": "none"
272
+ },
273
+ "enabled": false,
274
+ "listingImageUrl": "https://some-random-url.com/assets/banner.jpeg"
275
+ },
276
+ "experiences": {
277
+ "title": {
278
+ "text": "Travel",
279
+ "color": "#FFFFFF",
280
+ "transform": "none"
281
+ },
282
+ "enabled": false,
283
+ "listingImageUrl": "https://some-random-url.com/assets/banner.jpeg"
284
+ },
285
+ "hotels": {
286
+ "title": {
287
+ "text": "Travel",
288
+ "color": "#FFFFFF",
289
+ "transform": "none"
290
+ },
291
+ "enabled": false,
292
+ "listingImageUrl": "https://some-random-url.com/assets/banner.jpeg"
293
+ },
294
+ "flights": {
295
+ "title": {
296
+ "text": "Travel",
297
+ "color": "#FFFFFF",
298
+ "transform": "none"
299
+ },
300
+ "enabled": false,
301
+ "listingImageUrl": "https://some-random-url.com/assets/banner.jpeg"
302
+ }
303
+ },
304
+ "description": {
305
+ "color": "#FFFFFF",
306
+ "text": "Book with points and choose from 200 events & 900,000 streams globally",
307
+ "transform": "none"
308
+ }
309
+ },
310
+ "travelEarn": {
311
+ "enabled": false
312
+ },
313
+ "pointsEarn": {
314
+ "enabled": false
315
+ },
316
+ "helpCenter": {
317
+ "contactUs": {
318
+ "externalContactUsEnabled": false,
319
+ "imageUrl": "https://some-random-url.com/assets/help_center.jpg",
320
+ "title": {
321
+ "color": "#FFFFFF",
322
+ "text": "Contact Us",
323
+ "transform": "none"
324
+ }
325
+ },
326
+ "customerService": {
327
+ "imageUrl": "https://some-random-url.com/assets/customer_service.jpg"
328
+ },
329
+ "email": {
330
+ "emailAddress": "cs@example.com",
331
+ "enabled": true
332
+ },
333
+ "listing": {
334
+ "imageUrl": "https://some-random-url.com/assets/help_center.jpg",
335
+ "title": {
336
+ "color": "#FFFFFF",
337
+ "text": "Help Centre",
338
+ "transform": "none"
339
+ }
340
+ },
341
+ "phone": {
342
+ "contactNumber": "0000 999 9999",
343
+ "enabled": true,
344
+ "hours": "Mon - Fri (9am-6pm)"
345
+ },
346
+ "privacyPolicy": {
347
+ "imageUrl": "https://some-random-url.com/assets/privacy_policy.jpg"
348
+ },
349
+ "termsAndConditions": {
350
+ "imageUrl": "https://some-random-url.com/assets/terms_of_use.jpg"
351
+ }
352
+ },
353
+ "personalization": {
354
+ "similarItems": {
355
+ "giftCardDetails": {
356
+ "enabled": false
357
+ },
358
+ "giftCardCheckout": {
359
+ "enabled": false
360
+ },
361
+ "pointsTransferDetails": {
362
+ "enabled": false
363
+ },
364
+ "pointsTransferCheckout": {
365
+ "enabled": false
366
+ },
367
+ "cashbackDetails": {
368
+ "enabled": false
369
+ },
370
+ "cashbackCheckout": {
371
+ "enabled": false
372
+ },
373
+ "sustainabilityDetails": {
374
+ "enabled": false
375
+ },
376
+ "sustainabilityCheckout": {
377
+ "enabled": false
378
+ },
379
+ "cryptoDetails": {
380
+ "enabled": false
381
+ },
382
+ "cryptoCheckout": {
383
+ "enabled": false
384
+ },
385
+ "voucherDetails": {
386
+ "enabled": false
387
+ },
388
+ "voucherCheckout": {
389
+ "enabled": false
390
+ }
391
+ },
392
+ "giftCardListing": {
393
+ "enabled": false
394
+ },
395
+ "pointsTransferListing": {
396
+ "enabled": false
397
+ }
398
+ },
399
+ "appleMerchandise": {
400
+ "enabled": false
401
+ },
402
+ "freeformPointsInput": {
403
+ "travel": {
404
+ "enabled": false,
405
+ "defaultMaxPoints": false
406
+ }
407
+ }
408
+ },
409
+ "homepage": [
410
+ {
411
+ "data": [
412
+ {
413
+ "body": {
414
+ "content": "Earning loyalty points has never been more rewarding. Redeem them for exclusive events packages and stream the world in style. Start planning your dream cluster now.",
415
+ "textTransform": "none"
416
+ },
417
+ "image": {
418
+ "alt": "third carou image",
419
+ "url": "https://some-random-url.com/assets/hero_banner.png"
420
+ },
421
+ "title": {
422
+ "content": "A world of rewards awaits",
423
+ "textTransform": "none"
424
+ },
425
+ "config": {
426
+ "variant": "marketing-banner-1",
427
+ "textAlign": "text-left"
428
+ }
429
+ }
430
+ ],
431
+ "type": "marketing-banner"
432
+ },
433
+ {
434
+ "type": "redeem-again"
435
+ },
436
+ {
437
+ "type": "spend-x-points"
438
+ },
439
+ {
440
+ "type": "save-up-to-your-points"
441
+ },
442
+ {
443
+ "data": [
444
+ {
445
+ "body": {
446
+ "content": "Earning loyalty points has never been more rewarding. Redeem them for exclusive events packages and stream the world in style. Start streaming your dreams now.",
447
+ "textTransform": "none"
448
+ },
449
+ "image": {
450
+ "alt": "Earning loyalty points has never been more rewarding.",
451
+ "url": "https://some-random-url.com/assets/carousel.png"
452
+ },
453
+ "title": {
454
+ "content": "Escape to your next adventure with a click of a button.",
455
+ "textTransform": "none"
456
+ },
457
+ "variant": "carousel-1"
458
+ }
459
+ ],
460
+ "type": "carousel"
461
+ },
462
+ {
463
+ "fallbackData": [],
464
+ "config": {
465
+ "title": "Recommended for you"
466
+ },
467
+ "type": "personalization"
468
+ },
469
+ {
470
+ "config": {
471
+ "title": "You'll love these ways to earn points faster",
472
+ "backgroundColor": "#f6f6f6",
473
+ "tileBackgroundColor": "#FFFFFF"
474
+ },
475
+ "data": [
476
+ {
477
+ "icon": null,
478
+ "id": "pt_0",
479
+ "image": {
480
+ "url": "https://some-random-url.com/assets/frequent_traveller_programs_icon.jpg",
481
+ "alt": "Frequent Streamer Program icon"
482
+ },
483
+ "productType": "points-transfer",
484
+ "title": "Frequent Streamer Program",
485
+ "type": "listing"
486
+ },
487
+ {
488
+ "icon": null,
489
+ "id": "gc_0",
490
+ "image": {
491
+ "url": "https://some-random-url.com/assets/gift_card_icon.png",
492
+ "alt": "Gift Card Icon"
493
+ },
494
+ "productType": "gift-card",
495
+ "title": "Gift Card",
496
+ "type": "listing"
497
+ },
498
+ {
499
+ "icon": null,
500
+ "id": "crypto_0",
501
+ "image": {
502
+ "url": "https://some-random-url.com/assets/crypto_icon.jpg",
503
+ "alt": "Crypto Icon"
504
+ },
505
+ "productType": "crypto",
506
+ "title": "Crypto",
507
+ "type": "listing"
508
+ },
509
+ {
510
+ "icon": null,
511
+ "id": "substain_0",
512
+ "image": {
513
+ "url": "https://some-random-url.com/assets/sustainability_icon.jpg",
514
+ "alt": "Sustainability Icon"
515
+ },
516
+ "productType": "carbon",
517
+ "title": "Sustainability",
518
+ "type": "listing"
519
+ },
520
+ {
521
+ "icon": null,
522
+ "id": "cashback_0",
523
+ "image": {
524
+ "url": "https://some-random-url.com/assets/cashback_icon.png",
525
+ "alt": "Cashback icon"
526
+ },
527
+ "productType": "cashback",
528
+ "title": "Cashback",
529
+ "type": "listing"
530
+ }
531
+ ],
532
+ "type": "quick-links"
533
+ },
534
+ {
535
+ "config": {
536
+ "title": "Campaigns for you"
537
+ },
538
+ "type": "campaign-banner"
539
+ }
540
+ ],
541
+ "theme": {
542
+ "bodyFont": "Poppins",
543
+ "brandLogo": "https://some-random-url.com/assets/alternative_logo.png",
544
+ "colors": {
545
+ "accent": "#05A0D1",
546
+ "primary": "#22285A",
547
+ "secondary": "#05A0D1"
548
+ },
549
+ "favicon": "https://some-random-url.com/assets/favicon.png",
550
+ "headingFont": "Poppins",
551
+ "iconStyle": "solid",
552
+ "invertedLogo": "https://some-random-url.com/assets/alternative_logo.png",
553
+ "overlayStyle": "#22285A"
554
+ },
555
+ "tenantLocales": [
556
+ {
557
+ "locale": "en-US",
558
+ "enabled": true,
559
+ "defaultForTenant": true
560
+ }
561
+ ]
562
+ },
563
+ "platform": {
564
+ "auth": {
565
+ "appId": "bf9f91ab-ccbd-4a45-a7c8-63893298b71e",
566
+ "connection": "magic_link",
567
+ "idleCheckConfig": {
568
+ "promptTimeout": 120,
569
+ "timeout": 36000
570
+ },
571
+ "scope": "openid,address,email,phone,profile,custom",
572
+ "sessionCheckPollInterval": 60
573
+ }
574
+ }
575
+ },
576
+ "is_corporate": false,
577
+ "configuration_change_id": "0727c699-212a-4c1f-b0d4-e975d44aecab"
578
+ }
579
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "metadata": {
3
+ "request_id": "0bb22210-4a7b-4df3-a0a2-4fed464f4296",
4
+ "tenant_id": "tenant_2",
5
+ "event": "service_2.file_ingested",
6
+ "raw_tenant_file_id": "64eef122-39a4-4ba4-a0eb-2115bb3be545",
7
+ "row_number": 4,
8
+ "batch_item_run_id": "61eb1d69-88ad-421a-a57d-543b1d674a86"
9
+ },
10
+ "data": {
11
+ "user": {
12
+ "partner_user_id": "111111111166666666_555555522222222222",
13
+ "email": "email@example.com",
14
+ "status": "active",
15
+ "first_name": "first name",
16
+ "last_name": "last name",
17
+ "birthdate": "1999-09-22",
18
+ "country_code": "US"
19
+ },
20
+ "product": {
21
+ "custom_fields": {
22
+ "membership_id": "tttttttttt"
23
+ },
24
+ "reference_id": "yyyyyyyyyyy",
25
+ "code": "404",
26
+ "start_time": "2024-05-12 0:00:00",
27
+ "partner_status": "active"
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "event_type": "points_transaction",
3
+ "source": "service_4",
4
+ "data": {
5
+ "points_transaction_id": "6d853550-86c0-4878-a234-32ad3b80e7d7",
6
+ "user_id": "435092f6-a1e3-4c3b-8f22-bc809d04d9f5",
7
+ "tenant_id": "tenant_1",
8
+ "category": "redemption",
9
+ "product_type": "shopping_cart",
10
+ "product_sub_type": "cashback",
11
+ "points": 1000,
12
+ "transaction_time": "2025-05-05T13:13:57Z",
13
+ "product_name": "Tenant 1 Cashback",
14
+ "order_item_type": "CashRedemptionOrderItem",
15
+ "reward_amount": 10.0
16
+ }
17
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "data": {
3
+ "user_id": "686eeceb-c763-46fc-b946-17663bb827b4",
4
+ "tenant_id": "tenant_1",
5
+ "points_account_id": "95fa8ca3-f89e-4d9b-8aa7-a9ba3b460b49"
6
+ },
7
+ "metadata": {
8
+ "event": "service_1.user_activated",
9
+ "request_id": "ee3b35f4-68c0-42ab-aa8c-6ca146d3ca89"
10
+ }
11
+ }
data/karafka.gemspec CHANGED
@@ -22,18 +22,13 @@ Gem::Specification.new do |spec|
22
22
  DESC
23
23
 
24
24
  spec.add_dependency 'base64', '~> 0.2'
25
- spec.add_dependency 'karafka-core', '>= 2.4.4', '< 2.5.0'
26
- spec.add_dependency 'karafka-rdkafka', '>= 0.17.2'
27
- spec.add_dependency 'waterdrop', '>= 2.7.3', '< 3.0.0'
25
+ spec.add_dependency 'karafka-core', '>= 2.5.0', '< 2.6.0'
26
+ spec.add_dependency 'karafka-rdkafka', '>= 0.19.2'
27
+ spec.add_dependency 'waterdrop', '>= 2.8.3', '< 3.0.0'
28
28
  spec.add_dependency 'zeitwerk', '~> 2.3'
29
29
 
30
30
  spec.required_ruby_version = '>= 3.0.0'
31
31
 
32
- if $PROGRAM_NAME.end_with?('gem')
33
- spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
34
- end
35
-
36
- spec.cert_chain = %w[certs/cert.pem]
37
32
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
38
33
  spec.executables = %w[karafka]
39
34
  spec.require_paths = %w[lib]
@@ -29,7 +29,7 @@ module Karafka
29
29
  # Prevent registering same klass multiple times
30
30
  next if Dispatcher._cattr_klasses.value?(stringified_klass)
31
31
 
32
- key = "cattr_#{Dispatcher._cattr_klasses.count}"
32
+ key = "cattr_#{Dispatcher._cattr_klasses.size}"
33
33
 
34
34
  Dispatcher._cattr_klasses[key] = stringified_klass
35
35
  Consumer._cattr_klasses[key] = stringified_klass