pi-kiosk-shared 2.2.1 → 2.2.3

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 (50) hide show
  1. package/dist/analytics/metadataBuilders.d.ts +20 -0
  2. package/dist/analytics/metadataBuilders.d.ts.map +1 -0
  3. package/dist/analytics/metadataBuilders.js +31 -0
  4. package/dist/analytics/metadataBuilders.js.map +1 -0
  5. package/dist/analyticsConsentAllowlist.d.ts +3 -5
  6. package/dist/analyticsConsentAllowlist.d.ts.map +1 -1
  7. package/dist/analyticsConsentAllowlist.js +3 -43
  8. package/dist/analyticsConsentAllowlist.js.map +1 -1
  9. package/dist/analyticsConsentTier2.d.ts +6 -0
  10. package/dist/analyticsConsentTier2.d.ts.map +1 -0
  11. package/dist/analyticsConsentTier2.js +47 -0
  12. package/dist/analyticsConsentTier2.js.map +1 -0
  13. package/dist/analyticsEmitterManifest.d.ts +9 -2
  14. package/dist/analyticsEmitterManifest.d.ts.map +1 -1
  15. package/dist/analyticsEmitterManifest.js +820 -24
  16. package/dist/analyticsEmitterManifest.js.map +1 -1
  17. package/dist/analyticsEventDescriptions.d.ts.map +1 -1
  18. package/dist/analyticsEventDescriptions.js +78 -95
  19. package/dist/analyticsEventDescriptions.js.map +1 -1
  20. package/dist/analyticsEventLabels.d.ts.map +1 -1
  21. package/dist/analyticsEventLabels.js +19 -3
  22. package/dist/analyticsEventLabels.js.map +1 -1
  23. package/dist/analyticsEvents.d.ts +34 -10
  24. package/dist/analyticsEvents.d.ts.map +1 -1
  25. package/dist/analyticsEvents.js +28 -5
  26. package/dist/analyticsEvents.js.map +1 -1
  27. package/dist/analyticsPiiTags.d.ts +3 -4
  28. package/dist/analyticsPiiTags.d.ts.map +1 -1
  29. package/dist/analyticsPiiTags.js +53 -51
  30. package/dist/analyticsPiiTags.js.map +1 -1
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.d.ts.map +1 -1
  36. package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.js +4 -0
  37. package/dist/tenant-entitlements/applyTenantScopeToSimpleStates.js.map +1 -1
  38. package/package.json +10 -5
  39. package/dist/analytics/retailCommerceEvents.d.ts +0 -28
  40. package/dist/analytics/retailCommerceEvents.d.ts.map +0 -1
  41. package/dist/analytics/retailCommerceEvents.js +0 -27
  42. package/dist/analytics/retailCommerceEvents.js.map +0 -1
  43. package/dist/analyticsCatalogV2.d.ts +0 -23
  44. package/dist/analyticsCatalogV2.d.ts.map +0 -1
  45. package/dist/analyticsCatalogV2.js +0 -25
  46. package/dist/analyticsCatalogV2.js.map +0 -1
  47. package/dist/analyticsCatalogVersion.d.ts +0 -29
  48. package/dist/analyticsCatalogVersion.d.ts.map +0 -1
  49. package/dist/analyticsCatalogVersion.js +0 -49
  50. package/dist/analyticsCatalogVersion.js.map +0 -1
@@ -3,15 +3,20 @@
3
3
  * CI drift tests ensure every `eventName` is in the v1 catalog and that
4
4
  * required FE cells map to known orchestration surfaces.
5
5
  */
6
- import { ANALYTICS_V2_EXTENSION_EVENTS } from './analyticsCatalogV2.js';
7
- import { ANALYTICS_V2_EXTENSION_EVENT_NAMES } from './analyticsCatalogV2.js';
8
- import { ANALYTICS_EVENT_NAMES } from './analyticsEvents.js';
6
+ import { ANALYTICS_ACCOUNT_EVENTS, ANALYTICS_EVENT_NAMES, ANALYTICS_FUNNEL_EVENTS, ANALYTICS_IDENTITY_EVENTS, ANALYTICS_RETAIL_EVENTS, ANALYTICS_UNIVERSAL_EVENTS, } from './analyticsEvents.js';
9
7
  /** Shipped journeys only — kiosk retail/donation, customer shop/checkout, server payment/session. */
10
8
  export const ANALYTICS_EMITTER_MANIFEST = [
11
9
  { eventName: 'session_started', surface: 'server', layer: 'BE', required: true, reference: 'StartAnalyticsSessionUseCase' },
12
10
  { eventName: 'session_completed', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskNavigationHandlers' },
13
11
  { eventName: 'session_completed', surface: 'customer', layer: 'FE', required: true, reference: 'QrPaymentView' },
14
12
  { eventName: 'session_abandoned', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskPaymentFlowHandlers' },
13
+ {
14
+ eventName: 'session_abandoned',
15
+ surface: 'customer',
16
+ layer: 'FE',
17
+ required: true,
18
+ reference: 'QrPaymentView',
19
+ },
15
20
  { eventName: 'screen_viewed', surface: 'customer', layer: 'FE', required: true, reference: 'shopAnalyticsMetadata' },
16
21
  {
17
22
  eventName: 'screen_viewed',
@@ -20,20 +25,181 @@ export const ANALYTICS_EMITTER_MANIFEST = [
20
25
  required: true,
21
26
  reference: 'useKioskOrchestrationAnalyticsEffects',
22
27
  },
23
- { eventName: 'catalog_interaction', surface: 'customer', layer: 'FE', required: true, reference: 'useShopScreenEffects' },
24
- { eventName: 'catalog_interaction', surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationRetail' },
25
28
  { eventName: 'catalog_image_load_failed', surface: 'customer', layer: 'FE', required: true, reference: 'ProductCard' },
26
29
  { eventName: 'catalog_image_load_failed', surface: 'kiosk', layer: 'FE', required: true, reference: 'ProductGrid' },
27
30
  { eventName: 'product_added', surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
28
31
  { eventName: 'product_added', surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationRetail' },
32
+ { eventName: 'cta_clicked', surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
33
+ { eventName: 'cta_clicked', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskNavigationHandlers' },
34
+ { eventName: 'back_clicked', surface: 'customer', layer: 'FE', required: true, reference: 'QrPaymentView' },
35
+ { eventName: 'back_clicked', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskPaymentFlowHandlers' },
36
+ { eventName: 'error_shown', surface: 'customer', layer: 'FE', required: true, reference: 'customerErrorAnalytics' },
37
+ { eventName: 'error_shown', surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationAnalyticsEffects' },
38
+ { eventName: 'product_removed', surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
39
+ {
40
+ eventName: 'product_removed',
41
+ surface: 'kiosk',
42
+ layer: 'FE',
43
+ required: true,
44
+ reference: 'useKioskOrchestrationRetail',
45
+ },
29
46
  { eventName: 'cart_viewed', surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
47
+ { eventName: 'cart_viewed', surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationAnalyticsEffects' },
30
48
  { eventName: 'checkout_started', surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
31
49
  { eventName: 'checkout_started', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskNavigationHandlers' },
50
+ {
51
+ eventName: 'checkout_mode_selected',
52
+ surface: 'customer',
53
+ layer: 'FE',
54
+ required: true,
55
+ reference: 'shopScreenHandlers',
56
+ },
57
+ {
58
+ eventName: 'checkout_mode_selected',
59
+ surface: 'kiosk',
60
+ layer: 'FE',
61
+ required: true,
62
+ reference: 'useKioskOrchestrationAnalyticsEffects',
63
+ },
32
64
  { eventName: 'payment_started', surface: 'kiosk', layer: 'FE', required: true, reference: 'kioskPaymentFlowHandlers' },
33
65
  { eventName: 'payment_started', surface: 'customer', layer: 'FE', required: true, reference: 'PhoneFirstProductJourney' },
66
+ { eventName: 'payment_method_viewed', surface: 'customer', layer: 'FE', required: true, reference: 'PhoneFirstProductJourney' },
67
+ {
68
+ eventName: 'payment_failed',
69
+ surface: 'server',
70
+ layer: 'BE',
71
+ required: true,
72
+ reference: 'CancelIntentUseCase',
73
+ },
34
74
  { eventName: 'payment_qr_generated', surface: 'server', layer: 'BE', required: true, reference: 'CreateQRPaymentUseCase' },
35
75
  { eventName: 'payment_confirmed', surface: 'server', layer: 'BE', required: true, reference: 'CompletePaymentTransactionUseCase' },
76
+ {
77
+ eventName: 'retail_order_paid',
78
+ surface: 'server',
79
+ layer: 'BE',
80
+ required: true,
81
+ reference: 'CompletePaymentTransactionUseCase',
82
+ },
83
+ {
84
+ eventName: 'checkout_handoff_completed',
85
+ surface: 'server',
86
+ layer: 'BE',
87
+ required: true,
88
+ reference: 'CompletePaymentTransactionUseCase',
89
+ },
90
+ {
91
+ eventName: 'checkout_handoff_expired',
92
+ surface: 'server',
93
+ layer: 'BE',
94
+ required: true,
95
+ reference: 'ExpireCheckoutPaymentHandoffWorker',
96
+ },
97
+ {
98
+ eventName: 'retail_order_prepared',
99
+ surface: 'server',
100
+ layer: 'BE',
101
+ required: true,
102
+ reference: 'AdminUpdateFulfillmentStatusUseCase',
103
+ },
104
+ {
105
+ eventName: 'retail_order_ready',
106
+ surface: 'server',
107
+ layer: 'BE',
108
+ required: true,
109
+ reference: 'AdminUpdateFulfillmentStatusUseCase',
110
+ },
111
+ {
112
+ eventName: 'retail_order_collected',
113
+ surface: 'server',
114
+ layer: 'BE',
115
+ required: true,
116
+ reference: 'PickupConfirmFulfillmentUseCase',
117
+ },
118
+ {
119
+ eventName: 'retail_pickup_scheduled',
120
+ surface: 'server',
121
+ layer: 'BE',
122
+ required: true,
123
+ reference: 'CreateOrderFulfillmentUseCase',
124
+ },
125
+ {
126
+ eventName: 'pickup_qr_issued',
127
+ surface: 'server',
128
+ layer: 'BE',
129
+ required: true,
130
+ reference: 'IssuePickupCredentialsUseCase',
131
+ },
132
+ {
133
+ eventName: 'pickup_qr_scanned',
134
+ surface: 'server',
135
+ layer: 'BE',
136
+ required: true,
137
+ reference: 'ResolvePickupQrTokenUseCase',
138
+ },
139
+ {
140
+ eventName: 'pickup_qr_scanned',
141
+ surface: 'server',
142
+ layer: 'BE',
143
+ required: true,
144
+ reference: 'ResolvePickupByCodeUseCase',
145
+ },
36
146
  { eventName: 'donation_started', surface: 'customer', layer: 'FE', required: true, reference: 'PhoneFirstDonationJourney' },
147
+ {
148
+ eventName: 'donation_started',
149
+ surface: 'kiosk',
150
+ layer: 'FE',
151
+ required: true,
152
+ reference: 'kioskDonationHandlers',
153
+ },
154
+ {
155
+ eventName: 'donation_amount_selected',
156
+ surface: 'customer',
157
+ layer: 'FE',
158
+ required: true,
159
+ reference: 'donationAnalyticsMetadata',
160
+ },
161
+ {
162
+ eventName: 'donation_amount_selected',
163
+ surface: 'kiosk',
164
+ layer: 'FE',
165
+ required: true,
166
+ reference: 'kioskDonationHandlers',
167
+ },
168
+ {
169
+ eventName: 'donation_custom_amount_entered',
170
+ surface: 'customer',
171
+ layer: 'FE',
172
+ required: true,
173
+ reference: 'donationAnalyticsMetadata',
174
+ },
175
+ {
176
+ eventName: 'donation_custom_amount_entered',
177
+ surface: 'kiosk',
178
+ layer: 'FE',
179
+ required: true,
180
+ reference: 'kioskDonationHandlers',
181
+ },
182
+ {
183
+ eventName: 'donation_project_selected',
184
+ surface: 'customer',
185
+ layer: 'FE',
186
+ required: true,
187
+ reference: 'donationAnalyticsMetadata',
188
+ },
189
+ {
190
+ eventName: 'donation_project_selected',
191
+ surface: 'kiosk',
192
+ layer: 'FE',
193
+ required: true,
194
+ reference: 'kioskDonationHandlers',
195
+ },
196
+ {
197
+ eventName: 'donation_completed',
198
+ surface: 'server',
199
+ layer: 'BE',
200
+ required: true,
201
+ reference: 'CompletePaymentTransactionUseCase',
202
+ },
37
203
  {
38
204
  eventName: 'kiosk_wakeup',
39
205
  surface: 'kiosk',
@@ -55,37 +221,584 @@ export const ANALYTICS_EMITTER_MANIFEST = [
55
221
  required: true,
56
222
  reference: 'AdvanceRecurringDonationScheduleOnInboundMatch',
57
223
  },
58
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.MENU_OPENED, surface: 'customer', layer: 'FE', required: true, reference: 'useShopScreenEffects' },
224
+ { eventName: ANALYTICS_FUNNEL_EVENTS.MENU_OPENED, surface: 'customer', layer: 'FE', required: true, reference: 'useShopScreenEffects' },
59
225
  {
60
- eventName: ANALYTICS_V2_EXTENSION_EVENTS.MENU_OPENED,
226
+ eventName: ANALYTICS_FUNNEL_EVENTS.MENU_OPENED,
61
227
  surface: 'kiosk',
62
228
  layer: 'FE',
63
229
  required: true,
64
230
  reference: 'useKioskOrchestrationAnalyticsEffects',
65
231
  },
66
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.PRODUCT_SELECTED, surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
67
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.PRODUCT_SELECTED, surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationRetail' },
68
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.QR_DISPLAYED, surface: 'customer', layer: 'FE', required: true, reference: 'QrPaymentView' },
232
+ { eventName: ANALYTICS_FUNNEL_EVENTS.PRODUCT_SELECTED, surface: 'customer', layer: 'FE', required: true, reference: 'shopScreenHandlers' },
233
+ { eventName: ANALYTICS_FUNNEL_EVENTS.PRODUCT_SELECTED, surface: 'kiosk', layer: 'FE', required: true, reference: 'useKioskOrchestrationRetail' },
234
+ { eventName: ANALYTICS_FUNNEL_EVENTS.QR_DISPLAYED, surface: 'customer', layer: 'FE', required: true, reference: 'QrPaymentView' },
69
235
  {
70
- eventName: ANALYTICS_V2_EXTENSION_EVENTS.QR_DISPLAYED,
236
+ eventName: ANALYTICS_FUNNEL_EVENTS.QR_DISPLAYED,
71
237
  surface: 'kiosk',
72
238
  layer: 'FE',
73
239
  required: true,
74
240
  reference: 'useKioskOrchestrationAnalyticsEffects',
75
241
  },
76
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.RECEIPT_DOWNLOADED, surface: 'customer', layer: 'FE', required: true, reference: 'AccountReceiptDownloadButton' },
242
+ {
243
+ eventName: ANALYTICS_UNIVERSAL_EVENTS.QR_REGENERATED,
244
+ surface: 'kiosk',
245
+ layer: 'FE',
246
+ required: true,
247
+ reference: 'useKioskOrchestrationRealtime',
248
+ },
249
+ { eventName: ANALYTICS_ACCOUNT_EVENTS.RECEIPT_DOWNLOADED, surface: 'customer', layer: 'FE', required: true, reference: 'AccountReceiptDownloadButton' },
77
250
  { eventName: 'auth_flow_started', surface: 'customer', layer: 'FE', required: true, reference: 'useSignInScreen' },
78
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.IDENTITY_RECOGNIZED, surface: 'customer', layer: 'FE', required: true, reference: 'CustomerAnalyticsProvider' },
251
+ {
252
+ eventName: ANALYTICS_UNIVERSAL_EVENTS.IDENTITY_CREATED,
253
+ surface: 'customer',
254
+ layer: 'FE',
255
+ required: true,
256
+ reference: 'OnboardingSetCredentialsScreen',
257
+ },
258
+ {
259
+ eventName: ANALYTICS_UNIVERSAL_EVENTS.SESSION_RECOVERED,
260
+ surface: 'customer',
261
+ layer: 'FE',
262
+ required: true,
263
+ reference: 'useCustomerAnalyticsManager',
264
+ },
265
+ {
266
+ eventName: ANALYTICS_UNIVERSAL_EVENTS.CONSENT_BANNER_DISMISSED,
267
+ surface: 'customer',
268
+ layer: 'FE',
269
+ required: true,
270
+ reference: 'MarketingAnalyticsConsentModal',
271
+ },
272
+ { eventName: 'slug_legacy_redirect', surface: 'customer', layer: 'FE', required: true, reference: 'useShopScreenEffects' },
273
+ { eventName: 'slug_legacy_redirect', surface: 'server', layer: 'BE', required: true, reference: 'emitRetailV7Analytics' },
274
+ { eventName: ANALYTICS_IDENTITY_EVENTS.IDENTITY_RECOGNIZED, surface: 'customer', layer: 'FE', required: true, reference: 'CustomerAnalyticsProvider' },
79
275
  { eventName: 'receipt_opened', surface: 'customer', layer: 'FE', required: true, reference: 'AccountPaymentsPage' },
80
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.ACCOUNT_LOGGED_OUT, surface: 'customer', layer: 'FE', required: true, reference: 'AccountShell' },
81
- { eventName: 'login_success', surface: 'server', layer: 'BE', required: true, reference: 'LoginWithPasswordUseCase' },
276
+ { eventName: ANALYTICS_ACCOUNT_EVENTS.ACCOUNT_LOGGED_OUT, surface: 'customer', layer: 'FE', required: true, reference: 'AccountShell' },
277
+ { eventName: 'account_logged_in', surface: 'server', layer: 'BE', required: true, reference: 'LoginWithPasswordUseCase' },
278
+ { eventName: 'account_logged_in', surface: 'server', layer: 'BE', required: true, reference: 'VerifyOtpUseCase' },
279
+ {
280
+ eventName: 'checkout_handoff_created',
281
+ surface: 'server',
282
+ layer: 'BE',
283
+ required: true,
284
+ reference: 'CreateCheckoutPaymentHandoffUseCase',
285
+ },
82
286
  { eventName: 'account_created', surface: 'server', layer: 'BE', required: true, reference: 'RegisterCustomerUseCase' },
83
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.ACCOUNT_LOGGED_OUT, surface: 'server', layer: 'BE', required: true, reference: 'LogoutCustomerSessionUseCase' },
84
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.PROFILE_UPDATED, surface: 'server', layer: 'BE', required: true, reference: 'PutReceiptLocalePreferenceUseCase' },
85
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.IDENTITY_LINKED, surface: 'server', layer: 'BE', required: true, reference: 'LinkAccountToTransactionUseCase' },
86
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.IDENTITY_DELETED, surface: 'server', layer: 'BE', required: true, reference: 'CustomerErasureSideEffectsService' },
87
- { eventName: ANALYTICS_V2_EXTENSION_EVENTS.CUSTOMER_DELETED, surface: 'server', layer: 'BE', required: true, reference: 'CustomerErasureSideEffectsService' },
287
+ { eventName: 'tenant_switched', surface: 'server', layer: 'BE', required: true, reference: 'SwitchCustomerTenantUseCase' },
288
+ { eventName: 'retail_pickup_slot_missed', surface: 'server', layer: 'BE', required: true, reference: 'CancelOrderFulfillmentOnPaymentTerminalUseCase' },
289
+ { eventName: ANALYTICS_ACCOUNT_EVENTS.ACCOUNT_LOGGED_OUT, surface: 'server', layer: 'BE', required: true, reference: 'LogoutCustomerSessionUseCase' },
290
+ { eventName: ANALYTICS_ACCOUNT_EVENTS.PROFILE_UPDATED, surface: 'server', layer: 'BE', required: true, reference: 'PutReceiptLocalePreferenceUseCase' },
291
+ { eventName: ANALYTICS_IDENTITY_EVENTS.IDENTITY_LINKED, surface: 'server', layer: 'BE', required: true, reference: 'LinkAccountToTransactionUseCase' },
292
+ { eventName: ANALYTICS_IDENTITY_EVENTS.IDENTITY_DELETED, surface: 'server', layer: 'BE', required: true, reference: 'CustomerErasureSideEffectsService' },
293
+ { eventName: ANALYTICS_IDENTITY_EVENTS.CUSTOMER_DELETED, surface: 'server', layer: 'BE', required: true, reference: 'CustomerErasureSideEffectsService' },
294
+ {
295
+ eventName: 'product_barcode_lookup_hit',
296
+ surface: 'server',
297
+ layer: 'BE',
298
+ required: true,
299
+ reference: 'LookupProductByBarcodeUseCase',
300
+ },
301
+ {
302
+ eventName: 'product_barcode_lookup_miss',
303
+ surface: 'server',
304
+ layer: 'BE',
305
+ required: true,
306
+ reference: 'LookupProductByBarcodeUseCase',
307
+ },
308
+ {
309
+ eventName: 'product_barcode_assigned',
310
+ surface: 'server',
311
+ layer: 'BE',
312
+ required: true,
313
+ reference: 'ManageProductBarcodeUseCase',
314
+ },
315
+ {
316
+ eventName: 'product_barcode_cleared',
317
+ surface: 'server',
318
+ layer: 'BE',
319
+ required: true,
320
+ reference: 'ManageProductBarcodeUseCase',
321
+ },
322
+ {
323
+ eventName: 'product_barcode_alt_added',
324
+ surface: 'server',
325
+ layer: 'BE',
326
+ required: true,
327
+ reference: 'ManageProductBarcodeUseCase',
328
+ },
329
+ {
330
+ eventName: 'product_barcode_alt_removed',
331
+ surface: 'server',
332
+ layer: 'BE',
333
+ required: true,
334
+ reference: 'ManageProductBarcodeUseCase',
335
+ },
336
+ {
337
+ eventName: 'product_barcode_alt_promoted',
338
+ surface: 'server',
339
+ layer: 'BE',
340
+ required: true,
341
+ reference: 'ManageProductBarcodeUseCase',
342
+ },
343
+ {
344
+ eventName: 'product_barcode_assign_conflict',
345
+ surface: 'server',
346
+ layer: 'BE',
347
+ required: true,
348
+ reference: 'ManageProductBarcodeUseCase',
349
+ },
350
+ // Phase 4 P2 — retail fulfillment / commerce server ops (grep-verified UCs)
351
+ {
352
+ eventName: 'retail_ticket_created',
353
+ surface: 'server',
354
+ layer: 'BE',
355
+ required: true,
356
+ reference: 'emitRetailFulfillmentAnalytics',
357
+ },
358
+ {
359
+ eventName: 'pickup_staff_mark_paid',
360
+ surface: 'server',
361
+ layer: 'BE',
362
+ required: true,
363
+ reference: 'emitRetailV7Analytics',
364
+ },
365
+ {
366
+ eventName: 'buy_again_started',
367
+ surface: 'server',
368
+ layer: 'BE',
369
+ required: true,
370
+ reference: 'StartBuyAgainCheckoutUseCase',
371
+ },
372
+ {
373
+ eventName: 'buy_again_trimmed',
374
+ surface: 'server',
375
+ layer: 'BE',
376
+ required: true,
377
+ reference: 'StartBuyAgainCheckoutUseCase',
378
+ },
379
+ {
380
+ eventName: 'buy_again_failed_stock',
381
+ surface: 'server',
382
+ layer: 'BE',
383
+ required: true,
384
+ reference: 'ValidateBuyAgainAvailabilityUseCase',
385
+ },
386
+ {
387
+ eventName: 'pickup_partial_confirm',
388
+ surface: 'server',
389
+ layer: 'BE',
390
+ required: true,
391
+ reference: 'PartialPickupConfirmUseCase',
392
+ },
393
+ {
394
+ eventName: 'pickup_fulfillment_refused',
395
+ surface: 'server',
396
+ layer: 'BE',
397
+ required: true,
398
+ reference: 'RefuseFulfillmentLinesUseCase',
399
+ },
400
+ {
401
+ eventName: 'pickup_fulfillment_held',
402
+ surface: 'server',
403
+ layer: 'BE',
404
+ required: true,
405
+ reference: 'HoldFulfillmentUseCase',
406
+ },
407
+ {
408
+ eventName: 'pickup_fulfillment_hold_released',
409
+ surface: 'server',
410
+ layer: 'BE',
411
+ required: true,
412
+ reference: 'ReleaseFulfillmentHoldUseCase',
413
+ },
414
+ {
415
+ eventName: 'kiosk_cash_complete',
416
+ surface: 'server',
417
+ layer: 'BE',
418
+ required: true,
419
+ reference: 'CompleteKioskCashCheckoutUseCase',
420
+ },
421
+ {
422
+ eventName: 'checkout_collect_configured',
423
+ surface: 'server',
424
+ layer: 'BE',
425
+ required: true,
426
+ reference: 'CreateCustomerCheckoutSessionUseCase',
427
+ },
428
+ {
429
+ eventName: 'checkout_collect_configured',
430
+ surface: 'server',
431
+ layer: 'BE',
432
+ required: true,
433
+ reference: 'UpdateCustomerCheckoutSessionCollectUseCase',
434
+ },
435
+ {
436
+ eventName: 'physical_card_issued',
437
+ surface: 'server',
438
+ layer: 'BE',
439
+ required: true,
440
+ reference: 'IssuePhysicalCardUseCase',
441
+ },
442
+ {
443
+ eventName: 'physical_card_revoked',
444
+ surface: 'server',
445
+ layer: 'BE',
446
+ required: true,
447
+ reference: 'RevokePhysicalCardUseCase',
448
+ },
449
+ {
450
+ eventName: 'session_completed',
451
+ surface: 'server',
452
+ layer: 'BE',
453
+ required: true,
454
+ reference: 'CloseAnalyticsSessionUseCase',
455
+ },
456
+ {
457
+ eventName: 'session_abandoned',
458
+ surface: 'server',
459
+ layer: 'BE',
460
+ required: true,
461
+ reference: 'CloseAnalyticsSessionUseCase',
462
+ },
463
+ {
464
+ eventName: ANALYTICS_IDENTITY_EVENTS.IDENTITY_LINKED,
465
+ surface: 'server',
466
+ layer: 'BE',
467
+ required: true,
468
+ reference: 'IngestAnalyticsEventUseCase',
469
+ },
470
+ {
471
+ eventName: 'payment_started',
472
+ surface: 'server',
473
+ layer: 'BE',
474
+ required: true,
475
+ reference: 'ServerAnalyticsEmitter',
476
+ },
477
+ {
478
+ eventName: 'payment_started',
479
+ surface: 'server',
480
+ layer: 'BE',
481
+ required: true,
482
+ reference: 'CreateQRPaymentUseCase',
483
+ },
484
+ // P2 — emit-helper anchors (sessionless commerce / fulfillment)
485
+ {
486
+ eventName: 'retail_order_prepared',
487
+ surface: 'server',
488
+ layer: 'BE',
489
+ required: true,
490
+ reference: 'emitRetailFulfillmentAnalytics',
491
+ },
492
+ {
493
+ eventName: 'retail_order_ready',
494
+ surface: 'server',
495
+ layer: 'BE',
496
+ required: true,
497
+ reference: 'emitRetailFulfillmentAnalytics',
498
+ },
499
+ {
500
+ eventName: 'retail_order_collected',
501
+ surface: 'server',
502
+ layer: 'BE',
503
+ required: true,
504
+ reference: 'emitRetailFulfillmentAnalytics',
505
+ },
506
+ {
507
+ eventName: 'retail_pickup_scheduled',
508
+ surface: 'server',
509
+ layer: 'BE',
510
+ required: true,
511
+ reference: 'emitRetailFulfillmentAnalytics',
512
+ },
513
+ {
514
+ eventName: 'retail_pickup_slot_missed',
515
+ surface: 'server',
516
+ layer: 'BE',
517
+ required: true,
518
+ reference: 'emitRetailFulfillmentAnalytics',
519
+ },
520
+ {
521
+ eventName: 'pickup_qr_issued',
522
+ surface: 'server',
523
+ layer: 'BE',
524
+ required: true,
525
+ reference: 'emitRetailV7Analytics',
526
+ },
527
+ {
528
+ eventName: 'pickup_qr_scanned',
529
+ surface: 'server',
530
+ layer: 'BE',
531
+ required: true,
532
+ reference: 'emitRetailV7Analytics',
533
+ },
534
+ {
535
+ eventName: 'tenant_switched',
536
+ surface: 'server',
537
+ layer: 'BE',
538
+ required: true,
539
+ reference: 'emitRetailV7Analytics',
540
+ },
541
+ {
542
+ eventName: 'buy_again_started',
543
+ surface: 'server',
544
+ layer: 'BE',
545
+ required: true,
546
+ reference: 'emitV814CommerceAnalytics',
547
+ },
548
+ {
549
+ eventName: 'buy_again_trimmed',
550
+ surface: 'server',
551
+ layer: 'BE',
552
+ required: true,
553
+ reference: 'emitV814CommerceAnalytics',
554
+ },
555
+ {
556
+ eventName: 'buy_again_failed_stock',
557
+ surface: 'server',
558
+ layer: 'BE',
559
+ required: true,
560
+ reference: 'emitV814CommerceAnalytics',
561
+ },
562
+ {
563
+ eventName: 'pickup_partial_confirm',
564
+ surface: 'server',
565
+ layer: 'BE',
566
+ required: true,
567
+ reference: 'emitV814CommerceAnalytics',
568
+ },
569
+ {
570
+ eventName: 'pickup_fulfillment_refused',
571
+ surface: 'server',
572
+ layer: 'BE',
573
+ required: true,
574
+ reference: 'emitV814CommerceAnalytics',
575
+ },
576
+ {
577
+ eventName: 'pickup_fulfillment_held',
578
+ surface: 'server',
579
+ layer: 'BE',
580
+ required: true,
581
+ reference: 'emitV814CommerceAnalytics',
582
+ },
583
+ {
584
+ eventName: 'pickup_fulfillment_hold_released',
585
+ surface: 'server',
586
+ layer: 'BE',
587
+ required: true,
588
+ reference: 'emitV814CommerceAnalytics',
589
+ },
590
+ {
591
+ eventName: 'kiosk_cash_complete',
592
+ surface: 'server',
593
+ layer: 'BE',
594
+ required: true,
595
+ reference: 'emitV814CommerceAnalytics',
596
+ },
597
+ {
598
+ eventName: 'checkout_collect_configured',
599
+ surface: 'server',
600
+ layer: 'BE',
601
+ required: true,
602
+ reference: 'emitV814CommerceAnalytics',
603
+ },
604
+ {
605
+ eventName: 'checkout_handoff_created',
606
+ surface: 'server',
607
+ layer: 'BE',
608
+ required: true,
609
+ reference: 'emitV814CommerceAnalytics',
610
+ },
611
+ {
612
+ eventName: 'checkout_handoff_completed',
613
+ surface: 'server',
614
+ layer: 'BE',
615
+ required: true,
616
+ reference: 'emitV814CommerceAnalytics',
617
+ },
618
+ // Phase 4 P3 — customer retail / donation FE paths
619
+ {
620
+ eventName: ANALYTICS_RETAIL_EVENTS.SELF_SERVICE_SLA_NOTICE_SHOWN,
621
+ surface: 'customer',
622
+ layer: 'FE',
623
+ required: true,
624
+ reference: 'shopScreenHandlers',
625
+ },
626
+ {
627
+ eventName: ANALYTICS_RETAIL_EVENTS.CUSTOMER_PICKUP_ACK_INFORMATIONAL,
628
+ surface: 'customer',
629
+ layer: 'FE',
630
+ required: true,
631
+ reference: 'InformationalPickupAckButton',
632
+ },
633
+ {
634
+ eventName: ANALYTICS_ACCOUNT_EVENTS.ACCOUNT_LOGGED_OUT,
635
+ surface: 'kiosk',
636
+ layer: 'FE',
637
+ required: true,
638
+ reference: 'useKioskOrchestrationRetail',
639
+ },
640
+ {
641
+ eventName: ANALYTICS_RETAIL_EVENTS.CATALOG_IMAGE_LOAD_FAILED,
642
+ surface: 'kiosk',
643
+ layer: 'FE',
644
+ required: true,
645
+ reference: 'DonationProjectCard',
646
+ },
647
+ {
648
+ eventName: ANALYTICS_RETAIL_EVENTS.CATALOG_IMAGE_LOAD_FAILED,
649
+ surface: 'customer',
650
+ layer: 'FE',
651
+ required: true,
652
+ reference: 'CustomerDonationProjectCard',
653
+ },
654
+ {
655
+ eventName: 'checkout_started',
656
+ surface: 'customer',
657
+ layer: 'FE',
658
+ required: true,
659
+ reference: 'PhoneFirstDonationJourney',
660
+ },
661
+ {
662
+ eventName: 'payment_started',
663
+ surface: 'customer',
664
+ layer: 'FE',
665
+ required: true,
666
+ reference: 'PhoneFirstDonationJourney',
667
+ },
668
+ {
669
+ eventName: 'screen_viewed',
670
+ surface: 'customer',
671
+ layer: 'FE',
672
+ required: true,
673
+ reference: 'PhoneFirstProductJourney',
674
+ },
675
+ {
676
+ eventName: 'screen_viewed',
677
+ surface: 'customer',
678
+ layer: 'FE',
679
+ required: true,
680
+ reference: 'PostKioskProductJourney',
681
+ },
682
+ {
683
+ eventName: 'screen_viewed',
684
+ surface: 'customer',
685
+ layer: 'FE',
686
+ required: true,
687
+ reference: 'PostKioskDonationJourney',
688
+ },
689
+ {
690
+ eventName: 'screen_viewed',
691
+ surface: 'customer',
692
+ layer: 'FE',
693
+ required: true,
694
+ reference: 'donationAnalyticsMetadata',
695
+ },
696
+ {
697
+ eventName: 'checkout_mode_selected',
698
+ surface: 'customer',
699
+ layer: 'FE',
700
+ required: true,
701
+ reference: 'useShopScreenEffects',
702
+ },
703
+ {
704
+ eventName: 'back_clicked',
705
+ surface: 'kiosk',
706
+ layer: 'FE',
707
+ required: true,
708
+ reference: 'kioskNavigationHandlers',
709
+ },
710
+ {
711
+ eventName: 'error_shown',
712
+ surface: 'kiosk',
713
+ layer: 'FE',
714
+ required: true,
715
+ reference: 'useKioskOrchestrationRealtime',
716
+ },
717
+ {
718
+ eventName: 'error_shown',
719
+ surface: 'kiosk',
720
+ layer: 'FE',
721
+ required: true,
722
+ reference: 'kioskPaymentFlowHandlers',
723
+ },
724
+ {
725
+ eventName: 'checkout_handoff_expired',
726
+ surface: 'server',
727
+ layer: 'BE',
728
+ required: true,
729
+ reference: 'emitV814CommerceAnalytics',
730
+ },
731
+ {
732
+ eventName: 'session_abandoned',
733
+ surface: 'customer',
734
+ layer: 'FE',
735
+ required: true,
736
+ reference: 'CustomerAnalyticsProvider',
737
+ },
738
+ {
739
+ eventName: 'session_abandoned',
740
+ surface: 'customer',
741
+ layer: 'FE',
742
+ required: true,
743
+ reference: 'useCustomerAnalyticsManager',
744
+ },
745
+ {
746
+ eventName: 'session_completed',
747
+ surface: 'customer',
748
+ layer: 'FE',
749
+ required: true,
750
+ reference: 'useCustomerAnalyticsManager',
751
+ },
752
+ {
753
+ eventName: 'session_completed',
754
+ surface: 'customer',
755
+ layer: 'FE',
756
+ required: true,
757
+ reference: 'CustomerAnalyticsProvider',
758
+ },
759
+ {
760
+ eventName: 'screen_viewed',
761
+ surface: 'customer',
762
+ layer: 'FE',
763
+ required: true,
764
+ reference: 'PhoneFirstDonationJourney',
765
+ },
766
+ {
767
+ eventName: 'donation_amount_selected',
768
+ surface: 'customer',
769
+ layer: 'FE',
770
+ required: true,
771
+ reference: 'PhoneFirstDonationJourney',
772
+ },
773
+ {
774
+ eventName: 'donation_custom_amount_entered',
775
+ surface: 'customer',
776
+ layer: 'FE',
777
+ required: true,
778
+ reference: 'PhoneFirstDonationJourney',
779
+ },
780
+ {
781
+ eventName: 'donation_project_selected',
782
+ surface: 'customer',
783
+ layer: 'FE',
784
+ required: true,
785
+ reference: 'PhoneFirstDonationJourney',
786
+ },
88
787
  ];
788
+ /**
789
+ * Phase 4 already-live slice (grep-verified emit paths; G-H-13).
790
+ * `retail_pickup_slot_missed` included only when
791
+ * `CancelOrderFulfillmentOnPaymentTerminalUseCase` emits on `SLOT_MISSED`.
792
+ */
793
+ export const ANALYTICS_ALREADY_LIVE_EVENT_NAMES = [
794
+ 'tenant_switched',
795
+ 'slug_legacy_redirect',
796
+ 'recurring_payment_missed',
797
+ 'retail_pickup_slot_missed',
798
+ ];
799
+ export function requiredManifestCellsForEvent(eventName) {
800
+ return ANALYTICS_EMITTER_MANIFEST.filter((cell) => cell.eventName === eventName && cell.required);
801
+ }
89
802
  const ALLOWED_FE_REFERENCES = new Set([
90
803
  'shopScreenHandlers',
91
804
  'useShopScreenEffects',
@@ -93,6 +806,7 @@ const ALLOWED_FE_REFERENCES = new Set([
93
806
  'useKioskOrchestration',
94
807
  'useKioskOrchestrationRetail',
95
808
  'useKioskOrchestrationAnalyticsEffects',
809
+ 'useKioskOrchestrationRealtime',
96
810
  'kioskNavigationHandlers',
97
811
  'kioskPaymentFlowHandlers',
98
812
  'QrPaymentView',
@@ -100,11 +814,22 @@ const ALLOWED_FE_REFERENCES = new Set([
100
814
  'PhoneFirstDonationJourney',
101
815
  'AccountReceiptDownloadButton',
102
816
  'useSignInScreen',
817
+ 'OnboardingSetCredentialsScreen',
818
+ 'useCustomerAnalyticsManager',
819
+ 'MarketingAnalyticsConsentModal',
103
820
  'CustomerAnalyticsProvider',
104
821
  'AccountPaymentsPage',
105
822
  'AccountShell',
106
823
  'ProductCard',
107
824
  'ProductGrid',
825
+ 'customerErrorAnalytics',
826
+ 'donationAnalyticsMetadata',
827
+ 'kioskDonationHandlers',
828
+ 'InformationalPickupAckButton',
829
+ 'DonationProjectCard',
830
+ 'CustomerDonationProjectCard',
831
+ 'PostKioskProductJourney',
832
+ 'PostKioskDonationJourney',
108
833
  ]);
109
834
  /** Repo-relative paths for CI grep wiring tests (G3). */
110
835
  export const ANALYTICS_EMITTER_FE_REFERENCE_PATHS = {
@@ -114,6 +839,7 @@ export const ANALYTICS_EMITTER_FE_REFERENCE_PATHS = {
114
839
  useKioskOrchestration: 'rpapp-kiosk/src/features/kiosk/hooks/useKioskOrchestration.ts',
115
840
  useKioskOrchestrationRetail: 'rpapp-kiosk/src/features/kiosk/hooks/useKioskOrchestrationRetail.ts',
116
841
  useKioskOrchestrationAnalyticsEffects: 'rpapp-kiosk/src/features/kiosk/hooks/useKioskOrchestrationAnalyticsEffects.ts',
842
+ useKioskOrchestrationRealtime: 'rpapp-kiosk/src/features/kiosk/hooks/useKioskOrchestrationRealtime.ts',
117
843
  kioskNavigationHandlers: 'rpapp-kiosk/src/features/kiosk/handlers/kioskNavigationHandlers.ts',
118
844
  kioskPaymentFlowHandlers: 'rpapp-kiosk/src/features/kiosk/handlers/kioskPaymentFlowHandlers.ts',
119
845
  QrPaymentView: 'rpapp-customer/src/features/checkout/QrPaymentView.tsx',
@@ -121,11 +847,22 @@ export const ANALYTICS_EMITTER_FE_REFERENCE_PATHS = {
121
847
  PhoneFirstDonationJourney: 'rpapp-customer/src/features/journeys/PhoneFirstDonationJourney.tsx',
122
848
  AccountReceiptDownloadButton: 'rpapp-customer/src/features/account/components/AccountReceiptDownloadButton.tsx',
123
849
  useSignInScreen: 'rpapp-customer/src/features/auth/hooks/useSignInScreen.ts',
850
+ OnboardingSetCredentialsScreen: 'rpapp-customer/src/features/auth/OnboardingSetCredentialsScreen.tsx',
851
+ useCustomerAnalyticsManager: 'rpapp-customer/src/shared/analytics/useCustomerAnalyticsManager.ts',
852
+ MarketingAnalyticsConsentModal: 'rpapp-customer/src/features/consent/MarketingAnalyticsConsentModal.tsx',
124
853
  CustomerAnalyticsProvider: 'rpapp-customer/src/shared/analytics/CustomerAnalyticsProvider.tsx',
125
854
  AccountPaymentsPage: 'rpapp-customer/src/features/account/AccountPaymentsPage.tsx',
126
855
  AccountShell: 'rpapp-customer/src/features/account/AccountShell.tsx',
127
856
  ProductCard: 'rpapp-customer/src/features/shop/components/ProductCard.tsx',
128
857
  ProductGrid: 'rpapp-kiosk/src/features/products/components/ProductGrid/ProductGrid.tsx',
858
+ customerErrorAnalytics: 'rpapp-customer/src/shared/analytics/customerErrorAnalytics.ts',
859
+ donationAnalyticsMetadata: 'rpapp-customer/src/features/donation/donationAnalyticsMetadata.ts',
860
+ kioskDonationHandlers: 'rpapp-kiosk/src/features/kiosk/handlers/kioskDonationHandlers.ts',
861
+ InformationalPickupAckButton: 'rpapp-customer/src/features/orders/components/InformationalPickupAckButton.tsx',
862
+ DonationProjectCard: 'rpapp-kiosk/src/features/donation/components/DonationProjectCard/DonationProjectCard.tsx',
863
+ CustomerDonationProjectCard: 'rpapp-customer/src/features/donation-projects/components/DonationProjectCard.tsx',
864
+ PostKioskProductJourney: 'rpapp-customer/src/features/journeys/PostKioskProductJourney.tsx',
865
+ PostKioskDonationJourney: 'rpapp-customer/src/features/journeys/PostKioskDonationJourney.tsx',
129
866
  };
130
867
  /** Repo-relative paths for server-layer CI grep wiring (G-P1-09 / AN-036). */
131
868
  export const ANALYTICS_EMITTER_BE_REFERENCE_PATHS = {
@@ -136,11 +873,42 @@ export const ANALYTICS_EMITTER_BE_REFERENCE_PATHS = {
136
873
  RecurringDonationMissedPeriodWorker: 'up-backend/src/infrastructure/workers/RecurringDonationMissedPeriodWorker.ts',
137
874
  AdvanceRecurringDonationScheduleOnInboundMatch: 'up-backend/src/application/use-cases/reconciliation/AdvanceRecurringDonationScheduleOnInboundMatch.ts',
138
875
  LoginWithPasswordUseCase: 'up-backend/src/application/use-cases/customer-auth/LoginWithPasswordUseCase.ts',
876
+ VerifyOtpUseCase: 'up-backend/src/application/use-cases/customer-auth/VerifyOtpUseCase.ts',
877
+ CreateCheckoutPaymentHandoffUseCase: 'up-backend/src/application/use-cases/checkout-handoff/CreateCheckoutPaymentHandoffUseCase.ts',
878
+ LookupProductByBarcodeUseCase: 'up-backend/src/application/use-cases/product/LookupProductByBarcodeUseCase.ts',
879
+ ManageProductBarcodeUseCase: 'up-backend/src/application/use-cases/product/barcode/ManageProductBarcodeUseCase.ts',
139
880
  RegisterCustomerUseCase: 'up-backend/src/application/use-cases/customer-auth/RegisterCustomerUseCase.ts',
881
+ SwitchCustomerTenantUseCase: 'up-backend/src/application/use-cases/customer-auth/SwitchCustomerTenantUseCase.ts',
882
+ CancelOrderFulfillmentOnPaymentTerminalUseCase: 'up-backend/src/application/use-cases/order/CancelOrderFulfillmentOnPaymentTerminalUseCase.ts',
883
+ CancelIntentUseCase: 'up-backend/src/application/use-cases/payment/shared/CancelIntentUseCase.ts',
140
884
  LogoutCustomerSessionUseCase: 'up-backend/src/application/use-cases/customer-auth/LogoutCustomerSessionUseCase.ts',
141
885
  PutReceiptLocalePreferenceUseCase: 'up-backend/src/application/use-cases/customer-account/CustomerReceiptLocalePreferenceUseCases.ts',
142
886
  LinkAccountToTransactionUseCase: 'up-backend/src/application/use-cases/customer-auth/LinkAccountToTransactionUseCase.ts',
143
887
  CustomerErasureSideEffectsService: 'up-backend/src/infrastructure/services/gdpr/CustomerErasureSideEffectsService.ts',
888
+ ExpireCheckoutPaymentHandoffWorker: 'up-backend/src/infrastructure/workers/ExpireCheckoutPaymentHandoffWorker.ts',
889
+ AdminUpdateFulfillmentStatusUseCase: 'up-backend/src/application/use-cases/order/AdminUpdateFulfillmentStatusUseCase.ts',
890
+ PickupConfirmFulfillmentUseCase: 'up-backend/src/application/use-cases/order/PickupConfirmFulfillmentUseCase.ts',
891
+ CreateOrderFulfillmentUseCase: 'up-backend/src/application/use-cases/order/CreateOrderFulfillmentUseCase.ts',
892
+ IssuePickupCredentialsUseCase: 'up-backend/src/application/use-cases/order/IssuePickupCredentialsUseCase.ts',
893
+ ResolvePickupQrTokenUseCase: 'up-backend/src/application/use-cases/order/ResolvePickupQrTokenUseCase.ts',
894
+ ResolvePickupByCodeUseCase: 'up-backend/src/application/use-cases/order/ResolvePickupByCodeUseCase.ts',
895
+ emitRetailFulfillmentAnalytics: 'up-backend/src/application/services/analytics/emitRetailFulfillmentAnalytics.ts',
896
+ emitRetailV7Analytics: 'up-backend/src/application/services/analytics/emitRetailV7Analytics.ts',
897
+ emitV814CommerceAnalytics: 'up-backend/src/application/services/analytics/emitV814CommerceAnalytics.ts',
898
+ StartBuyAgainCheckoutUseCase: 'up-backend/src/application/use-cases/customer-checkout/StartBuyAgainCheckoutUseCase.ts',
899
+ ValidateBuyAgainAvailabilityUseCase: 'up-backend/src/application/use-cases/customer-checkout/ValidateBuyAgainAvailabilityUseCase.ts',
900
+ PartialPickupConfirmUseCase: 'up-backend/src/application/use-cases/order/PartialPickupConfirmUseCase.ts',
901
+ RefuseFulfillmentLinesUseCase: 'up-backend/src/application/use-cases/order/RefuseFulfillmentLinesUseCase.ts',
902
+ HoldFulfillmentUseCase: 'up-backend/src/application/use-cases/order/HoldFulfillmentUseCase.ts',
903
+ ReleaseFulfillmentHoldUseCase: 'up-backend/src/application/use-cases/order/ReleaseFulfillmentHoldUseCase.ts',
904
+ CompleteKioskCashCheckoutUseCase: 'up-backend/src/application/use-cases/payment/kiosk/CompleteKioskCashCheckoutUseCase.ts',
905
+ CreateCustomerCheckoutSessionUseCase: 'up-backend/src/application/use-cases/customer-checkout/CreateCustomerCheckoutSessionUseCase.ts',
906
+ UpdateCustomerCheckoutSessionCollectUseCase: 'up-backend/src/application/use-cases/customer-checkout/UpdateCustomerCheckoutSessionCollectUseCase.ts',
907
+ IssuePhysicalCardUseCase: 'up-backend/src/application/use-cases/loyalty/IssuePhysicalCardUseCase.ts',
908
+ RevokePhysicalCardUseCase: 'up-backend/src/application/use-cases/loyalty/RevokePhysicalCardUseCase.ts',
909
+ CloseAnalyticsSessionUseCase: 'up-backend/src/application/use-cases/analytics/CloseAnalyticsSessionUseCase.ts',
910
+ IngestAnalyticsEventUseCase: 'up-backend/src/application/use-cases/analytics/IngestAnalyticsEventUseCase.ts',
911
+ ServerAnalyticsEmitter: 'up-backend/src/application/use-cases/analytics/ServerAnalyticsEmitter.ts',
144
912
  };
145
913
  const ALLOWED_BE_REFERENCES = new Set([
146
914
  'StartAnalyticsSessionUseCase',
@@ -150,18 +918,46 @@ const ALLOWED_BE_REFERENCES = new Set([
150
918
  'RecurringDonationMissedPeriodWorker',
151
919
  'AdvanceRecurringDonationScheduleOnInboundMatch',
152
920
  'LoginWithPasswordUseCase',
921
+ 'VerifyOtpUseCase',
922
+ 'CreateCheckoutPaymentHandoffUseCase',
923
+ 'LookupProductByBarcodeUseCase',
924
+ 'ManageProductBarcodeUseCase',
153
925
  'RegisterCustomerUseCase',
926
+ 'SwitchCustomerTenantUseCase',
927
+ 'CancelOrderFulfillmentOnPaymentTerminalUseCase',
928
+ 'CancelIntentUseCase',
154
929
  'LogoutCustomerSessionUseCase',
155
930
  'PutReceiptLocalePreferenceUseCase',
156
931
  'LinkAccountToTransactionUseCase',
157
932
  'CustomerErasureSideEffectsService',
933
+ 'ExpireCheckoutPaymentHandoffWorker',
934
+ 'AdminUpdateFulfillmentStatusUseCase',
935
+ 'PickupConfirmFulfillmentUseCase',
936
+ 'CreateOrderFulfillmentUseCase',
937
+ 'IssuePickupCredentialsUseCase',
938
+ 'ResolvePickupQrTokenUseCase',
939
+ 'ResolvePickupByCodeUseCase',
940
+ 'emitRetailFulfillmentAnalytics',
941
+ 'emitRetailV7Analytics',
942
+ 'emitV814CommerceAnalytics',
943
+ 'StartBuyAgainCheckoutUseCase',
944
+ 'ValidateBuyAgainAvailabilityUseCase',
945
+ 'PartialPickupConfirmUseCase',
946
+ 'RefuseFulfillmentLinesUseCase',
947
+ 'HoldFulfillmentUseCase',
948
+ 'ReleaseFulfillmentHoldUseCase',
949
+ 'CompleteKioskCashCheckoutUseCase',
950
+ 'CreateCustomerCheckoutSessionUseCase',
951
+ 'UpdateCustomerCheckoutSessionCollectUseCase',
952
+ 'IssuePhysicalCardUseCase',
953
+ 'RevokePhysicalCardUseCase',
954
+ 'CloseAnalyticsSessionUseCase',
955
+ 'IngestAnalyticsEventUseCase',
956
+ 'ServerAnalyticsEmitter',
158
957
  ]);
159
958
  export function validateAnalyticsEmitterManifest() {
160
959
  const errors = [];
161
- const catalog = new Set([
162
- ...ANALYTICS_EVENT_NAMES,
163
- ...ANALYTICS_V2_EXTENSION_EVENT_NAMES,
164
- ]);
960
+ const catalog = new Set([...ANALYTICS_EVENT_NAMES]);
165
961
  for (const cell of ANALYTICS_EMITTER_MANIFEST) {
166
962
  if (!catalog.has(cell.eventName)) {
167
963
  errors.push(`manifest event not in catalog: ${cell.eventName}`);