@envive-ai/react-hooks 0.3.12 → 0.3.13
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.
- package/dist/application/commerce-api.cjs +4 -28
- package/dist/application/commerce-api.d.cts +1 -3
- package/dist/application/commerce-api.d.ts +1 -3
- package/dist/application/commerce-api.js +4 -28
- package/dist/application/utils/analyticsUtils.cjs +5 -5
- package/dist/application/utils/analyticsUtils.d.cts +2 -2
- package/dist/application/utils/analyticsUtils.d.ts +2 -2
- package/dist/application/utils/analyticsUtils.js +3 -3
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/chat/chatState.cjs +5 -5
- package/dist/atoms/chat/chatState.d.cts +19 -19
- package/dist/atoms/chat/chatState.d.ts +19 -19
- package/dist/atoms/chat/chatState.js +3 -3
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.cjs +4 -4
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +1 -1
- package/dist/atoms/chat/replies.js +3 -3
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.d.cts +13 -13
- package/dist/atoms/envive/enviveConfig.d.ts +1 -1
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/types.d.cts +1 -1
- package/dist/atoms/search/utils.d.cts +1 -1
- package/dist/atoms/search/utils.d.ts +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/config/locators/components/search/index.d.cts +1 -1
- package/dist/contexts/amplitudeContext/amplitudeContext.cjs +5 -4
- package/dist/contexts/amplitudeContext/amplitudeContext.d.cts +3 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.d.ts +3 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.js +5 -4
- package/dist/contexts/amplitudeContext/index.cjs +3 -3
- package/dist/contexts/amplitudeContext/index.d.cts +1 -1
- package/dist/contexts/amplitudeContext/index.d.ts +1 -1
- package/dist/contexts/amplitudeContext/index.js +1 -1
- package/dist/contexts/cdnContext/cdnContext.cjs +1 -1
- package/dist/contexts/cdnContext/cdnContext.js +1 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +1 -1
- package/dist/contexts/enviveConfigContext/enviveConfigContext.js +1 -1
- package/dist/contexts/enviveContext/types.d.cts +1 -1
- package/dist/contexts/graphqlContext/graphqlContext.cjs +2 -2
- package/dist/contexts/graphqlContext/graphqlContext.js +2 -2
- package/dist/contexts/graphqlContext/mockV3Config.cjs +3 -2
- package/dist/contexts/graphqlContext/mockV3Config.js +3 -2
- package/dist/contexts/hardcopyContext/hardcopyContext.cjs +9 -8
- package/dist/contexts/hardcopyContext/hardcopyContext.js +7 -6
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
- package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
- package/dist/contexts/pageContext/pageContext.cjs +1 -1
- package/dist/contexts/pageContext/pageContext.js +1 -1
- package/dist/contexts/salesAgentContext/chatAPI.cjs +11 -10
- package/dist/contexts/salesAgentContext/chatAPI.js +4 -3
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +1 -1
- package/dist/contexts/salesAgentContext/salesAgentContext.js +1 -1
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +9 -8
- package/dist/contexts/salesAgentContext/salesAgentService.js +7 -6
- package/dist/contexts/searchContext/searchContext.cjs +2 -2
- package/dist/contexts/searchContext/searchContext.js +2 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.cjs +1 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.js +1 -1
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.cjs +1 -1
- package/dist/contexts/typesV3.d.cts +10 -1
- package/dist/contexts/typesV3.d.ts +10 -1
- package/dist/contexts/typesV3.js +1 -1
- package/dist/contexts/userIdentityContext/userIdentityContext.cjs +2 -34
- package/dist/contexts/userIdentityContext/userIdentityContext.d.cts +1 -2
- package/dist/contexts/userIdentityContext/userIdentityContext.d.ts +1 -2
- package/dist/contexts/userIdentityContext/userIdentityContext.js +2 -33
- package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.cjs +1 -1
- package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.d.cts +2 -2
- package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.d.ts +2 -2
- package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.js +1 -1
- package/dist/hooks/ChatToggle/useChatToggle.cjs +6 -5
- package/dist/hooks/ChatToggle/useChatToggle.js +4 -3
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/Search/useSearch.cjs +9 -8
- package/dist/hooks/Search/useSearch.js +4 -3
- package/dist/hooks/Search/useSearchInput.cjs +6 -6
- package/dist/hooks/Search/useSearchInput.js +3 -3
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +6 -5
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +3 -2
- package/dist/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.cjs +4 -3
- package/dist/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.js +3 -2
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +17 -57
- package/dist/services/amplitudeService/amplitudeService.d.cts +4 -47
- package/dist/services/amplitudeService/amplitudeService.d.ts +4 -47
- package/dist/services/amplitudeService/amplitudeService.js +14 -52
- package/dist/services/amplitudeService/eventNames.cjs +59 -0
- package/dist/services/amplitudeService/eventNames.d.cts +54 -0
- package/dist/services/amplitudeService/eventNames.d.ts +54 -0
- package/dist/services/amplitudeService/eventNames.js +57 -0
- package/dist/services/amplitudeService/index.cjs +3 -2
- package/dist/services/amplitudeService/index.d.cts +2 -1
- package/dist/services/amplitudeService/index.d.ts +2 -1
- package/dist/services/amplitudeService/index.js +2 -1
- package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +108 -0
- package/dist/services/ga4ProjectionService/ga4EventSchema.js +108 -0
- package/dist/services/ga4ProjectionService/ga4ProjectionService.cjs +71 -0
- package/dist/services/ga4ProjectionService/ga4ProjectionService.js +71 -0
- package/dist/types/customerService.cjs +2 -1
- package/dist/types/customerService.d.cts +2 -1
- package/dist/types/customerService.d.ts +2 -1
- package/dist/types/customerService.js +2 -1
- package/package.json +1 -6
- package/src/application/commerce-api.ts +0 -29
- package/src/application/utils/analyticsUtils.ts +1 -1
- package/src/atoms/chat/chatState.ts +1 -1
- package/src/atoms/chat/replies.ts +1 -1
- package/src/contexts/graphqlContext/mockV3Config.ts +3 -0
- package/src/contexts/salesAgentContext/salesAgentService.ts +5 -2
- package/src/contexts/typesV3.ts +10 -0
- package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +1 -66
- package/src/contexts/userIdentityContext/userIdentityContext.tsx +0 -47
- package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +2 -4
- package/src/hooks/ChatToggle/useChatToggle.ts +2 -4
- package/src/hooks/Search/useSearch.tsx +2 -4
- package/src/hooks/Search/useSearchInput.ts +1 -1
- package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +2 -4
- package/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.ts +2 -4
- package/src/services/amplitudeService/amplitudeService.ts +14 -50
- package/src/services/amplitudeService/eventNames.ts +52 -0
- package/src/services/ga4ProjectionService/__tests__/ga4ProjectionService.test.ts +334 -0
- package/src/services/ga4ProjectionService/ga4EventSchema.ts +143 -0
- package/src/services/ga4ProjectionService/ga4ProjectionService.ts +137 -0
- package/src/types/customerService.ts +1 -0
- package/dist/hooks/IdentifyUser/index.cjs +0 -3
- package/dist/hooks/IdentifyUser/index.d.cts +0 -2
- package/dist/hooks/IdentifyUser/index.d.ts +0 -2
- package/dist/hooks/IdentifyUser/index.js +0 -3
- package/dist/hooks/IdentifyUser/useIdentifyUser.cjs +0 -35
- package/dist/hooks/IdentifyUser/useIdentifyUser.d.cts +0 -10
- package/dist/hooks/IdentifyUser/useIdentifyUser.d.ts +0 -10
- package/dist/hooks/IdentifyUser/useIdentifyUser.js +0 -34
- package/src/hooks/IdentifyUser/index.ts +0 -1
- package/src/hooks/IdentifyUser/useIdentifyUser.ts +0 -29
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const require_eventNames = require('../amplitudeService/eventNames.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/services/ga4ProjectionService/ga4EventSchema.ts
|
|
4
|
+
/**
|
|
5
|
+
* GA4 Event Schema — single source of truth for Envive → GA4 projection.
|
|
6
|
+
*
|
|
7
|
+
* Every EnviveMetricsEventName MUST have an entry here. The Record type enforces
|
|
8
|
+
* this at compile time — adding a new enum member without a schema entry will
|
|
9
|
+
* cause a TypeScript error.
|
|
10
|
+
*
|
|
11
|
+
* ## How to update this file
|
|
12
|
+
*
|
|
13
|
+
* When adding or modifying event properties, decide whether they belong in `allowedFields` using these criteria:
|
|
14
|
+
* - **Low cardinality** — avoid unbounded values (free text, IDs, URLs, timestamps).
|
|
15
|
+
* - **Non-sensitive** — no PII, user input text, or internal implementation details.
|
|
16
|
+
* - **Flat scalar** — GA4 custom dimensions are flat strings/numbers/booleans.
|
|
17
|
+
* Nested objects should NOT be added; extract specific sub-fields instead.
|
|
18
|
+
* - **Snake_case key** — must already be dot-notation snake_case (e.g. `chat.user_typed`).
|
|
19
|
+
* - **Analytically useful** — the field should enable meaningful filtering/segmentation
|
|
20
|
+
* for merchants in their GA4 dashboards.
|
|
21
|
+
*
|
|
22
|
+
* If excluded from `allowedFields`, the projection layer will automatically drop it.
|
|
23
|
+
*
|
|
24
|
+
* IF IN DOUBT, DON'T HESITATE TO REACH OUT TO THE ANALYTICS TEAM!!!
|
|
25
|
+
*/
|
|
26
|
+
const WIDGET_INTERACTION_DATA_PROJECTIONS = {
|
|
27
|
+
widget_collapsed: { trigger_collapse_source: "collapse_source" },
|
|
28
|
+
product_card_clicked: { trigger_product_id: "product_id" },
|
|
29
|
+
suggestion_scrolled: { trigger_suggestion_id: "suggestion_id" }
|
|
30
|
+
};
|
|
31
|
+
const GA4_EVENT_SCHEMA = {
|
|
32
|
+
[require_eventNames.EnviveMetricsEventName.WidgetRendered]: {
|
|
33
|
+
gaEventName: "envive_widget_rendered",
|
|
34
|
+
allowedFields: [
|
|
35
|
+
"context.page_type",
|
|
36
|
+
"context.page_id",
|
|
37
|
+
"trigger.widget",
|
|
38
|
+
"trigger.widget_role",
|
|
39
|
+
"context.surface"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
[require_eventNames.EnviveMetricsEventName.WidgetInteraction]: {
|
|
43
|
+
gaEventName: "envive_widget_interaction",
|
|
44
|
+
allowedFields: [
|
|
45
|
+
"context.page_type",
|
|
46
|
+
"context.page_id",
|
|
47
|
+
"trigger.widget",
|
|
48
|
+
"trigger.widget_interaction",
|
|
49
|
+
"trigger.entity_role",
|
|
50
|
+
"context.surface"
|
|
51
|
+
],
|
|
52
|
+
widgetInteractionDataProjections: WIDGET_INTERACTION_DATA_PROJECTIONS
|
|
53
|
+
},
|
|
54
|
+
[require_eventNames.EnviveMetricsEventName.ChatRequest]: {
|
|
55
|
+
gaEventName: "envive_chat_request",
|
|
56
|
+
allowedFields: [
|
|
57
|
+
"page_type",
|
|
58
|
+
"page_id",
|
|
59
|
+
"trigger.widget",
|
|
60
|
+
"chat.request_type",
|
|
61
|
+
"chat.user_typed",
|
|
62
|
+
"chat.suggestion_id",
|
|
63
|
+
"chat.suggestion_category",
|
|
64
|
+
"chat.suggestion_created_at",
|
|
65
|
+
"chat.suggestion_is_answer",
|
|
66
|
+
"chat.form_type"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
[require_eventNames.EnviveMetricsEventName.ChatResponse]: {
|
|
70
|
+
gaEventName: "envive_chat_response",
|
|
71
|
+
allowedFields: [
|
|
72
|
+
"page_type",
|
|
73
|
+
"page_id",
|
|
74
|
+
"trigger.widget",
|
|
75
|
+
"chat.user_typed",
|
|
76
|
+
"chat.response_time_ms",
|
|
77
|
+
"chat.product_cards_returned",
|
|
78
|
+
"chat.review_cards_returned"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
[require_eventNames.EnviveMetricsEventName.EnviveInitialized]: {
|
|
82
|
+
gaEventName: "envive_initialized",
|
|
83
|
+
allowedFields: [
|
|
84
|
+
"environment.sales_agent_enabled",
|
|
85
|
+
"environment.envive_enabled",
|
|
86
|
+
"performance.start_time_ms",
|
|
87
|
+
"performance.initialize_time_ms"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
[require_eventNames.EnviveMetricsEventName.PageViewed]: {
|
|
91
|
+
gaEventName: "envive_page_context_evaluated",
|
|
92
|
+
allowedFields: [
|
|
93
|
+
"context.page_type",
|
|
94
|
+
"context.page_id",
|
|
95
|
+
"context.supported",
|
|
96
|
+
"context.ready",
|
|
97
|
+
"context.page_variant_id",
|
|
98
|
+
"environment.envive_enabled"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
[require_eventNames.EnviveMetricsEventName.WidgetTextRequest]: { gaEventName: null },
|
|
102
|
+
[require_eventNames.EnviveMetricsEventName.WidgetTextResponse]: { gaEventName: null },
|
|
103
|
+
[require_eventNames.EnviveMetricsEventName.WidgetTextClicked]: { gaEventName: null }
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
//#endregion
|
|
107
|
+
exports.GA4_EVENT_SCHEMA = GA4_EVENT_SCHEMA;
|
|
108
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0RXZlbnRTY2hlbWEuY2pzIiwibmFtZXMiOlsiV0lER0VUX0lOVEVSQUNUSU9OX0RBVEFfUFJPSkVDVElPTlM6IFdpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb24iLCJHQTRfRVZFTlRfU0NIRU1BOiBSZWNvcmQ8RW52aXZlTWV0cmljc0V2ZW50TmFtZSwgR0E0RXZlbnRTY2hlbWFFbnRyeT4iLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2dhNFByb2plY3Rpb25TZXJ2aWNlL2dhNEV2ZW50U2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR0E0IEV2ZW50IFNjaGVtYSDigJQgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgRW52aXZlIOKGkiBHQTQgcHJvamVjdGlvbi5cbiAqXG4gKiBFdmVyeSBFbnZpdmVNZXRyaWNzRXZlbnROYW1lIE1VU1QgaGF2ZSBhbiBlbnRyeSBoZXJlLiBUaGUgUmVjb3JkIHR5cGUgZW5mb3JjZXNcbiAqIHRoaXMgYXQgY29tcGlsZSB0aW1lIOKAlCBhZGRpbmcgYSBuZXcgZW51bSBtZW1iZXIgd2l0aG91dCBhIHNjaGVtYSBlbnRyeSB3aWxsXG4gKiBjYXVzZSBhIFR5cGVTY3JpcHQgZXJyb3IuXG4gKlxuICogIyMgSG93IHRvIHVwZGF0ZSB0aGlzIGZpbGVcbiAqXG4gKiBXaGVuIGFkZGluZyBvciBtb2RpZnlpbmcgZXZlbnQgcHJvcGVydGllcywgZGVjaWRlIHdoZXRoZXIgdGhleSBiZWxvbmcgaW4gYGFsbG93ZWRGaWVsZHNgIHVzaW5nIHRoZXNlIGNyaXRlcmlhOlxuICogLSAqKkxvdyBjYXJkaW5hbGl0eSoqIOKAlCBhdm9pZCB1bmJvdW5kZWQgdmFsdWVzIChmcmVlIHRleHQsIElEcywgVVJMcywgdGltZXN0YW1wcykuXG4gKiAtICoqTm9uLXNlbnNpdGl2ZSoqIOKAlCBubyBQSUksIHVzZXIgaW5wdXQgdGV4dCwgb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAqIC0gKipGbGF0IHNjYWxhcioqIOKAlCBHQTQgY3VzdG9tIGRpbWVuc2lvbnMgYXJlIGZsYXQgc3RyaW5ncy9udW1iZXJzL2Jvb2xlYW5zLlxuICogICBOZXN0ZWQgb2JqZWN0cyBzaG91bGQgTk9UIGJlIGFkZGVkOyBleHRyYWN0IHNwZWNpZmljIHN1Yi1maWVsZHMgaW5zdGVhZC5cbiAqIC0gKipTbmFrZV9jYXNlIGtleSoqIOKAlCBtdXN0IGFscmVhZHkgYmUgZG90LW5vdGF0aW9uIHNuYWtlX2Nhc2UgKGUuZy4gYGNoYXQudXNlcl90eXBlZGApLlxuICogLSAqKkFuYWx5dGljYWxseSB1c2VmdWwqKiDigJQgdGhlIGZpZWxkIHNob3VsZCBlbmFibGUgbWVhbmluZ2Z1bCBmaWx0ZXJpbmcvc2VnbWVudGF0aW9uXG4gKiAgIGZvciBtZXJjaGFudHMgaW4gdGhlaXIgR0E0IGRhc2hib2FyZHMuXG4gKlxuICogSWYgZXhjbHVkZWQgZnJvbSBgYWxsb3dlZEZpZWxkc2AsIHRoZSBwcm9qZWN0aW9uIGxheWVyIHdpbGwgYXV0b21hdGljYWxseSBkcm9wIGl0LlxuICpcbiAqIElGIElOIERPVUJULCBET04nVCBIRVNJVEFURSBUTyBSRUFDSCBPVVQgVE8gVEhFIEFOQUxZVElDUyBURUFNISEhXG4gKi9cbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICcuLi9hbXBsaXR1ZGVTZXJ2aWNlL2V2ZW50TmFtZXMnO1xuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggZmllbGRzIHRvIGV4dHJhY3QgZnJvbSBgdHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb25fZGF0YWBcbiAqIGZvciBhIGdpdmVuIGB0cmlnZ2VyLndpZGdldF9pbnRlcmFjdGlvbmAgdmFsdWUuXG4gKlxuICogS2V5OiB0aGUgdmFsdWUgb2YgYHRyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uYCAoZS5nLiBcIndpZGdldF9jb2xsYXBzZWRcIilcbiAqIFZhbHVlOiBtYXBwaW5nIG9mIHsgZ2E0RmxhdEtleTogc291cmNlRmllbGRJbldpZGdldEludGVyYWN0aW9uRGF0YSB9XG4gKi9cbmV4cG9ydCB0eXBlIFdpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb24gPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuZXhwb3J0IGludGVyZmFjZSBHQTRQcm9qZWN0ZWRFdmVudENvbmZpZyB7XG4gIGdhRXZlbnROYW1lOiBzdHJpbmc7XG4gIGFsbG93ZWRGaWVsZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICB3aWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9ucz86IFdpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR0E0RXhjbHVkZWRFdmVudENvbmZpZyB7XG4gIGdhRXZlbnROYW1lOiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBHQTRFdmVudFNjaGVtYUVudHJ5ID0gR0E0UHJvamVjdGVkRXZlbnRDb25maWcgfCBHQTRFeGNsdWRlZEV2ZW50Q29uZmlnO1xuXG5jb25zdCBXSURHRVRfSU5URVJBQ1RJT05fREFUQV9QUk9KRUNUSU9OUzogV2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbiA9IHtcbiAgd2lkZ2V0X2NvbGxhcHNlZDogeyB0cmlnZ2VyX2NvbGxhcHNlX3NvdXJjZTogJ2NvbGxhcHNlX3NvdXJjZScgfSxcbiAgcHJvZHVjdF9jYXJkX2NsaWNrZWQ6IHsgdHJpZ2dlcl9wcm9kdWN0X2lkOiAncHJvZHVjdF9pZCcgfSxcbiAgc3VnZ2VzdGlvbl9zY3JvbGxlZDogeyB0cmlnZ2VyX3N1Z2dlc3Rpb25faWQ6ICdzdWdnZXN0aW9uX2lkJyB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEdBNF9FVkVOVF9TQ0hFTUE6IFJlY29yZDxFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBHQTRFdmVudFNjaGVtYUVudHJ5PiA9IHtcbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0UmVuZGVyZWRdOiB7XG4gICAgZ2FFdmVudE5hbWU6ICdlbnZpdmVfd2lkZ2V0X3JlbmRlcmVkJyxcbiAgICBhbGxvd2VkRmllbGRzOiBbXG4gICAgICAnY29udGV4dC5wYWdlX3R5cGUnLFxuICAgICAgJ2NvbnRleHQucGFnZV9pZCcsXG4gICAgICAndHJpZ2dlci53aWRnZXQnLFxuICAgICAgJ3RyaWdnZXIud2lkZ2V0X3JvbGUnLFxuICAgICAgJ2NvbnRleHQuc3VyZmFjZScsXG4gICAgXSxcbiAgfSxcblxuICAvLyBUaGlzIGV2ZW50IGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWRcbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0SW50ZXJhY3Rpb25dOiB7XG4gICAgZ2FFdmVudE5hbWU6ICdlbnZpdmVfd2lkZ2V0X2ludGVyYWN0aW9uJyxcbiAgICBhbGxvd2VkRmllbGRzOiBbXG4gICAgICAnY29udGV4dC5wYWdlX3R5cGUnLFxuICAgICAgJ2NvbnRleHQucGFnZV9pZCcsXG4gICAgICAndHJpZ2dlci53aWRnZXQnLFxuICAgICAgJ3RyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uJyxcbiAgICAgICd0cmlnZ2VyLmVudGl0eV9yb2xlJyxcbiAgICAgICdjb250ZXh0LnN1cmZhY2UnLFxuICAgIF0sXG4gICAgd2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbnM6IFdJREdFVF9JTlRFUkFDVElPTl9EQVRBX1BST0pFQ1RJT05TLFxuICB9LFxuXG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXF1ZXN0XToge1xuICAgIGdhRXZlbnROYW1lOiAnZW52aXZlX2NoYXRfcmVxdWVzdCcsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ3BhZ2VfdHlwZScsXG4gICAgICAncGFnZV9pZCcsXG4gICAgICAndHJpZ2dlci53aWRnZXQnLFxuICAgICAgJ2NoYXQucmVxdWVzdF90eXBlJyxcbiAgICAgIC8vICdjaGF0LnJlcXVlc3RfdGV4dCcsIC8vIFRoaXMgaXMgaGlnaCBjYXJkaW5hbGl0eSBhbmQgcG90ZW50aWFsbHkgUElJIGJ1dCB3ZSBtaWdodCB3YW50IHRvIGluY2x1ZGUgaXQgbGF0ZXJcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnLFxuICAgICAgJ2NoYXQuc3VnZ2VzdGlvbl9pZCcsIC8vIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWRcbiAgICAgICdjaGF0LnN1Z2dlc3Rpb25fY2F0ZWdvcnknLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2NyZWF0ZWRfYXQnLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2lzX2Fuc3dlcicsIC8vIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWRcbiAgICAgICdjaGF0LmZvcm1fdHlwZScsIC8vIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWRcbiAgICBdLFxuICB9LFxuXG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLkNoYXRSZXNwb25zZV06IHtcbiAgICBnYUV2ZW50TmFtZTogJ2Vudml2ZV9jaGF0X3Jlc3BvbnNlJyxcbiAgICBhbGxvd2VkRmllbGRzOiBbXG4gICAgICAncGFnZV90eXBlJyxcbiAgICAgICdwYWdlX2lkJyxcbiAgICAgICd0cmlnZ2VyLndpZGdldCcsIC8vIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgKG1heWJlIGl0IHNob3VsZCdudCBiZT8/PylcbiAgICAgICdjaGF0LnVzZXJfdHlwZWQnLFxuICAgICAgJ2NoYXQucmVzcG9uc2VfdGltZV9tcycsXG4gICAgICAnY2hhdC5wcm9kdWN0X2NhcmRzX3JldHVybmVkJyxcbiAgICAgICdjaGF0LnJldmlld19jYXJkc19yZXR1cm5lZCcsXG4gICAgXSxcbiAgfSxcblxuICBbRW52aXZlTWV0cmljc0V2ZW50TmFtZS5FbnZpdmVJbml0aWFsaXplZF06IHtcbiAgICBnYUV2ZW50TmFtZTogJ2Vudml2ZV9pbml0aWFsaXplZCcsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ2Vudmlyb25tZW50LnNhbGVzX2FnZW50X2VuYWJsZWQnLFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9lbmFibGVkJyxcbiAgICAgIC8vICdlbnZpcm9ubWVudC5zZWFyY2hfZW5hYmxlZCcsIC8vIEZvciBub3csIHNlYXJjaCBpcyBub3QgaW1wbGVtZW50ZWQuIFdlIHdpbGwgYWRkIGl0IGxhdGVyLlxuICAgICAgJ3BlcmZvcm1hbmNlLnN0YXJ0X3RpbWVfbXMnLFxuICAgICAgJ3BlcmZvcm1hbmNlLmluaXRpYWxpemVfdGltZV9tcycsXG4gICAgXSxcbiAgfSxcblxuICAvLyBUaGlzIGV2ZW50IGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWRcbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZF06IHtcbiAgICBnYUV2ZW50TmFtZTogJ2Vudml2ZV9wYWdlX2NvbnRleHRfZXZhbHVhdGVkJyxcbiAgICBhbGxvd2VkRmllbGRzOiBbXG4gICAgICAnY29udGV4dC5wYWdlX3R5cGUnLFxuICAgICAgJ2NvbnRleHQucGFnZV9pZCcsXG4gICAgICAnY29udGV4dC5zdXBwb3J0ZWQnLFxuICAgICAgJ2NvbnRleHQucmVhZHknLFxuICAgICAgJ2NvbnRleHQucGFnZV92YXJpYW50X2lkJyxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfZW5hYmxlZCcsXG4gICAgXSxcbiAgfSxcblxuICBbRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRUZXh0UmVxdWVzdF06IHtcbiAgICBnYUV2ZW50TmFtZTogbnVsbCxcbiAgfSxcblxuICBbRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRUZXh0UmVzcG9uc2VdOiB7XG4gICAgZ2FFdmVudE5hbWU6IG51bGwsXG4gIH0sXG5cbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dENsaWNrZWRdOiB7XG4gICAgZ2FFdmVudE5hbWU6IG51bGwsXG4gIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkNBLE1BQU1BLHNDQUF1RTtDQUMzRSxrQkFBa0IsRUFBRSx5QkFBeUIsbUJBQW1CO0NBQ2hFLHNCQUFzQixFQUFFLG9CQUFvQixjQUFjO0NBQzFELHFCQUFxQixFQUFFLHVCQUF1QixpQkFBaUI7Q0FDaEU7QUFFRCxNQUFhQyxtQkFBd0U7RUFDbEZDLDBDQUF1QixpQkFBaUI7RUFDdkMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0Q7RUFDRjtFQUdBQSwwQ0FBdUIsb0JBQW9CO0VBQzFDLGFBQWE7RUFDYixlQUFlO0dBQ2I7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0Q7RUFDRCxrQ0FBa0M7RUFDbkM7RUFFQUEsMENBQXVCLGNBQWM7RUFDcEMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUVBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNEO0VBQ0Y7RUFFQUEsMENBQXVCLGVBQWU7RUFDckMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNEO0VBQ0Y7RUFFQUEsMENBQXVCLG9CQUFvQjtFQUMxQyxhQUFhO0VBQ2IsZUFBZTtHQUNiO0dBQ0E7R0FFQTtHQUNBO0dBQ0Q7RUFDRjtFQUdBQSwwQ0FBdUIsYUFBYTtFQUNuQyxhQUFhO0VBQ2IsZUFBZTtHQUNiO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNEO0VBQ0Y7RUFFQUEsMENBQXVCLG9CQUFvQixFQUMxQyxhQUFhLE1BQ2Q7RUFFQUEsMENBQXVCLHFCQUFxQixFQUMzQyxhQUFhLE1BQ2Q7RUFFQUEsMENBQXVCLG9CQUFvQixFQUMxQyxhQUFhLE1BQ2Q7Q0FDRiJ9
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { EnviveMetricsEventName } from "../amplitudeService/eventNames.js";
|
|
2
|
+
|
|
3
|
+
//#region src/services/ga4ProjectionService/ga4EventSchema.ts
|
|
4
|
+
/**
|
|
5
|
+
* GA4 Event Schema — single source of truth for Envive → GA4 projection.
|
|
6
|
+
*
|
|
7
|
+
* Every EnviveMetricsEventName MUST have an entry here. The Record type enforces
|
|
8
|
+
* this at compile time — adding a new enum member without a schema entry will
|
|
9
|
+
* cause a TypeScript error.
|
|
10
|
+
*
|
|
11
|
+
* ## How to update this file
|
|
12
|
+
*
|
|
13
|
+
* When adding or modifying event properties, decide whether they belong in `allowedFields` using these criteria:
|
|
14
|
+
* - **Low cardinality** — avoid unbounded values (free text, IDs, URLs, timestamps).
|
|
15
|
+
* - **Non-sensitive** — no PII, user input text, or internal implementation details.
|
|
16
|
+
* - **Flat scalar** — GA4 custom dimensions are flat strings/numbers/booleans.
|
|
17
|
+
* Nested objects should NOT be added; extract specific sub-fields instead.
|
|
18
|
+
* - **Snake_case key** — must already be dot-notation snake_case (e.g. `chat.user_typed`).
|
|
19
|
+
* - **Analytically useful** — the field should enable meaningful filtering/segmentation
|
|
20
|
+
* for merchants in their GA4 dashboards.
|
|
21
|
+
*
|
|
22
|
+
* If excluded from `allowedFields`, the projection layer will automatically drop it.
|
|
23
|
+
*
|
|
24
|
+
* IF IN DOUBT, DON'T HESITATE TO REACH OUT TO THE ANALYTICS TEAM!!!
|
|
25
|
+
*/
|
|
26
|
+
const WIDGET_INTERACTION_DATA_PROJECTIONS = {
|
|
27
|
+
widget_collapsed: { trigger_collapse_source: "collapse_source" },
|
|
28
|
+
product_card_clicked: { trigger_product_id: "product_id" },
|
|
29
|
+
suggestion_scrolled: { trigger_suggestion_id: "suggestion_id" }
|
|
30
|
+
};
|
|
31
|
+
const GA4_EVENT_SCHEMA = {
|
|
32
|
+
[EnviveMetricsEventName.WidgetRendered]: {
|
|
33
|
+
gaEventName: "envive_widget_rendered",
|
|
34
|
+
allowedFields: [
|
|
35
|
+
"context.page_type",
|
|
36
|
+
"context.page_id",
|
|
37
|
+
"trigger.widget",
|
|
38
|
+
"trigger.widget_role",
|
|
39
|
+
"context.surface"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
[EnviveMetricsEventName.WidgetInteraction]: {
|
|
43
|
+
gaEventName: "envive_widget_interaction",
|
|
44
|
+
allowedFields: [
|
|
45
|
+
"context.page_type",
|
|
46
|
+
"context.page_id",
|
|
47
|
+
"trigger.widget",
|
|
48
|
+
"trigger.widget_interaction",
|
|
49
|
+
"trigger.entity_role",
|
|
50
|
+
"context.surface"
|
|
51
|
+
],
|
|
52
|
+
widgetInteractionDataProjections: WIDGET_INTERACTION_DATA_PROJECTIONS
|
|
53
|
+
},
|
|
54
|
+
[EnviveMetricsEventName.ChatRequest]: {
|
|
55
|
+
gaEventName: "envive_chat_request",
|
|
56
|
+
allowedFields: [
|
|
57
|
+
"page_type",
|
|
58
|
+
"page_id",
|
|
59
|
+
"trigger.widget",
|
|
60
|
+
"chat.request_type",
|
|
61
|
+
"chat.user_typed",
|
|
62
|
+
"chat.suggestion_id",
|
|
63
|
+
"chat.suggestion_category",
|
|
64
|
+
"chat.suggestion_created_at",
|
|
65
|
+
"chat.suggestion_is_answer",
|
|
66
|
+
"chat.form_type"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
[EnviveMetricsEventName.ChatResponse]: {
|
|
70
|
+
gaEventName: "envive_chat_response",
|
|
71
|
+
allowedFields: [
|
|
72
|
+
"page_type",
|
|
73
|
+
"page_id",
|
|
74
|
+
"trigger.widget",
|
|
75
|
+
"chat.user_typed",
|
|
76
|
+
"chat.response_time_ms",
|
|
77
|
+
"chat.product_cards_returned",
|
|
78
|
+
"chat.review_cards_returned"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
[EnviveMetricsEventName.EnviveInitialized]: {
|
|
82
|
+
gaEventName: "envive_initialized",
|
|
83
|
+
allowedFields: [
|
|
84
|
+
"environment.sales_agent_enabled",
|
|
85
|
+
"environment.envive_enabled",
|
|
86
|
+
"performance.start_time_ms",
|
|
87
|
+
"performance.initialize_time_ms"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
[EnviveMetricsEventName.PageViewed]: {
|
|
91
|
+
gaEventName: "envive_page_context_evaluated",
|
|
92
|
+
allowedFields: [
|
|
93
|
+
"context.page_type",
|
|
94
|
+
"context.page_id",
|
|
95
|
+
"context.supported",
|
|
96
|
+
"context.ready",
|
|
97
|
+
"context.page_variant_id",
|
|
98
|
+
"environment.envive_enabled"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
[EnviveMetricsEventName.WidgetTextRequest]: { gaEventName: null },
|
|
102
|
+
[EnviveMetricsEventName.WidgetTextResponse]: { gaEventName: null },
|
|
103
|
+
[EnviveMetricsEventName.WidgetTextClicked]: { gaEventName: null }
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
//#endregion
|
|
107
|
+
export { GA4_EVENT_SCHEMA };
|
|
108
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0RXZlbnRTY2hlbWEuanMiLCJuYW1lcyI6WyJXSURHRVRfSU5URVJBQ1RJT05fREFUQV9QUk9KRUNUSU9OUzogV2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbiIsIkdBNF9FVkVOVF9TQ0hFTUE6IFJlY29yZDxFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBHQTRFdmVudFNjaGVtYUVudHJ5PiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9nYTRQcm9qZWN0aW9uU2VydmljZS9nYTRFdmVudFNjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdBNCBFdmVudCBTY2hlbWEg4oCUIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIEVudml2ZSDihpIgR0E0IHByb2plY3Rpb24uXG4gKlxuICogRXZlcnkgRW52aXZlTWV0cmljc0V2ZW50TmFtZSBNVVNUIGhhdmUgYW4gZW50cnkgaGVyZS4gVGhlIFJlY29yZCB0eXBlIGVuZm9yY2VzXG4gKiB0aGlzIGF0IGNvbXBpbGUgdGltZSDigJQgYWRkaW5nIGEgbmV3IGVudW0gbWVtYmVyIHdpdGhvdXQgYSBzY2hlbWEgZW50cnkgd2lsbFxuICogY2F1c2UgYSBUeXBlU2NyaXB0IGVycm9yLlxuICpcbiAqICMjIEhvdyB0byB1cGRhdGUgdGhpcyBmaWxlXG4gKlxuICogV2hlbiBhZGRpbmcgb3IgbW9kaWZ5aW5nIGV2ZW50IHByb3BlcnRpZXMsIGRlY2lkZSB3aGV0aGVyIHRoZXkgYmVsb25nIGluIGBhbGxvd2VkRmllbGRzYCB1c2luZyB0aGVzZSBjcml0ZXJpYTpcbiAqIC0gKipMb3cgY2FyZGluYWxpdHkqKiDigJQgYXZvaWQgdW5ib3VuZGVkIHZhbHVlcyAoZnJlZSB0ZXh0LCBJRHMsIFVSTHMsIHRpbWVzdGFtcHMpLlxuICogLSAqKk5vbi1zZW5zaXRpdmUqKiDigJQgbm8gUElJLCB1c2VyIGlucHV0IHRleHQsIG9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG4gKiAtICoqRmxhdCBzY2FsYXIqKiDigJQgR0E0IGN1c3RvbSBkaW1lbnNpb25zIGFyZSBmbGF0IHN0cmluZ3MvbnVtYmVycy9ib29sZWFucy5cbiAqICAgTmVzdGVkIG9iamVjdHMgc2hvdWxkIE5PVCBiZSBhZGRlZDsgZXh0cmFjdCBzcGVjaWZpYyBzdWItZmllbGRzIGluc3RlYWQuXG4gKiAtICoqU25ha2VfY2FzZSBrZXkqKiDigJQgbXVzdCBhbHJlYWR5IGJlIGRvdC1ub3RhdGlvbiBzbmFrZV9jYXNlIChlLmcuIGBjaGF0LnVzZXJfdHlwZWRgKS5cbiAqIC0gKipBbmFseXRpY2FsbHkgdXNlZnVsKiog4oCUIHRoZSBmaWVsZCBzaG91bGQgZW5hYmxlIG1lYW5pbmdmdWwgZmlsdGVyaW5nL3NlZ21lbnRhdGlvblxuICogICBmb3IgbWVyY2hhbnRzIGluIHRoZWlyIEdBNCBkYXNoYm9hcmRzLlxuICpcbiAqIElmIGV4Y2x1ZGVkIGZyb20gYGFsbG93ZWRGaWVsZHNgLCB0aGUgcHJvamVjdGlvbiBsYXllciB3aWxsIGF1dG9tYXRpY2FsbHkgZHJvcCBpdC5cbiAqXG4gKiBJRiBJTiBET1VCVCwgRE9OJ1QgSEVTSVRBVEUgVE8gUkVBQ0ggT1VUIFRPIFRIRSBBTkFMWVRJQ1MgVEVBTSEhIVxuICovXG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZS9ldmVudE5hbWVzJztcblxuLyoqXG4gKiBEZWZpbmVzIHdoaWNoIGZpZWxkcyB0byBleHRyYWN0IGZyb20gYHRyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uX2RhdGFgXG4gKiBmb3IgYSBnaXZlbiBgdHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb25gIHZhbHVlLlxuICpcbiAqIEtleTogdGhlIHZhbHVlIG9mIGB0cmlnZ2VyLndpZGdldF9pbnRlcmFjdGlvbmAgKGUuZy4gXCJ3aWRnZXRfY29sbGFwc2VkXCIpXG4gKiBWYWx1ZTogbWFwcGluZyBvZiB7IGdhNEZsYXRLZXk6IHNvdXJjZUZpZWxkSW5XaWRnZXRJbnRlcmFjdGlvbkRhdGEgfVxuICovXG5leHBvcnQgdHlwZSBXaWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9uID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgR0E0UHJvamVjdGVkRXZlbnRDb25maWcge1xuICBnYUV2ZW50TmFtZTogc3RyaW5nO1xuICBhbGxvd2VkRmllbGRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgd2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbnM/OiBXaWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdBNEV4Y2x1ZGVkRXZlbnRDb25maWcge1xuICBnYUV2ZW50TmFtZTogbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgR0E0RXZlbnRTY2hlbWFFbnRyeSA9IEdBNFByb2plY3RlZEV2ZW50Q29uZmlnIHwgR0E0RXhjbHVkZWRFdmVudENvbmZpZztcblxuY29uc3QgV0lER0VUX0lOVEVSQUNUSU9OX0RBVEFfUFJPSkVDVElPTlM6IFdpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb24gPSB7XG4gIHdpZGdldF9jb2xsYXBzZWQ6IHsgdHJpZ2dlcl9jb2xsYXBzZV9zb3VyY2U6ICdjb2xsYXBzZV9zb3VyY2UnIH0sXG4gIHByb2R1Y3RfY2FyZF9jbGlja2VkOiB7IHRyaWdnZXJfcHJvZHVjdF9pZDogJ3Byb2R1Y3RfaWQnIH0sXG4gIHN1Z2dlc3Rpb25fc2Nyb2xsZWQ6IHsgdHJpZ2dlcl9zdWdnZXN0aW9uX2lkOiAnc3VnZ2VzdGlvbl9pZCcgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBHQTRfRVZFTlRfU0NIRU1BOiBSZWNvcmQ8RW52aXZlTWV0cmljc0V2ZW50TmFtZSwgR0E0RXZlbnRTY2hlbWFFbnRyeT4gPSB7XG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFJlbmRlcmVkXToge1xuICAgIGdhRXZlbnROYW1lOiAnZW52aXZlX3dpZGdldF9yZW5kZXJlZCcsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ2NvbnRleHQucGFnZV90eXBlJyxcbiAgICAgICdjb250ZXh0LnBhZ2VfaWQnLFxuICAgICAgJ3RyaWdnZXIud2lkZ2V0JyxcbiAgICAgICd0cmlnZ2VyLndpZGdldF9yb2xlJyxcbiAgICAgICdjb250ZXh0LnN1cmZhY2UnLFxuICAgIF0sXG4gIH0sXG5cbiAgLy8gVGhpcyBldmVudCBpcyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldEludGVyYWN0aW9uXToge1xuICAgIGdhRXZlbnROYW1lOiAnZW52aXZlX3dpZGdldF9pbnRlcmFjdGlvbicsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ2NvbnRleHQucGFnZV90eXBlJyxcbiAgICAgICdjb250ZXh0LnBhZ2VfaWQnLFxuICAgICAgJ3RyaWdnZXIud2lkZ2V0JyxcbiAgICAgICd0cmlnZ2VyLndpZGdldF9pbnRlcmFjdGlvbicsXG4gICAgICAndHJpZ2dlci5lbnRpdHlfcm9sZScsXG4gICAgICAnY29udGV4dC5zdXJmYWNlJyxcbiAgICBdLFxuICAgIHdpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb25zOiBXSURHRVRfSU5URVJBQ1RJT05fREFUQV9QUk9KRUNUSU9OUyxcbiAgfSxcblxuICBbRW52aXZlTWV0cmljc0V2ZW50TmFtZS5DaGF0UmVxdWVzdF06IHtcbiAgICBnYUV2ZW50TmFtZTogJ2Vudml2ZV9jaGF0X3JlcXVlc3QnLFxuICAgIGFsbG93ZWRGaWVsZHM6IFtcbiAgICAgICdwYWdlX3R5cGUnLFxuICAgICAgJ3BhZ2VfaWQnLFxuICAgICAgJ3RyaWdnZXIud2lkZ2V0JyxcbiAgICAgICdjaGF0LnJlcXVlc3RfdHlwZScsXG4gICAgICAvLyAnY2hhdC5yZXF1ZXN0X3RleHQnLCAvLyBUaGlzIGlzIGhpZ2ggY2FyZGluYWxpdHkgYW5kIHBvdGVudGlhbGx5IFBJSSBidXQgd2UgbWlnaHQgd2FudCB0byBpbmNsdWRlIGl0IGxhdGVyXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJyxcbiAgICAgICdjaGF0LnN1Z2dlc3Rpb25faWQnLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gICAgICAnY2hhdC5zdWdnZXN0aW9uX2NhdGVnb3J5JywgLy8gbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZFxuICAgICAgJ2NoYXQuc3VnZ2VzdGlvbl9jcmVhdGVkX2F0JywgLy8gbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZFxuICAgICAgJ2NoYXQuc3VnZ2VzdGlvbl9pc19hbnN3ZXInLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gICAgICAnY2hhdC5mb3JtX3R5cGUnLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gICAgXSxcbiAgfSxcblxuICBbRW52aXZlTWV0cmljc0V2ZW50TmFtZS5DaGF0UmVzcG9uc2VdOiB7XG4gICAgZ2FFdmVudE5hbWU6ICdlbnZpdmVfY2hhdF9yZXNwb25zZScsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ3BhZ2VfdHlwZScsXG4gICAgICAncGFnZV9pZCcsXG4gICAgICAndHJpZ2dlci53aWRnZXQnLCAvLyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkIChtYXliZSBpdCBzaG91bGQnbnQgYmU/Pz8pXG4gICAgICAnY2hhdC51c2VyX3R5cGVkJyxcbiAgICAgICdjaGF0LnJlc3BvbnNlX3RpbWVfbXMnLFxuICAgICAgJ2NoYXQucHJvZHVjdF9jYXJkc19yZXR1cm5lZCcsXG4gICAgICAnY2hhdC5yZXZpZXdfY2FyZHNfcmV0dXJuZWQnLFxuICAgIF0sXG4gIH0sXG5cbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuRW52aXZlSW5pdGlhbGl6ZWRdOiB7XG4gICAgZ2FFdmVudE5hbWU6ICdlbnZpdmVfaW5pdGlhbGl6ZWQnLFxuICAgIGFsbG93ZWRGaWVsZHM6IFtcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJyxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfZW5hYmxlZCcsXG4gICAgICAvLyAnZW52aXJvbm1lbnQuc2VhcmNoX2VuYWJsZWQnLCAvLyBGb3Igbm93LCBzZWFyY2ggaXMgbm90IGltcGxlbWVudGVkLiBXZSB3aWxsIGFkZCBpdCBsYXRlci5cbiAgICAgICdwZXJmb3JtYW5jZS5zdGFydF90aW1lX21zJyxcbiAgICAgICdwZXJmb3JtYW5jZS5pbml0aWFsaXplX3RpbWVfbXMnLFxuICAgIF0sXG4gIH0sXG5cbiAgLy8gVGhpcyBldmVudCBpcyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkXG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLlBhZ2VWaWV3ZWRdOiB7XG4gICAgZ2FFdmVudE5hbWU6ICdlbnZpdmVfcGFnZV9jb250ZXh0X2V2YWx1YXRlZCcsXG4gICAgYWxsb3dlZEZpZWxkczogW1xuICAgICAgJ2NvbnRleHQucGFnZV90eXBlJyxcbiAgICAgICdjb250ZXh0LnBhZ2VfaWQnLFxuICAgICAgJ2NvbnRleHQuc3VwcG9ydGVkJyxcbiAgICAgICdjb250ZXh0LnJlYWR5JyxcbiAgICAgICdjb250ZXh0LnBhZ2VfdmFyaWFudF9pZCcsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnLFxuICAgIF0sXG4gIH0sXG5cbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3RdOiB7XG4gICAgZ2FFdmVudE5hbWU6IG51bGwsXG4gIH0sXG5cbiAgW0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlXToge1xuICAgIGdhRXZlbnROYW1lOiBudWxsLFxuICB9LFxuXG4gIFtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRDbGlja2VkXToge1xuICAgIGdhRXZlbnROYW1lOiBudWxsLFxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZDQSxNQUFNQSxzQ0FBdUU7Q0FDM0Usa0JBQWtCLEVBQUUseUJBQXlCLG1CQUFtQjtDQUNoRSxzQkFBc0IsRUFBRSxvQkFBb0IsY0FBYztDQUMxRCxxQkFBcUIsRUFBRSx1QkFBdUIsaUJBQWlCO0NBQ2hFO0FBRUQsTUFBYUMsbUJBQXdFO0VBQ2xGLHVCQUF1QixpQkFBaUI7RUFDdkMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0Q7RUFDRjtFQUdBLHVCQUF1QixvQkFBb0I7RUFDMUMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRDtFQUNELGtDQUFrQztFQUNuQztFQUVBLHVCQUF1QixjQUFjO0VBQ3BDLGFBQWE7RUFDYixlQUFlO0dBQ2I7R0FDQTtHQUNBO0dBQ0E7R0FFQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRDtFQUNGO0VBRUEsdUJBQXVCLGVBQWU7RUFDckMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNEO0VBQ0Y7RUFFQSx1QkFBdUIsb0JBQW9CO0VBQzFDLGFBQWE7RUFDYixlQUFlO0dBQ2I7R0FDQTtHQUVBO0dBQ0E7R0FDRDtFQUNGO0VBR0EsdUJBQXVCLGFBQWE7RUFDbkMsYUFBYTtFQUNiLGVBQWU7R0FDYjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRDtFQUNGO0VBRUEsdUJBQXVCLG9CQUFvQixFQUMxQyxhQUFhLE1BQ2Q7RUFFQSx1QkFBdUIscUJBQXFCLEVBQzNDLGFBQWEsTUFDZDtFQUVBLHVCQUF1QixvQkFBb0IsRUFDMUMsYUFBYSxNQUNkO0NBQ0YifQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const require_logger = require('../../application/logging/logger.cjs');
|
|
2
|
+
const require_ga4EventSchema = require('./ga4EventSchema.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/services/ga4ProjectionService/ga4ProjectionService.ts
|
|
5
|
+
const filterToSchema = (eventProps, allowedFields) => {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const field of allowedFields) if (field in eventProps) result[field] = eventProps[field];
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
const flattenDotKeys = (obj) => {
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const [key, value] of Object.entries(obj)) result[key.replace(/\./g, "_")] = value;
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
const sanitizePageId = (filtered) => {
|
|
16
|
+
const pageType = filtered["context.page_type"];
|
|
17
|
+
if (pageType === "pdp" || pageType === "plp") return filtered;
|
|
18
|
+
const rest = { ...filtered };
|
|
19
|
+
delete rest["context.page_id"];
|
|
20
|
+
return rest;
|
|
21
|
+
};
|
|
22
|
+
const projectWidgetInteractionData = (eventProps, config) => {
|
|
23
|
+
if (!config.widgetInteractionDataProjections) return {};
|
|
24
|
+
const interaction = eventProps["trigger.widget_interaction"];
|
|
25
|
+
if (typeof interaction !== "string") return {};
|
|
26
|
+
const projectionMap = config.widgetInteractionDataProjections[interaction];
|
|
27
|
+
if (!projectionMap) return {};
|
|
28
|
+
const interactionData = eventProps["trigger.widget_interaction_data"];
|
|
29
|
+
if (interactionData === null || interactionData === void 0 || typeof interactionData !== "object") return {};
|
|
30
|
+
const data = interactionData;
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const [gaKey, sourceField] of Object.entries(projectionMap)) if (sourceField in data) result[gaKey] = data[sourceField];
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
const truncateString = (value) => {
|
|
36
|
+
if (typeof value === "string" && value.length > 100) return `${value.substring(0, 97)}...`;
|
|
37
|
+
return value;
|
|
38
|
+
};
|
|
39
|
+
const truncateValues = (obj) => {
|
|
40
|
+
const result = {};
|
|
41
|
+
for (const [key, value] of Object.entries(obj)) result[key] = truncateString(value);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
const pushToDataLayer = (gaEvent) => {
|
|
45
|
+
if (typeof window !== "undefined" && window.dataLayer) window.dataLayer.push(gaEvent);
|
|
46
|
+
};
|
|
47
|
+
const projectToGA4 = (eventName, eventProps) => {
|
|
48
|
+
try {
|
|
49
|
+
const schemaEntry = require_ga4EventSchema.GA4_EVENT_SCHEMA[eventName];
|
|
50
|
+
if (schemaEntry.gaEventName === null) return;
|
|
51
|
+
const config = schemaEntry;
|
|
52
|
+
const props = eventProps ?? {};
|
|
53
|
+
let filtered = filterToSchema(props, config.allowedFields);
|
|
54
|
+
filtered = sanitizePageId(filtered);
|
|
55
|
+
const interactionFields = projectWidgetInteractionData(props, config);
|
|
56
|
+
const truncatedParams = truncateValues({
|
|
57
|
+
...flattenDotKeys(filtered),
|
|
58
|
+
...interactionFields
|
|
59
|
+
});
|
|
60
|
+
pushToDataLayer({
|
|
61
|
+
event: config.gaEventName,
|
|
62
|
+
...truncatedParams
|
|
63
|
+
});
|
|
64
|
+
} catch (err) {
|
|
65
|
+
require_logger.default.logError("[envive-ai] Error projecting event to GA4", err, { eventName });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.projectToGA4 = projectToGA4;
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0UHJvamVjdGlvblNlcnZpY2UuY2pzIiwibmFtZXMiOlsicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIkdBNF9FVkVOVF9TQ0hFTUEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4uL2FtcGxpdHVkZVNlcnZpY2UvZXZlbnROYW1lcyc7XG5pbXBvcnQgeyBHQTRQcm9qZWN0ZWRFdmVudENvbmZpZywgR0E0X0VWRU5UX1NDSEVNQSB9IGZyb20gJy4vZ2E0RXZlbnRTY2hlbWEnO1xuXG5jb25zdCBmaWx0ZXJUb1NjaGVtYSA9IChcbiAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFsbG93ZWRGaWVsZHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgZmllbGQgb2YgYWxsb3dlZEZpZWxkcykge1xuICAgIGlmIChmaWVsZCBpbiBldmVudFByb3BzKSB7XG4gICAgICByZXN1bHRbZmllbGRdID0gZXZlbnRQcm9wc1tmaWVsZF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBcImNvbnRleHQucGFnZV90eXBlXCIg4oaSIFwiY29udGV4dF9wYWdlX3R5cGVcIlxuY29uc3QgZmxhdHRlbkRvdEtleXMgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmVzdWx0W2tleS5yZXBsYWNlKC9cXC4vZywgJ18nKV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gT21pdCBjb250ZXh0LnBhZ2VfaWQgZm9yIG5vbi1wZHAvcGxwIHBhZ2UgdHlwZXMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZvciBjb250ZXh0LnBhZ2VfaWQgaXM6XG4vLyBQRFA6IHByb2R1Y3RfaWRcbi8vIFBMUDogcGxwX2lkXG4vLyBTZWFyY2g6IHNlYXJjaCBxdWVyeVxuLy8gT3RoZXI6IHBhZ2UgdXJsXG4vLyBXZSB3YW50IHRvIG9taXQgYWxsIGJ1dCBwZHAgYW5kIHBscCBwYWdlIHR5cGVzIHRvIHByb3ZpZGUgYSBjbGVhciwgY29uc2lzdGVudCBpbnRlcmZhY2UgZm9yIG1lcmNoYW50cy5cbmNvbnN0IHNhbml0aXplUGFnZUlkID0gKGZpbHRlcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcGFnZVR5cGUgPSBmaWx0ZXJlZFsnY29udGV4dC5wYWdlX3R5cGUnXTtcbiAgaWYgKHBhZ2VUeXBlID09PSAncGRwJyB8fCBwYWdlVHlwZSA9PT0gJ3BscCcpIHtcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cbiAgY29uc3QgcmVzdCA9IHsgLi4uZmlsdGVyZWQgfTtcbiAgZGVsZXRlIHJlc3RbJ2NvbnRleHQucGFnZV9pZCddO1xuICByZXR1cm4gcmVzdDtcbn07XG5cbi8vIEV4dHJhY3Qgd2hpdGVsaXN0ZWQgc3ViLWZpZWxkcyBmcm9tIHRyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uX2RhdGFcbmNvbnN0IHByb2plY3RXaWRnZXRJbnRlcmFjdGlvbkRhdGEgPSAoXG4gIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWc6IEdBNFByb2plY3RlZEV2ZW50Q29uZmlnLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBpZiAoIWNvbmZpZy53aWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9ucykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gZXZlbnRQcm9wc1sndHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb24nXTtcbiAgaWYgKHR5cGVvZiBpbnRlcmFjdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBwcm9qZWN0aW9uTWFwID0gY29uZmlnLndpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb25zW2ludGVyYWN0aW9uXTtcbiAgaWYgKCFwcm9qZWN0aW9uTWFwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25EYXRhID0gZXZlbnRQcm9wc1sndHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb25fZGF0YSddO1xuICBpZiAoXG4gICAgaW50ZXJhY3Rpb25EYXRhID09PSBudWxsIHx8XG4gICAgaW50ZXJhY3Rpb25EYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaW50ZXJhY3Rpb25EYXRhICE9PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBkYXRhID0gaW50ZXJhY3Rpb25EYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2dhS2V5LCBzb3VyY2VGaWVsZF0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdGlvbk1hcCkpIHtcbiAgICBpZiAoc291cmNlRmllbGQgaW4gZGF0YSkge1xuICAgICAgcmVzdWx0W2dhS2V5XSA9IGRhdGFbc291cmNlRmllbGRdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlLnN1YnN0cmluZygwLCA5Nyl9Li4uYDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCB0cnVuY2F0ZVZhbHVlcyA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICByZXN1bHRba2V5XSA9IHRydW5jYXRlU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgcHVzaFRvRGF0YUxheWVyID0gKGdhRXZlbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKGdhRXZlbnQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvamVjdFRvR0E0ID0gKFxuICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNjaGVtYUVudHJ5ID0gR0E0X0VWRU5UX1NDSEVNQVtldmVudE5hbWVdO1xuXG4gICAgaWYgKHNjaGVtYUVudHJ5LmdhRXZlbnROYW1lID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gc2NoZW1hRW50cnk7XG4gICAgY29uc3QgcHJvcHMgPSBldmVudFByb3BzID8/IHt9O1xuXG4gICAgbGV0IGZpbHRlcmVkID0gZmlsdGVyVG9TY2hlbWEocHJvcHMsIGNvbmZpZy5hbGxvd2VkRmllbGRzKTtcbiAgICBmaWx0ZXJlZCA9IHNhbml0aXplUGFnZUlkKGZpbHRlcmVkKTtcblxuICAgIGNvbnN0IGludGVyYWN0aW9uRmllbGRzID0gcHJvamVjdFdpZGdldEludGVyYWN0aW9uRGF0YShwcm9wcywgY29uZmlnKTtcblxuICAgIGNvbnN0IGZsYXRQYXJhbXMgPSB7XG4gICAgICAuLi5mbGF0dGVuRG90S2V5cyhmaWx0ZXJlZCksXG4gICAgICAuLi5pbnRlcmFjdGlvbkZpZWxkcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJ1bmNhdGVkUGFyYW1zID0gdHJ1bmNhdGVWYWx1ZXMoZmxhdFBhcmFtcyk7XG5cbiAgICBwdXNoVG9EYXRhTGF5ZXIoe1xuICAgICAgZXZlbnQ6IGNvbmZpZy5nYUV2ZW50TmFtZSxcbiAgICAgIC4uLnRydW5jYXRlZFBhcmFtcyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdbZW52aXZlLWFpXSBFcnJvciBwcm9qZWN0aW5nIGV2ZW50IHRvIEdBNCcsIGVyciwge1xuICAgICAgZXZlbnROYW1lLFxuICAgIH0pO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBSUEsTUFBTSxrQkFDSixZQUNBLGtCQUM0QjtDQUM1QixNQUFNQSxTQUFrQyxFQUFFO0FBQzFDLE1BQUssTUFBTSxTQUFTLGNBQ2xCLEtBQUksU0FBUyxXQUNYLFFBQU8sU0FBUyxXQUFXO0FBRy9CLFFBQU87O0FBSVQsTUFBTSxrQkFBa0IsUUFBMEQ7Q0FDaEYsTUFBTUEsU0FBa0MsRUFBRTtBQUMxQyxNQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLElBQUksQ0FDNUMsUUFBTyxJQUFJLFFBQVEsT0FBTyxJQUFJLElBQUk7QUFFcEMsUUFBTzs7QUFTVCxNQUFNLGtCQUFrQixhQUErRDtDQUNyRixNQUFNLFdBQVcsU0FBUztBQUMxQixLQUFJLGFBQWEsU0FBUyxhQUFhLE1BQ3JDLFFBQU87Q0FFVCxNQUFNLE9BQU8sRUFBRSxHQUFHLFVBQVU7QUFDNUIsUUFBTyxLQUFLO0FBQ1osUUFBTzs7QUFJVCxNQUFNLGdDQUNKLFlBQ0EsV0FDNEI7QUFDNUIsS0FBSSxDQUFDLE9BQU8saUNBQ1YsUUFBTyxFQUFFO0NBR1gsTUFBTSxjQUFjLFdBQVc7QUFDL0IsS0FBSSxPQUFPLGdCQUFnQixTQUN6QixRQUFPLEVBQUU7Q0FHWCxNQUFNLGdCQUFnQixPQUFPLGlDQUFpQztBQUM5RCxLQUFJLENBQUMsY0FDSCxRQUFPLEVBQUU7Q0FHWCxNQUFNLGtCQUFrQixXQUFXO0FBQ25DLEtBQ0Usb0JBQW9CLFFBQ3BCLG9CQUFvQixVQUNwQixPQUFPLG9CQUFvQixTQUUzQixRQUFPLEVBQUU7Q0FHWCxNQUFNLE9BQU87Q0FDYixNQUFNQSxTQUFrQyxFQUFFO0FBQzFDLE1BQUssTUFBTSxDQUFDLE9BQU8sZ0JBQWdCLE9BQU8sUUFBUSxjQUFjLENBQzlELEtBQUksZUFBZSxLQUNqQixRQUFPLFNBQVMsS0FBSztBQUd6QixRQUFPOztBQUdULE1BQU0sa0JBQWtCLFVBQTRCO0FBQ2xELEtBQUksT0FBTyxVQUFVLFlBQVksTUFBTSxTQUFTLElBQzlDLFFBQU8sR0FBRyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFFbkMsUUFBTzs7QUFHVCxNQUFNLGtCQUFrQixRQUEwRDtDQUNoRixNQUFNQSxTQUFrQyxFQUFFO0FBQzFDLE1BQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsSUFBSSxDQUM1QyxRQUFPLE9BQU8sZUFBZSxNQUFNO0FBRXJDLFFBQU87O0FBR1QsTUFBTSxtQkFBbUIsWUFBMkM7QUFDbEUsS0FBSSxPQUFPLFdBQVcsZUFBZSxPQUFPLFVBQzFDLFFBQU8sVUFBVSxLQUFLLFFBQVE7O0FBSWxDLE1BQWEsZ0JBQ1gsV0FDQSxlQUNTO0FBQ1QsS0FBSTtFQUNGLE1BQU0sY0FBY0Msd0NBQWlCO0FBRXJDLE1BQUksWUFBWSxnQkFBZ0IsS0FDOUI7RUFHRixNQUFNLFNBQVM7RUFDZixNQUFNLFFBQVEsY0FBYyxFQUFFO0VBRTlCLElBQUksV0FBVyxlQUFlLE9BQU8sT0FBTyxjQUFjO0FBQzFELGFBQVcsZUFBZSxTQUFTO0VBRW5DLE1BQU0sb0JBQW9CLDZCQUE2QixPQUFPLE9BQU87RUFPckUsTUFBTSxrQkFBa0IsZUFMTDtHQUNqQixHQUFHLGVBQWUsU0FBUztHQUMzQixHQUFHO0dBQ0osQ0FFaUQ7QUFFbEQsa0JBQWdCO0dBQ2QsT0FBTyxPQUFPO0dBQ2QsR0FBRztHQUNKLENBQUM7VUFDSyxLQUFLO0FBQ1oseUJBQU8sU0FBUyw2Q0FBNkMsS0FBSyxFQUNoRSxXQUNELENBQUMifQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import logger_default from "../../application/logging/logger.js";
|
|
2
|
+
import { GA4_EVENT_SCHEMA } from "./ga4EventSchema.js";
|
|
3
|
+
|
|
4
|
+
//#region src/services/ga4ProjectionService/ga4ProjectionService.ts
|
|
5
|
+
const filterToSchema = (eventProps, allowedFields) => {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const field of allowedFields) if (field in eventProps) result[field] = eventProps[field];
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
const flattenDotKeys = (obj) => {
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const [key, value] of Object.entries(obj)) result[key.replace(/\./g, "_")] = value;
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
const sanitizePageId = (filtered) => {
|
|
16
|
+
const pageType = filtered["context.page_type"];
|
|
17
|
+
if (pageType === "pdp" || pageType === "plp") return filtered;
|
|
18
|
+
const rest = { ...filtered };
|
|
19
|
+
delete rest["context.page_id"];
|
|
20
|
+
return rest;
|
|
21
|
+
};
|
|
22
|
+
const projectWidgetInteractionData = (eventProps, config) => {
|
|
23
|
+
if (!config.widgetInteractionDataProjections) return {};
|
|
24
|
+
const interaction = eventProps["trigger.widget_interaction"];
|
|
25
|
+
if (typeof interaction !== "string") return {};
|
|
26
|
+
const projectionMap = config.widgetInteractionDataProjections[interaction];
|
|
27
|
+
if (!projectionMap) return {};
|
|
28
|
+
const interactionData = eventProps["trigger.widget_interaction_data"];
|
|
29
|
+
if (interactionData === null || interactionData === void 0 || typeof interactionData !== "object") return {};
|
|
30
|
+
const data = interactionData;
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const [gaKey, sourceField] of Object.entries(projectionMap)) if (sourceField in data) result[gaKey] = data[sourceField];
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
const truncateString = (value) => {
|
|
36
|
+
if (typeof value === "string" && value.length > 100) return `${value.substring(0, 97)}...`;
|
|
37
|
+
return value;
|
|
38
|
+
};
|
|
39
|
+
const truncateValues = (obj) => {
|
|
40
|
+
const result = {};
|
|
41
|
+
for (const [key, value] of Object.entries(obj)) result[key] = truncateString(value);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
const pushToDataLayer = (gaEvent) => {
|
|
45
|
+
if (typeof window !== "undefined" && window.dataLayer) window.dataLayer.push(gaEvent);
|
|
46
|
+
};
|
|
47
|
+
const projectToGA4 = (eventName, eventProps) => {
|
|
48
|
+
try {
|
|
49
|
+
const schemaEntry = GA4_EVENT_SCHEMA[eventName];
|
|
50
|
+
if (schemaEntry.gaEventName === null) return;
|
|
51
|
+
const config = schemaEntry;
|
|
52
|
+
const props = eventProps ?? {};
|
|
53
|
+
let filtered = filterToSchema(props, config.allowedFields);
|
|
54
|
+
filtered = sanitizePageId(filtered);
|
|
55
|
+
const interactionFields = projectWidgetInteractionData(props, config);
|
|
56
|
+
const truncatedParams = truncateValues({
|
|
57
|
+
...flattenDotKeys(filtered),
|
|
58
|
+
...interactionFields
|
|
59
|
+
});
|
|
60
|
+
pushToDataLayer({
|
|
61
|
+
event: config.gaEventName,
|
|
62
|
+
...truncatedParams
|
|
63
|
+
});
|
|
64
|
+
} catch (err) {
|
|
65
|
+
logger_default.logError("[envive-ai] Error projecting event to GA4", err, { eventName });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
export { projectToGA4 };
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0UHJvamVjdGlvblNlcnZpY2UuanMiLCJuYW1lcyI6WyJyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2dhNFByb2plY3Rpb25TZXJ2aWNlL2dhNFByb2plY3Rpb25TZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICcuLi9hbXBsaXR1ZGVTZXJ2aWNlL2V2ZW50TmFtZXMnO1xuaW1wb3J0IHsgR0E0UHJvamVjdGVkRXZlbnRDb25maWcsIEdBNF9FVkVOVF9TQ0hFTUEgfSBmcm9tICcuL2dhNEV2ZW50U2NoZW1hJztcblxuY29uc3QgZmlsdGVyVG9TY2hlbWEgPSAoXG4gIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhbGxvd2VkRmllbGRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbG93ZWRGaWVsZHMpIHtcbiAgICBpZiAoZmllbGQgaW4gZXZlbnRQcm9wcykge1xuICAgICAgcmVzdWx0W2ZpZWxkXSA9IGV2ZW50UHJvcHNbZmllbGRdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gXCJjb250ZXh0LnBhZ2VfdHlwZVwiIOKGkiBcImNvbnRleHRfcGFnZV90eXBlXCJcbmNvbnN0IGZsYXR0ZW5Eb3RLZXlzID0gKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIHJlc3VsdFtrZXkucmVwbGFjZSgvXFwuL2csICdfJyldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIE9taXQgY29udGV4dC5wYWdlX2lkIGZvciBub24tcGRwL3BscCBwYWdlIHR5cGVzLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBmb3IgY29udGV4dC5wYWdlX2lkIGlzOlxuLy8gUERQOiBwcm9kdWN0X2lkXG4vLyBQTFA6IHBscF9pZFxuLy8gU2VhcmNoOiBzZWFyY2ggcXVlcnlcbi8vIE90aGVyOiBwYWdlIHVybFxuLy8gV2Ugd2FudCB0byBvbWl0IGFsbCBidXQgcGRwIGFuZCBwbHAgcGFnZSB0eXBlcyB0byBwcm92aWRlIGEgY2xlYXIsIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGZvciBtZXJjaGFudHMuXG5jb25zdCBzYW5pdGl6ZVBhZ2VJZCA9IChmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IHBhZ2VUeXBlID0gZmlsdGVyZWRbJ2NvbnRleHQucGFnZV90eXBlJ107XG4gIGlmIChwYWdlVHlwZSA9PT0gJ3BkcCcgfHwgcGFnZVR5cGUgPT09ICdwbHAnKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB7IC4uLmZpbHRlcmVkIH07XG4gIGRlbGV0ZSByZXN0Wydjb250ZXh0LnBhZ2VfaWQnXTtcbiAgcmV0dXJuIHJlc3Q7XG59O1xuXG4vLyBFeHRyYWN0IHdoaXRlbGlzdGVkIHN1Yi1maWVsZHMgZnJvbSB0cmlnZ2VyLndpZGdldF9pbnRlcmFjdGlvbl9kYXRhXG5jb25zdCBwcm9qZWN0V2lkZ2V0SW50ZXJhY3Rpb25EYXRhID0gKFxuICBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnOiBHQTRQcm9qZWN0ZWRFdmVudENvbmZpZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYgKCFjb25maWcud2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbnMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IGV2ZW50UHJvcHNbJ3RyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uJ107XG4gIGlmICh0eXBlb2YgaW50ZXJhY3Rpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcHJvamVjdGlvbk1hcCA9IGNvbmZpZy53aWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9uc1tpbnRlcmFjdGlvbl07XG4gIGlmICghcHJvamVjdGlvbk1hcCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aW9uRGF0YSA9IGV2ZW50UHJvcHNbJ3RyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uX2RhdGEnXTtcbiAgaWYgKFxuICAgIGludGVyYWN0aW9uRGF0YSA9PT0gbnVsbCB8fFxuICAgIGludGVyYWN0aW9uRGF0YSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGludGVyYWN0aW9uRGF0YSAhPT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGludGVyYWN0aW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtnYUtleSwgc291cmNlRmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHByb2plY3Rpb25NYXApKSB7XG4gICAgaWYgKHNvdXJjZUZpZWxkIGluIGRhdGEpIHtcbiAgICAgIHJlc3VsdFtnYUtleV0gPSBkYXRhW3NvdXJjZUZpZWxkXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHRydW5jYXRlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgOTcpfS4uLmA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuY29uc3QgdHJ1bmNhdGVWYWx1ZXMgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmVzdWx0W2tleV0gPSB0cnVuY2F0ZVN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHB1c2hUb0RhdGFMYXllciA9IChnYUV2ZW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChnYUV2ZW50KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHByb2plY3RUb0dBNCA9IChcbiAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzY2hlbWFFbnRyeSA9IEdBNF9FVkVOVF9TQ0hFTUFbZXZlbnROYW1lXTtcblxuICAgIGlmIChzY2hlbWFFbnRyeS5nYUV2ZW50TmFtZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHNjaGVtYUVudHJ5O1xuICAgIGNvbnN0IHByb3BzID0gZXZlbnRQcm9wcyA/PyB7fTtcblxuICAgIGxldCBmaWx0ZXJlZCA9IGZpbHRlclRvU2NoZW1hKHByb3BzLCBjb25maWcuYWxsb3dlZEZpZWxkcyk7XG4gICAgZmlsdGVyZWQgPSBzYW5pdGl6ZVBhZ2VJZChmaWx0ZXJlZCk7XG5cbiAgICBjb25zdCBpbnRlcmFjdGlvbkZpZWxkcyA9IHByb2plY3RXaWRnZXRJbnRlcmFjdGlvbkRhdGEocHJvcHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBmbGF0UGFyYW1zID0ge1xuICAgICAgLi4uZmxhdHRlbkRvdEtleXMoZmlsdGVyZWQpLFxuICAgICAgLi4uaW50ZXJhY3Rpb25GaWVsZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRydW5jYXRlZFBhcmFtcyA9IHRydW5jYXRlVmFsdWVzKGZsYXRQYXJhbXMpO1xuXG4gICAgcHVzaFRvRGF0YUxheWVyKHtcbiAgICAgIGV2ZW50OiBjb25maWcuZ2FFdmVudE5hbWUsXG4gICAgICAuLi50cnVuY2F0ZWRQYXJhbXMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIExvZ2dlci5sb2dFcnJvcignW2Vudml2ZS1haV0gRXJyb3IgcHJvamVjdGluZyBldmVudCB0byBHQTQnLCBlcnIsIHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICB9KTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUlBLE1BQU0sa0JBQ0osWUFDQSxrQkFDNEI7Q0FDNUIsTUFBTUEsU0FBa0MsRUFBRTtBQUMxQyxNQUFLLE1BQU0sU0FBUyxjQUNsQixLQUFJLFNBQVMsV0FDWCxRQUFPLFNBQVMsV0FBVztBQUcvQixRQUFPOztBQUlULE1BQU0sa0JBQWtCLFFBQTBEO0NBQ2hGLE1BQU1BLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxJQUFJLENBQzVDLFFBQU8sSUFBSSxRQUFRLE9BQU8sSUFBSSxJQUFJO0FBRXBDLFFBQU87O0FBU1QsTUFBTSxrQkFBa0IsYUFBK0Q7Q0FDckYsTUFBTSxXQUFXLFNBQVM7QUFDMUIsS0FBSSxhQUFhLFNBQVMsYUFBYSxNQUNyQyxRQUFPO0NBRVQsTUFBTSxPQUFPLEVBQUUsR0FBRyxVQUFVO0FBQzVCLFFBQU8sS0FBSztBQUNaLFFBQU87O0FBSVQsTUFBTSxnQ0FDSixZQUNBLFdBQzRCO0FBQzVCLEtBQUksQ0FBQyxPQUFPLGlDQUNWLFFBQU8sRUFBRTtDQUdYLE1BQU0sY0FBYyxXQUFXO0FBQy9CLEtBQUksT0FBTyxnQkFBZ0IsU0FDekIsUUFBTyxFQUFFO0NBR1gsTUFBTSxnQkFBZ0IsT0FBTyxpQ0FBaUM7QUFDOUQsS0FBSSxDQUFDLGNBQ0gsUUFBTyxFQUFFO0NBR1gsTUFBTSxrQkFBa0IsV0FBVztBQUNuQyxLQUNFLG9CQUFvQixRQUNwQixvQkFBb0IsVUFDcEIsT0FBTyxvQkFBb0IsU0FFM0IsUUFBTyxFQUFFO0NBR1gsTUFBTSxPQUFPO0NBQ2IsTUFBTUEsU0FBa0MsRUFBRTtBQUMxQyxNQUFLLE1BQU0sQ0FBQyxPQUFPLGdCQUFnQixPQUFPLFFBQVEsY0FBYyxDQUM5RCxLQUFJLGVBQWUsS0FDakIsUUFBTyxTQUFTLEtBQUs7QUFHekIsUUFBTzs7QUFHVCxNQUFNLGtCQUFrQixVQUE0QjtBQUNsRCxLQUFJLE9BQU8sVUFBVSxZQUFZLE1BQU0sU0FBUyxJQUM5QyxRQUFPLEdBQUcsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRW5DLFFBQU87O0FBR1QsTUFBTSxrQkFBa0IsUUFBMEQ7Q0FDaEYsTUFBTUEsU0FBa0MsRUFBRTtBQUMxQyxNQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLElBQUksQ0FDNUMsUUFBTyxPQUFPLGVBQWUsTUFBTTtBQUVyQyxRQUFPOztBQUdULE1BQU0sbUJBQW1CLFlBQTJDO0FBQ2xFLEtBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxVQUMxQyxRQUFPLFVBQVUsS0FBSyxRQUFROztBQUlsQyxNQUFhLGdCQUNYLFdBQ0EsZUFDUztBQUNULEtBQUk7RUFDRixNQUFNLGNBQWMsaUJBQWlCO0FBRXJDLE1BQUksWUFBWSxnQkFBZ0IsS0FDOUI7RUFHRixNQUFNLFNBQVM7RUFDZixNQUFNLFFBQVEsY0FBYyxFQUFFO0VBRTlCLElBQUksV0FBVyxlQUFlLE9BQU8sT0FBTyxjQUFjO0FBQzFELGFBQVcsZUFBZSxTQUFTO0VBRW5DLE1BQU0sb0JBQW9CLDZCQUE2QixPQUFPLE9BQU87RUFPckUsTUFBTSxrQkFBa0IsZUFMTDtHQUNqQixHQUFHLGVBQWUsU0FBUztHQUMzQixHQUFHO0dBQ0osQ0FFaUQ7QUFFbEQsa0JBQWdCO0dBQ2QsT0FBTyxPQUFPO0dBQ2QsR0FBRztHQUNKLENBQUM7VUFDSyxLQUFLO0FBQ1osaUJBQU8sU0FBUyw2Q0FBNkMsS0FBSyxFQUNoRSxXQUNELENBQUMifQ==
|
|
@@ -11,10 +11,11 @@ let CustomerServiceType = /* @__PURE__ */ function(CustomerServiceType$1) {
|
|
|
11
11
|
CustomerServiceType$1["gladly"] = "gladly";
|
|
12
12
|
CustomerServiceType$1["richpanel"] = "richpanel";
|
|
13
13
|
CustomerServiceType$1["zendesk"] = "zendesk";
|
|
14
|
+
CustomerServiceType$1["eightByEight"] = "8x8";
|
|
14
15
|
CustomerServiceType$1["unsupported"] = "unsupported";
|
|
15
16
|
return CustomerServiceType$1;
|
|
16
17
|
}({});
|
|
17
18
|
|
|
18
19
|
//#endregion
|
|
19
20
|
exports.CustomerServiceType = CustomerServiceType;
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXJTZXJ2aWNlLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvY3VzdG9tZXJTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGVudW0gQ3VzdG9tZXJTZXJ2aWNlVHlwZSB7XG4gIHNob3BpZnkgPSAnc2hvcGlmeScsXG4gIGdvcmdpYXMgPSAnZ29yZ2lhcycsXG4gIGt1c3RvbWVyID0gJ2t1c3RvbWVyJyxcbiAgZ3Jvb3ZlID0gJ2dyb292ZScsXG4gIHRpZGlvID0gJ3RpZGlvJyxcbiAgem93aWUgPSAnem93aWUnLFxuICByZWRvID0gJ3JlZG8nLFxuICBnbGFkbHkgPSAnZ2xhZGx5JyxcbiAgcmljaHBhbmVsID0gJ3JpY2hwYW5lbCcsXG4gIHplbmRlc2sgPSAnemVuZGVzaycsXG4gIGVpZ2h0QnlFaWdodCA9ICc4eDgnLFxuICB1bnN1cHBvcnRlZCA9ICd1bnN1cHBvcnRlZCcsXG59XG5leHBvcnQgZW51bSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUge1xuICBub25lID0gJ25vbmUnLFxuICBzaW1wbGUgPSAnc2ltcGxlJyxcbiAgZnVsbCA9ICdmdWxsJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiB7XG4gIHByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlcjtcbiAgc3VwcG9ydGVkSW50ZWdyYXRpb25Nb2RlczogQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlW107XG4gIGFsbG93RmlsZVVwbG9hZD86IGJvb2xlYW47XG4gIG1heGZpbGVVcGxvYWRTaXplPzogbnVtYmVyO1xuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBtZXRob2Qgd2hlbiBtaWdyYXRpbmcgb3RoZXIgcHJvdmlkZXJzIHRvIHRoZSBuZXcgdW5pZmllZCBDWCBidXR0b24uXG4gIG9uU3dpdGNoVG9BZ2VudDogKCkgPT4gdm9pZDtcbiAgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuICBpc0J1c2luZXNzSG91cnM6IChhcGlLZXk/OiBzdHJpbmcsIGFwaUVuZHBvaW50Pzogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUVBLElBQVksc0VBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EifQ==
|
|
@@ -12,6 +12,7 @@ declare enum CustomerServiceType {
|
|
|
12
12
|
gladly = "gladly",
|
|
13
13
|
richpanel = "richpanel",
|
|
14
14
|
zendesk = "zendesk",
|
|
15
|
+
eightByEight = "8x8",
|
|
15
16
|
unsupported = "unsupported",
|
|
16
17
|
}
|
|
17
18
|
declare enum CustomerServiceIntegrationMode {
|
|
@@ -21,4 +22,4 @@ declare enum CustomerServiceIntegrationMode {
|
|
|
21
22
|
}
|
|
22
23
|
//#endregion
|
|
23
24
|
export { CustomerServiceIntegrationMode, CustomerServiceType };
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXJTZXJ2aWNlLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jdXN0b21lclNlcnZpY2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21lclNlcnZpY2VQcm92aWRlciB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5leHBvcnQgZGVjbGFyZSBlbnVtIEN1c3RvbWVyU2VydmljZVR5cGUge1xuICAgIHNob3BpZnkgPSBcInNob3BpZnlcIixcbiAgICBnb3JnaWFzID0gXCJnb3JnaWFzXCIsXG4gICAga3VzdG9tZXIgPSBcImt1c3RvbWVyXCIsXG4gICAgZ3Jvb3ZlID0gXCJncm9vdmVcIixcbiAgICB0aWRpbyA9IFwidGlkaW9cIixcbiAgICB6b3dpZSA9IFwiem93aWVcIixcbiAgICByZWRvID0gXCJyZWRvXCIsXG4gICAgZ2xhZGx5ID0gXCJnbGFkbHlcIixcbiAgICByaWNocGFuZWwgPSBcInJpY2hwYW5lbFwiLFxuICAgIHplbmRlc2sgPSBcInplbmRlc2tcIixcbiAgICBlaWdodEJ5RWlnaHQgPSBcIjh4OFwiLFxuICAgIHVuc3VwcG9ydGVkID0gXCJ1bnN1cHBvcnRlZFwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSB7XG4gICAgbm9uZSA9IFwibm9uZVwiLFxuICAgIHNpbXBsZSA9IFwic2ltcGxlXCIsXG4gICAgZnVsbCA9IFwiZnVsbFwiXG59XG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uIHtcbiAgICBwcm92aWRlcjogQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI7XG4gICAgc3VwcG9ydGVkSW50ZWdyYXRpb25Nb2RlczogQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlW107XG4gICAgYWxsb3dGaWxlVXBsb2FkPzogYm9vbGVhbjtcbiAgICBtYXhmaWxlVXBsb2FkU2l6ZT86IG51bWJlcjtcbiAgICBvblN3aXRjaFRvQWdlbnQ6ICgpID0+IHZvaWQ7XG4gICAgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuICAgIGlzQnVzaW5lc3NIb3VyczogKGFwaUtleT86IHN0cmluZywgYXBpRW5kcG9pbnQ/OiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUNBLElBQVcsc0JBQXNCLENBQUMsSUFBSTtBQUN0QyxJQUFXLGlDQUFZLENBQUEsSUFBQSJ9
|
|
@@ -12,6 +12,7 @@ declare enum CustomerServiceType {
|
|
|
12
12
|
gladly = "gladly",
|
|
13
13
|
richpanel = "richpanel",
|
|
14
14
|
zendesk = "zendesk",
|
|
15
|
+
eightByEight = "8x8",
|
|
15
16
|
unsupported = "unsupported",
|
|
16
17
|
}
|
|
17
18
|
declare enum CustomerServiceIntegrationMode {
|
|
@@ -21,4 +22,4 @@ declare enum CustomerServiceIntegrationMode {
|
|
|
21
22
|
}
|
|
22
23
|
//#endregion
|
|
23
24
|
export { CustomerServiceIntegrationMode, CustomerServiceType };
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXJTZXJ2aWNlLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2N1c3RvbWVyU2VydmljZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmV4cG9ydCBkZWNsYXJlIGVudW0gQ3VzdG9tZXJTZXJ2aWNlVHlwZSB7XG4gICAgc2hvcGlmeSA9IFwic2hvcGlmeVwiLFxuICAgIGdvcmdpYXMgPSBcImdvcmdpYXNcIixcbiAgICBrdXN0b21lciA9IFwia3VzdG9tZXJcIixcbiAgICBncm9vdmUgPSBcImdyb292ZVwiLFxuICAgIHRpZGlvID0gXCJ0aWRpb1wiLFxuICAgIHpvd2llID0gXCJ6b3dpZVwiLFxuICAgIHJlZG8gPSBcInJlZG9cIixcbiAgICBnbGFkbHkgPSBcImdsYWRseVwiLFxuICAgIHJpY2hwYW5lbCA9IFwicmljaHBhbmVsXCIsXG4gICAgemVuZGVzayA9IFwiemVuZGVza1wiLFxuICAgIGVpZ2h0QnlFaWdodCA9IFwiOHg4XCIsXG4gICAgdW5zdXBwb3J0ZWQgPSBcInVuc3VwcG9ydGVkXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlIHtcbiAgICBub25lID0gXCJub25lXCIsXG4gICAgc2ltcGxlID0gXCJzaW1wbGVcIixcbiAgICBmdWxsID0gXCJmdWxsXCJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24ge1xuICAgIHByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlcjtcbiAgICBzdXBwb3J0ZWRJbnRlZ3JhdGlvbk1vZGVzOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGVbXTtcbiAgICBhbGxvd0ZpbGVVcGxvYWQ/OiBib29sZWFuO1xuICAgIG1heGZpbGVVcGxvYWRTaXplPzogbnVtYmVyO1xuICAgIG9uU3dpdGNoVG9BZ2VudDogKCkgPT4gdm9pZDtcbiAgICBpc0VuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gICAgaXNCdXNpbmVzc0hvdXJzOiAoYXBpS2V5Pzogc3RyaW5nLCBhcGlFbmRwb2ludD86IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxzQkFBc0IsQ0FBQyxJQUFJO0FBQ3RDLElBQVcsaUNBQVksQ0FBQSxJQUFBIn0=
|
|
@@ -10,10 +10,11 @@ let CustomerServiceType = /* @__PURE__ */ function(CustomerServiceType$1) {
|
|
|
10
10
|
CustomerServiceType$1["gladly"] = "gladly";
|
|
11
11
|
CustomerServiceType$1["richpanel"] = "richpanel";
|
|
12
12
|
CustomerServiceType$1["zendesk"] = "zendesk";
|
|
13
|
+
CustomerServiceType$1["eightByEight"] = "8x8";
|
|
13
14
|
CustomerServiceType$1["unsupported"] = "unsupported";
|
|
14
15
|
return CustomerServiceType$1;
|
|
15
16
|
}({});
|
|
16
17
|
|
|
17
18
|
//#endregion
|
|
18
19
|
export { CustomerServiceType };
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXJTZXJ2aWNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jdXN0b21lclNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgZW51bSBDdXN0b21lclNlcnZpY2VUeXBlIHtcbiAgc2hvcGlmeSA9ICdzaG9waWZ5JyxcbiAgZ29yZ2lhcyA9ICdnb3JnaWFzJyxcbiAga3VzdG9tZXIgPSAna3VzdG9tZXInLFxuICBncm9vdmUgPSAnZ3Jvb3ZlJyxcbiAgdGlkaW8gPSAndGlkaW8nLFxuICB6b3dpZSA9ICd6b3dpZScsXG4gIHJlZG8gPSAncmVkbycsXG4gIGdsYWRseSA9ICdnbGFkbHknLFxuICByaWNocGFuZWwgPSAncmljaHBhbmVsJyxcbiAgemVuZGVzayA9ICd6ZW5kZXNrJyxcbiAgZWlnaHRCeUVpZ2h0ID0gJzh4OCcsXG4gIHVuc3VwcG9ydGVkID0gJ3Vuc3VwcG9ydGVkJyxcbn1cbmV4cG9ydCBlbnVtIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSB7XG4gIG5vbmUgPSAnbm9uZScsXG4gIHNpbXBsZSA9ICdzaW1wbGUnLFxuICBmdWxsID0gJ2Z1bGwnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uIHtcbiAgcHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuICBzdXBwb3J0ZWRJbnRlZ3JhdGlvbk1vZGVzOiBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGVbXTtcbiAgYWxsb3dGaWxlVXBsb2FkPzogYm9vbGVhbjtcbiAgbWF4ZmlsZVVwbG9hZFNpemU/OiBudW1iZXI7XG4gIC8vIFRPRE86IFJlbW92ZSB0aGlzIG1ldGhvZCB3aGVuIG1pZ3JhdGluZyBvdGhlciBwcm92aWRlcnMgdG8gdGhlIG5ldyB1bmlmaWVkIENYIGJ1dHRvbi5cbiAgb25Td2l0Y2hUb0FnZW50OiAoKSA9PiB2b2lkO1xuICBpc0VuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gIGlzQnVzaW5lc3NIb3VyczogKGFwaUtleT86IHN0cmluZywgYXBpRW5kcG9pbnQ/OiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG4iXSwibWFwcGluZ3MiOiI7QUFFQSxJQUFZLHNFQUFMO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@envive-ai/react-hooks",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.13",
|
|
4
4
|
"description": "React hooks for connecting to Envive AI services.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"@envive-ai/analytics": "1.0.28",
|
|
43
43
|
"fuse.js": "^7.1.0",
|
|
44
44
|
"jotai": "^2.14.0",
|
|
45
|
-
"ua-parser-js": "^1.0.39",
|
|
46
45
|
"uuid": "^13.0.0"
|
|
47
46
|
},
|
|
48
47
|
"devDependencies": {
|
|
@@ -315,10 +314,6 @@
|
|
|
315
314
|
"import": "./dist/hooks/GraphQLConfig/index.js",
|
|
316
315
|
"require": "./dist/hooks/GraphQLConfig/index.cjs"
|
|
317
316
|
},
|
|
318
|
-
"./hooks/IdentifyUser": {
|
|
319
|
-
"import": "./dist/hooks/IdentifyUser/index.js",
|
|
320
|
-
"require": "./dist/hooks/IdentifyUser/index.cjs"
|
|
321
|
-
},
|
|
322
317
|
"./hooks/ImageResolver": {
|
|
323
318
|
"import": "./dist/hooks/ImageResolver/index.js",
|
|
324
319
|
"require": "./dist/hooks/ImageResolver/index.cjs"
|
|
@@ -475,35 +475,6 @@ class CommerceApiClient {
|
|
|
475
475
|
}
|
|
476
476
|
};
|
|
477
477
|
|
|
478
|
-
static identifyUser = async (
|
|
479
|
-
spiffyUserId: string,
|
|
480
|
-
merchantUserId: string,
|
|
481
|
-
uaDetails: ClientDetails,
|
|
482
|
-
): Promise<void> => {
|
|
483
|
-
try {
|
|
484
|
-
await CommerceApiClient.getInstance().defaultApi.v1AnalyticsIdentifyPost({
|
|
485
|
-
AnalyticsIdentifyRequest: {
|
|
486
|
-
user_id: spiffyUserId,
|
|
487
|
-
os_name: uaDetails.os,
|
|
488
|
-
os_version: uaDetails.osVersion,
|
|
489
|
-
platform: uaDetails.os,
|
|
490
|
-
device_id: uaDetails.deviceModel,
|
|
491
|
-
device_brand: uaDetails.deviceBrand,
|
|
492
|
-
device_manufacturer: uaDetails.deviceManufacturer,
|
|
493
|
-
device_model: uaDetails.deviceModel,
|
|
494
|
-
user_properties: {
|
|
495
|
-
cdp_user_id: merchantUserId,
|
|
496
|
-
browser: uaDetails.browser,
|
|
497
|
-
browser_version: uaDetails.browserVersion,
|
|
498
|
-
user_agent: uaDetails.userAgent,
|
|
499
|
-
},
|
|
500
|
-
},
|
|
501
|
-
});
|
|
502
|
-
} catch (err) {
|
|
503
|
-
Logger.logError('Failed to identify user', err);
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
|
|
507
478
|
private static mapContextSourceToV1OrgConfigGetSource = (
|
|
508
479
|
source: ContextSourceEnum | undefined,
|
|
509
480
|
): V1OrgConfigGetSourceEnum | undefined => {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
isGA4EcommerceEvent,
|
|
6
6
|
isLegacyUAEcommerceEvent,
|
|
7
7
|
} from 'src/application/models';
|
|
8
|
-
import { SpiffyMetricsEventName } from 'src/
|
|
8
|
+
import { SpiffyMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
|
|
9
9
|
|
|
10
10
|
declare global {
|
|
11
11
|
interface Window {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UserEventCategory } from '@spiffy-ai/commerce-api-client/dist/models/UserEventCategory';
|
|
2
2
|
import { atom } from 'jotai';
|
|
3
|
-
import { SpiffyMetricsEventName } from 'src/
|
|
3
|
+
import { SpiffyMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
|
|
4
4
|
import {
|
|
5
5
|
ChatElementDisplayLocationV3,
|
|
6
6
|
FormSubmittedAttributes,
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
userQueryAtom,
|
|
8
8
|
} from 'src/atoms/chat';
|
|
9
9
|
import { UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
10
|
-
import { SpiffyMetricsEventName } from 'src/
|
|
10
|
+
import { SpiffyMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
|
|
11
11
|
import { amplitudeTrackEventAtom } from 'src/atoms/amplitude/amplitudeTrackEventAtom';
|
|
12
12
|
import { queueUserEventAtom } from './messageQueue';
|
|
13
13
|
|
|
@@ -133,6 +133,9 @@ export const mockV3FrontendConfig: FrontendConfigV3 = {
|
|
|
133
133
|
welcomeMessageText:
|
|
134
134
|
'Your personal shopper trained on the collective knowledge of thousands of real experts!',
|
|
135
135
|
chatFooterTextFieldPlaceholderText: 'Ask me anything...',
|
|
136
|
+
partialViewConfig: {
|
|
137
|
+
disabled: true,
|
|
138
|
+
},
|
|
136
139
|
},
|
|
137
140
|
customerServiceIntegration: {
|
|
138
141
|
provider: CustomerServiceType.unsupported,
|
|
@@ -22,10 +22,13 @@ import {
|
|
|
22
22
|
suggestionsAtom,
|
|
23
23
|
} from 'src/atoms/chat/chatState';
|
|
24
24
|
import { useMessageInterceptor } from 'src/interceptors/useMessageInterceptor';
|
|
25
|
-
import {
|
|
25
|
+
import { useAmplitude } from 'src/contexts/amplitudeContext';
|
|
26
|
+
import {
|
|
27
|
+
EnviveMetricsEventName,
|
|
28
|
+
SpiffyMetricsEventName,
|
|
29
|
+
} from 'src/services/amplitudeService/amplitudeService';
|
|
26
30
|
import { useFeatureFlagService } from 'src/contexts/featureFlagServiceContext';
|
|
27
31
|
import { UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
28
|
-
import { EnviveMetricsEventName } from 'src/services/amplitudeService/amplitudeService';
|
|
29
32
|
import { analyticsContextAtom } from 'src/atoms/app/variant';
|
|
30
33
|
|
|
31
34
|
import { StatusCodeError } from './statusCodeError';
|