@envive-ai/react-hooks 0.3.17 → 0.3.19
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 +14 -13
- package/dist/application/commerce-api.js +14 -13
- package/dist/application/logging/logger.cjs +16 -10
- package/dist/application/logging/logger.js +16 -10
- package/dist/application/models/guards/api/isApiFormResponse.cjs +9 -8
- package/dist/application/models/guards/api/isApiFormResponse.js +9 -8
- package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +6 -5
- package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +6 -5
- package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +19 -18
- package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +19 -18
- package/dist/application/models/guards/api/isApiOrgConfigResults.cjs +27 -26
- package/dist/application/models/guards/api/isApiOrgConfigResults.js +27 -26
- package/dist/application/models/guards/api/isApiOrganizationConfig.cjs +23 -22
- package/dist/application/models/guards/api/isApiOrganizationConfig.js +23 -22
- package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +12 -11
- package/dist/application/models/guards/api/isApiProductResponseAttributes.js +12 -11
- package/dist/application/models/guards/api/isApiResponse.cjs +7 -6
- package/dist/application/models/guards/api/isApiResponse.js +7 -6
- package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.cjs +5 -4
- package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.js +5 -4
- package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +15 -14
- package/dist/application/models/validators/validateGraphQLFrontendConfig.js +15 -14
- package/dist/application/utils/analyticsUtils.cjs +4 -3
- package/dist/application/utils/analyticsUtils.js +4 -3
- package/dist/application/utils/nextMessageRequestToApiRequest.cjs +3 -1
- package/dist/application/utils/nextMessageRequestToApiRequest.js +3 -1
- package/dist/application/utils/widgetTextRequestToApiRequest.cjs +2 -2
- package/dist/application/utils/widgetTextRequestToApiRequest.js +2 -2
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/variant.cjs +3 -2
- package/dist/atoms/app/variant.js +3 -2
- package/dist/atoms/chat/chatState.d.cts +18 -18
- package/dist/atoms/chat/chatState.d.ts +18 -18
- 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/index.d.ts +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.cjs +3 -2
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.js +3 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +2 -2
- package/dist/atoms/chat/replies.d.ts +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.cjs +5 -4
- package/dist/atoms/envive/enviveConfig.d.cts +13 -13
- package/dist/atoms/envive/enviveConfig.d.ts +13 -13
- package/dist/atoms/envive/enviveConfig.js +5 -4
- 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/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +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/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/amplitudeContext/amplitudeContext.cjs +4 -3
- package/dist/contexts/amplitudeContext/amplitudeContext.js +3 -2
- package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +26 -15
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +2 -4
- package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +2 -4
- package/dist/contexts/enviveConfigContext/enviveConfigContext.js +29 -16
- package/dist/contexts/enviveConfigContext/index.cjs +2 -1
- package/dist/contexts/enviveConfigContext/index.d.cts +2 -1
- package/dist/contexts/enviveConfigContext/index.d.ts +2 -1
- package/dist/contexts/enviveConfigContext/index.js +2 -1
- package/dist/contexts/enviveConfigContext/useEnviveConfig.cjs +12 -0
- package/dist/contexts/enviveConfigContext/useEnviveConfig.d.cts +7 -0
- package/dist/contexts/enviveConfigContext/useEnviveConfig.d.ts +7 -0
- package/dist/contexts/enviveConfigContext/useEnviveConfig.js +11 -0
- package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +7 -5
- package/dist/contexts/enviveContext/WindowChatToggleBinder.js +6 -4
- package/dist/contexts/enviveContext/enviveContext.cjs +34 -39
- package/dist/contexts/enviveContext/enviveContext.js +35 -40
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +7 -6
- package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +7 -6
- package/dist/contexts/graphqlContext/graphqlContext.cjs +8 -7
- package/dist/contexts/graphqlContext/graphqlContext.js +8 -7
- package/dist/contexts/hardcopyContext/hardcopyContext.cjs +9 -8
- package/dist/contexts/hardcopyContext/hardcopyContext.js +9 -8
- package/dist/contexts/localStorageContext/localStorageContext.cjs +4 -3
- package/dist/contexts/localStorageContext/localStorageContext.js +4 -3
- package/dist/contexts/pageContext/pageContext.cjs +3 -2
- package/dist/contexts/pageContext/pageContext.js +3 -2
- package/dist/contexts/salesAgentContext/chatAPI.cjs +3 -2
- package/dist/contexts/salesAgentContext/chatAPI.js +3 -2
- package/dist/contexts/salesAgentContext/salesAgentContext.cjs +4 -3
- package/dist/contexts/salesAgentContext/salesAgentContext.js +4 -3
- package/dist/contexts/salesAgentContext/salesAgentService.cjs +3 -2
- package/dist/contexts/salesAgentContext/salesAgentService.js +3 -2
- package/dist/contexts/searchContext/searchContext.cjs +8 -6
- package/dist/contexts/searchContext/searchContext.js +7 -5
- package/dist/contexts/sessionStorageContext/sessionStorageContext.cjs +3 -2
- package/dist/contexts/sessionStorageContext/sessionStorageContext.js +3 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.d.cts +1 -1
- package/dist/contexts/typesV3.d.ts +1 -1
- package/dist/contexts/uiConfigContext/index.cjs +0 -1
- package/dist/contexts/uiConfigContext/index.d.cts +2 -2
- package/dist/contexts/uiConfigContext/index.d.ts +2 -2
- package/dist/contexts/uiConfigContext/index.js +2 -2
- package/dist/contexts/uiConfigContext/uiConfigContext.cjs +13 -30
- package/dist/contexts/uiConfigContext/uiConfigContext.d.cts +5 -9
- package/dist/contexts/uiConfigContext/uiConfigContext.d.ts +5 -9
- package/dist/contexts/uiConfigContext/uiConfigContext.js +14 -29
- package/dist/contexts/userIdentityContext/userIdentityContext.cjs +7 -7
- package/dist/contexts/userIdentityContext/userIdentityContext.js +7 -7
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +4 -3
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +4 -3
- package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.cjs +4 -3
- package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +4 -3
- package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.cjs +2 -2
- package/dist/hooks/WidgetInteraction/useWidgetInteraction.js +2 -2
- package/dist/hooks/WidgetInteraction/utils.cjs +2 -1
- package/dist/hooks/WidgetInteraction/utils.js +2 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/amplitudeService/amplitudeService.cjs +8 -7
- package/dist/services/amplitudeService/amplitudeService.js +8 -7
- package/dist/services/ga4ProjectionService/ga4ProjectionService.cjs +3 -2
- package/dist/services/ga4ProjectionService/ga4ProjectionService.js +3 -2
- package/dist/services/userIdentityService/userIdentityService.cjs +8 -7
- package/dist/services/userIdentityService/userIdentityService.js +8 -7
- package/package.json +2 -2
- package/src/application/commerce-api.ts +14 -12
- package/src/application/logging/logger.ts +33 -8
- package/src/application/models/guards/api/isApiFormResponse.ts +9 -7
- package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +6 -4
- package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +19 -17
- package/src/application/models/guards/api/isApiOrgConfigResults.ts +40 -48
- package/src/application/models/guards/api/isApiOrganizationConfig.ts +25 -38
- package/src/application/models/guards/api/isApiProductResponseAttributes.ts +12 -10
- package/src/application/models/guards/api/isApiResponse.ts +7 -5
- package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +5 -3
- package/src/application/models/validators/validateGraphQLFrontendConfig.ts +15 -13
- package/src/application/utils/analyticsUtils.ts +4 -4
- package/src/application/utils/nextMessageRequestToApiRequest.ts +2 -0
- package/src/application/utils/widgetTextRequestToApiRequest.ts +1 -2
- package/src/atoms/app/variant.ts +3 -1
- package/src/atoms/chat/performanceMetrics.ts +3 -1
- package/src/atoms/envive/enviveConfig.ts +5 -3
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +1 -1
- package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +4 -3
- package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +50 -35
- package/src/contexts/enviveConfigContext/index.ts +1 -0
- package/src/contexts/enviveConfigContext/useEnviveConfig.ts +9 -0
- package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +6 -4
- package/src/contexts/enviveContext/enviveContext.tsx +40 -45
- package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +11 -12
- package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +4 -4
- package/src/contexts/graphqlContext/graphqlContext.tsx +8 -6
- package/src/contexts/hardcopyContext/hardcopyContext.tsx +9 -7
- package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +6 -6
- package/src/contexts/localStorageContext/localStorageContext.tsx +4 -2
- package/src/contexts/pageContext/__tests__/pageContext.test.tsx +5 -5
- package/src/contexts/pageContext/pageContext.tsx +3 -1
- package/src/contexts/salesAgentContext/chatAPI.ts +5 -5
- package/src/contexts/salesAgentContext/salesAgentContext.tsx +4 -2
- package/src/contexts/salesAgentContext/salesAgentService.ts +4 -2
- package/src/contexts/searchContext/__tests__/searchContext.test.tsx +15 -12
- package/src/contexts/searchContext/searchContext.tsx +6 -4
- package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +3 -1
- package/src/contexts/uiConfigContext/__tests__/uiConfigContext.test.tsx +7 -32
- package/src/contexts/uiConfigContext/uiConfigContext.tsx +17 -29
- package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +5 -5
- package/src/contexts/userIdentityContext/userIdentityContext.tsx +7 -6
- package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +7 -7
- package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -2
- package/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.ts +4 -2
- package/src/hooks/Search/__tests__/useSearch.test.tsx +14 -8
- package/src/hooks/WidgetInteraction/useWidgetInteraction.ts +3 -2
- package/src/hooks/WidgetInteraction/utils.ts +3 -1
- package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +3 -3
- package/src/services/amplitudeService/amplitudeService.ts +8 -6
- package/src/services/ga4ProjectionService/ga4ProjectionService.ts +3 -1
- package/src/services/userIdentityService/userIdentityService.ts +8 -8
|
@@ -2,6 +2,7 @@ const require_logger = require('../../application/logging/logger.cjs');
|
|
|
2
2
|
const require_ga4EventSchema = require('./ga4EventSchema.cjs');
|
|
3
3
|
|
|
4
4
|
//#region src/services/ga4ProjectionService/ga4ProjectionService.ts
|
|
5
|
+
const logger = new require_logger.default("ga4ProjectionService");
|
|
5
6
|
const filterToSchema = (eventProps, allowedFields) => {
|
|
6
7
|
const result = {};
|
|
7
8
|
for (const field of allowedFields) if (field in eventProps) result[field] = eventProps[field];
|
|
@@ -62,10 +63,10 @@ const projectToGA4 = (eventName, eventProps) => {
|
|
|
62
63
|
...truncatedParams
|
|
63
64
|
});
|
|
64
65
|
} catch (err) {
|
|
65
|
-
|
|
66
|
+
logger.logError("Error projecting event to GA4", err, { eventName });
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
//#endregion
|
|
70
71
|
exports.projectToGA4 = projectToGA4;
|
|
71
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0UHJvamVjdGlvblNlcnZpY2UuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIkdBNF9FVkVOVF9TQ0hFTUEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4uL2FtcGxpdHVkZVNlcnZpY2UvZXZlbnROYW1lcyc7XG5pbXBvcnQgeyBHQTRQcm9qZWN0ZWRFdmVudENvbmZpZywgR0E0X0VWRU5UX1NDSEVNQSB9IGZyb20gJy4vZ2E0RXZlbnRTY2hlbWEnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdnYTRQcm9qZWN0aW9uU2VydmljZScpO1xuXG5jb25zdCBmaWx0ZXJUb1NjaGVtYSA9IChcbiAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFsbG93ZWRGaWVsZHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgZmllbGQgb2YgYWxsb3dlZEZpZWxkcykge1xuICAgIGlmIChmaWVsZCBpbiBldmVudFByb3BzKSB7XG4gICAgICByZXN1bHRbZmllbGRdID0gZXZlbnRQcm9wc1tmaWVsZF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBcImNvbnRleHQucGFnZV90eXBlXCIg4oaSIFwiY29udGV4dF9wYWdlX3R5cGVcIlxuY29uc3QgZmxhdHRlbkRvdEtleXMgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmVzdWx0W2tleS5yZXBsYWNlKC9cXC4vZywgJ18nKV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gT21pdCBjb250ZXh0LnBhZ2VfaWQgZm9yIG5vbi1wZHAvcGxwIHBhZ2UgdHlwZXMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZvciBjb250ZXh0LnBhZ2VfaWQgaXM6XG4vLyBQRFA6IHByb2R1Y3RfaWRcbi8vIFBMUDogcGxwX2lkXG4vLyBTZWFyY2g6IHNlYXJjaCBxdWVyeVxuLy8gT3RoZXI6IHBhZ2UgdXJsXG4vLyBXZSB3YW50IHRvIG9taXQgYWxsIGJ1dCBwZHAgYW5kIHBscCBwYWdlIHR5cGVzIHRvIHByb3ZpZGUgYSBjbGVhciwgY29uc2lzdGVudCBpbnRlcmZhY2UgZm9yIG1lcmNoYW50cy5cbmNvbnN0IHNhbml0aXplUGFnZUlkID0gKGZpbHRlcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcGFnZVR5cGUgPSBmaWx0ZXJlZFsnY29udGV4dC5wYWdlX3R5cGUnXTtcbiAgaWYgKHBhZ2VUeXBlID09PSAncGRwJyB8fCBwYWdlVHlwZSA9PT0gJ3BscCcpIHtcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cbiAgY29uc3QgcmVzdCA9IHsgLi4uZmlsdGVyZWQgfTtcbiAgZGVsZXRlIHJlc3RbJ2NvbnRleHQucGFnZV9pZCddO1xuICByZXR1cm4gcmVzdDtcbn07XG5cbi8vIEV4dHJhY3Qgd2hpdGVsaXN0ZWQgc3ViLWZpZWxkcyBmcm9tIHRyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uX2RhdGFcbmNvbnN0IHByb2plY3RXaWRnZXRJbnRlcmFjdGlvbkRhdGEgPSAoXG4gIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWc6IEdBNFByb2plY3RlZEV2ZW50Q29uZmlnLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBpZiAoIWNvbmZpZy53aWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9ucykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aW9uID0gZXZlbnRQcm9wc1sndHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb24nXTtcbiAgaWYgKHR5cGVvZiBpbnRlcmFjdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBwcm9qZWN0aW9uTWFwID0gY29uZmlnLndpZGdldEludGVyYWN0aW9uRGF0YVByb2plY3Rpb25zW2ludGVyYWN0aW9uXTtcbiAgaWYgKCFwcm9qZWN0aW9uTWFwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25EYXRhID0gZXZlbnRQcm9wc1sndHJpZ2dlci53aWRnZXRfaW50ZXJhY3Rpb25fZGF0YSddO1xuICBpZiAoXG4gICAgaW50ZXJhY3Rpb25EYXRhID09PSBudWxsIHx8XG4gICAgaW50ZXJhY3Rpb25EYXRhID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaW50ZXJhY3Rpb25EYXRhICE9PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBkYXRhID0gaW50ZXJhY3Rpb25EYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2dhS2V5LCBzb3VyY2VGaWVsZF0gb2YgT2JqZWN0LmVudHJpZXMocHJvamVjdGlvbk1hcCkpIHtcbiAgICBpZiAoc291cmNlRmllbGQgaW4gZGF0YSkge1xuICAgICAgcmVzdWx0W2dhS2V5XSA9IGRhdGFbc291cmNlRmllbGRdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAodmFsdWU6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuIGAke3ZhbHVlLnN1YnN0cmluZygwLCA5Nyl9Li4uYDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCB0cnVuY2F0ZVZhbHVlcyA9IChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICByZXN1bHRba2V5XSA9IHRydW5jYXRlU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgcHVzaFRvRGF0YUxheWVyID0gKGdhRXZlbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKGdhRXZlbnQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvamVjdFRvR0E0ID0gKFxuICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNjaGVtYUVudHJ5ID0gR0E0X0VWRU5UX1NDSEVNQVtldmVudE5hbWVdO1xuXG4gICAgaWYgKHNjaGVtYUVudHJ5LmdhRXZlbnROYW1lID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gc2NoZW1hRW50cnk7XG4gICAgY29uc3QgcHJvcHMgPSBldmVudFByb3BzID8/IHt9O1xuXG4gICAgbGV0IGZpbHRlcmVkID0gZmlsdGVyVG9TY2hlbWEocHJvcHMsIGNvbmZpZy5hbGxvd2VkRmllbGRzKTtcbiAgICBmaWx0ZXJlZCA9IHNhbml0aXplUGFnZUlkKGZpbHRlcmVkKTtcblxuICAgIGNvbnN0IGludGVyYWN0aW9uRmllbGRzID0gcHJvamVjdFdpZGdldEludGVyYWN0aW9uRGF0YShwcm9wcywgY29uZmlnKTtcblxuICAgIGNvbnN0IGZsYXRQYXJhbXMgPSB7XG4gICAgICAuLi5mbGF0dGVuRG90S2V5cyhmaWx0ZXJlZCksXG4gICAgICAuLi5pbnRlcmFjdGlvbkZpZWxkcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJ1bmNhdGVkUGFyYW1zID0gdHJ1bmNhdGVWYWx1ZXMoZmxhdFBhcmFtcyk7XG5cbiAgICBwdXNoVG9EYXRhTGF5ZXIoe1xuICAgICAgZXZlbnQ6IGNvbmZpZy5nYUV2ZW50TmFtZSxcbiAgICAgIC4uLnRydW5jYXRlZFBhcmFtcyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciBwcm9qZWN0aW5nIGV2ZW50IHRvIEdBNCcsIGVyciwge1xuICAgICAgZXZlbnROYW1lLFxuICAgIH0pO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBSUEsTUFBTSxTQUFTLElBQUlBLHVCQUFPLHVCQUF1QjtBQUVqRCxNQUFNLGtCQUNKLFlBQ0Esa0JBQzRCO0NBQzVCLE1BQU1DLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLFNBQVMsY0FDbEIsS0FBSSxTQUFTLFdBQ1gsUUFBTyxTQUFTLFdBQVc7QUFHL0IsUUFBTzs7QUFJVCxNQUFNLGtCQUFrQixRQUEwRDtDQUNoRixNQUFNQSxTQUFrQyxFQUFFO0FBQzFDLE1BQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsSUFBSSxDQUM1QyxRQUFPLElBQUksUUFBUSxPQUFPLElBQUksSUFBSTtBQUVwQyxRQUFPOztBQVNULE1BQU0sa0JBQWtCLGFBQStEO0NBQ3JGLE1BQU0sV0FBVyxTQUFTO0FBQzFCLEtBQUksYUFBYSxTQUFTLGFBQWEsTUFDckMsUUFBTztDQUVULE1BQU0sT0FBTyxFQUFFLEdBQUcsVUFBVTtBQUM1QixRQUFPLEtBQUs7QUFDWixRQUFPOztBQUlULE1BQU0sZ0NBQ0osWUFDQSxXQUM0QjtBQUM1QixLQUFJLENBQUMsT0FBTyxpQ0FDVixRQUFPLEVBQUU7Q0FHWCxNQUFNLGNBQWMsV0FBVztBQUMvQixLQUFJLE9BQU8sZ0JBQWdCLFNBQ3pCLFFBQU8sRUFBRTtDQUdYLE1BQU0sZ0JBQWdCLE9BQU8saUNBQWlDO0FBQzlELEtBQUksQ0FBQyxjQUNILFFBQU8sRUFBRTtDQUdYLE1BQU0sa0JBQWtCLFdBQVc7QUFDbkMsS0FDRSxvQkFBb0IsUUFDcEIsb0JBQW9CLFVBQ3BCLE9BQU8sb0JBQW9CLFNBRTNCLFFBQU8sRUFBRTtDQUdYLE1BQU0sT0FBTztDQUNiLE1BQU1BLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLENBQUMsT0FBTyxnQkFBZ0IsT0FBTyxRQUFRLGNBQWMsQ0FDOUQsS0FBSSxlQUFlLEtBQ2pCLFFBQU8sU0FBUyxLQUFLO0FBR3pCLFFBQU87O0FBR1QsTUFBTSxrQkFBa0IsVUFBNEI7QUFDbEQsS0FBSSxPQUFPLFVBQVUsWUFBWSxNQUFNLFNBQVMsSUFDOUMsUUFBTyxHQUFHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUVuQyxRQUFPOztBQUdULE1BQU0sa0JBQWtCLFFBQTBEO0NBQ2hGLE1BQU1BLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxJQUFJLENBQzVDLFFBQU8sT0FBTyxlQUFlLE1BQU07QUFFckMsUUFBTzs7QUFHVCxNQUFNLG1CQUFtQixZQUEyQztBQUNsRSxLQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sVUFDMUMsUUFBTyxVQUFVLEtBQUssUUFBUTs7QUFJbEMsTUFBYSxnQkFDWCxXQUNBLGVBQ1M7QUFDVCxLQUFJO0VBQ0YsTUFBTSxjQUFjQyx3Q0FBaUI7QUFFckMsTUFBSSxZQUFZLGdCQUFnQixLQUM5QjtFQUdGLE1BQU0sU0FBUztFQUNmLE1BQU0sUUFBUSxjQUFjLEVBQUU7RUFFOUIsSUFBSSxXQUFXLGVBQWUsT0FBTyxPQUFPLGNBQWM7QUFDMUQsYUFBVyxlQUFlLFNBQVM7RUFFbkMsTUFBTSxvQkFBb0IsNkJBQTZCLE9BQU8sT0FBTztFQU9yRSxNQUFNLGtCQUFrQixlQUxMO0dBQ2pCLEdBQUcsZUFBZSxTQUFTO0dBQzNCLEdBQUc7R0FDSixDQUVpRDtBQUVsRCxrQkFBZ0I7R0FDZCxPQUFPLE9BQU87R0FDZCxHQUFHO0dBQ0osQ0FBQztVQUNLLEtBQUs7QUFDWixTQUFPLFNBQVMsaUNBQWlDLEtBQUssRUFDcEQsV0FDRCxDQUFDIn0=
|
|
@@ -2,6 +2,7 @@ import logger_default from "../../application/logging/logger.js";
|
|
|
2
2
|
import { GA4_EVENT_SCHEMA } from "./ga4EventSchema.js";
|
|
3
3
|
|
|
4
4
|
//#region src/services/ga4ProjectionService/ga4ProjectionService.ts
|
|
5
|
+
const logger = new logger_default("ga4ProjectionService");
|
|
5
6
|
const filterToSchema = (eventProps, allowedFields) => {
|
|
6
7
|
const result = {};
|
|
7
8
|
for (const field of allowedFields) if (field in eventProps) result[field] = eventProps[field];
|
|
@@ -62,10 +63,10 @@ const projectToGA4 = (eventName, eventProps) => {
|
|
|
62
63
|
...truncatedParams
|
|
63
64
|
});
|
|
64
65
|
} catch (err) {
|
|
65
|
-
|
|
66
|
+
logger.logError("Error projecting event to GA4", err, { eventName });
|
|
66
67
|
}
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
//#endregion
|
|
70
71
|
export { projectToGA4 };
|
|
71
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2E0UHJvamVjdGlvblNlcnZpY2UuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2dhNFByb2plY3Rpb25TZXJ2aWNlL2dhNFByb2plY3Rpb25TZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICcuLi9hbXBsaXR1ZGVTZXJ2aWNlL2V2ZW50TmFtZXMnO1xuaW1wb3J0IHsgR0E0UHJvamVjdGVkRXZlbnRDb25maWcsIEdBNF9FVkVOVF9TQ0hFTUEgfSBmcm9tICcuL2dhNEV2ZW50U2NoZW1hJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignZ2E0UHJvamVjdGlvblNlcnZpY2UnKTtcblxuY29uc3QgZmlsdGVyVG9TY2hlbWEgPSAoXG4gIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhbGxvd2VkRmllbGRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFsbG93ZWRGaWVsZHMpIHtcbiAgICBpZiAoZmllbGQgaW4gZXZlbnRQcm9wcykge1xuICAgICAgcmVzdWx0W2ZpZWxkXSA9IGV2ZW50UHJvcHNbZmllbGRdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gXCJjb250ZXh0LnBhZ2VfdHlwZVwiIOKGkiBcImNvbnRleHRfcGFnZV90eXBlXCJcbmNvbnN0IGZsYXR0ZW5Eb3RLZXlzID0gKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIHJlc3VsdFtrZXkucmVwbGFjZSgvXFwuL2csICdfJyldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIE9taXQgY29udGV4dC5wYWdlX2lkIGZvciBub24tcGRwL3BscCBwYWdlIHR5cGVzLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBmb3IgY29udGV4dC5wYWdlX2lkIGlzOlxuLy8gUERQOiBwcm9kdWN0X2lkXG4vLyBQTFA6IHBscF9pZFxuLy8gU2VhcmNoOiBzZWFyY2ggcXVlcnlcbi8vIE90aGVyOiBwYWdlIHVybFxuLy8gV2Ugd2FudCB0byBvbWl0IGFsbCBidXQgcGRwIGFuZCBwbHAgcGFnZSB0eXBlcyB0byBwcm92aWRlIGEgY2xlYXIsIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGZvciBtZXJjaGFudHMuXG5jb25zdCBzYW5pdGl6ZVBhZ2VJZCA9IChmaWx0ZXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IHBhZ2VUeXBlID0gZmlsdGVyZWRbJ2NvbnRleHQucGFnZV90eXBlJ107XG4gIGlmIChwYWdlVHlwZSA9PT0gJ3BkcCcgfHwgcGFnZVR5cGUgPT09ICdwbHAnKSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB7IC4uLmZpbHRlcmVkIH07XG4gIGRlbGV0ZSByZXN0Wydjb250ZXh0LnBhZ2VfaWQnXTtcbiAgcmV0dXJuIHJlc3Q7XG59O1xuXG4vLyBFeHRyYWN0IHdoaXRlbGlzdGVkIHN1Yi1maWVsZHMgZnJvbSB0cmlnZ2VyLndpZGdldF9pbnRlcmFjdGlvbl9kYXRhXG5jb25zdCBwcm9qZWN0V2lkZ2V0SW50ZXJhY3Rpb25EYXRhID0gKFxuICBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnOiBHQTRQcm9qZWN0ZWRFdmVudENvbmZpZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYgKCFjb25maWcud2lkZ2V0SW50ZXJhY3Rpb25EYXRhUHJvamVjdGlvbnMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBpbnRlcmFjdGlvbiA9IGV2ZW50UHJvcHNbJ3RyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uJ107XG4gIGlmICh0eXBlb2YgaW50ZXJhY3Rpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcHJvamVjdGlvbk1hcCA9IGNvbmZpZy53aWRnZXRJbnRlcmFjdGlvbkRhdGFQcm9qZWN0aW9uc1tpbnRlcmFjdGlvbl07XG4gIGlmICghcHJvamVjdGlvbk1hcCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGludGVyYWN0aW9uRGF0YSA9IGV2ZW50UHJvcHNbJ3RyaWdnZXIud2lkZ2V0X2ludGVyYWN0aW9uX2RhdGEnXTtcbiAgaWYgKFxuICAgIGludGVyYWN0aW9uRGF0YSA9PT0gbnVsbCB8fFxuICAgIGludGVyYWN0aW9uRGF0YSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGludGVyYWN0aW9uRGF0YSAhPT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGludGVyYWN0aW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtnYUtleSwgc291cmNlRmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHByb2plY3Rpb25NYXApKSB7XG4gICAgaWYgKHNvdXJjZUZpZWxkIGluIGRhdGEpIHtcbiAgICAgIHJlc3VsdFtnYUtleV0gPSBkYXRhW3NvdXJjZUZpZWxkXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHRydW5jYXRlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgOTcpfS4uLmA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuY29uc3QgdHJ1bmNhdGVWYWx1ZXMgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmVzdWx0W2tleV0gPSB0cnVuY2F0ZVN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHB1c2hUb0RhdGFMYXllciA9IChnYUV2ZW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChnYUV2ZW50KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHByb2plY3RUb0dBNCA9IChcbiAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzY2hlbWFFbnRyeSA9IEdBNF9FVkVOVF9TQ0hFTUFbZXZlbnROYW1lXTtcblxuICAgIGlmIChzY2hlbWFFbnRyeS5nYUV2ZW50TmFtZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHNjaGVtYUVudHJ5O1xuICAgIGNvbnN0IHByb3BzID0gZXZlbnRQcm9wcyA/PyB7fTtcblxuICAgIGxldCBmaWx0ZXJlZCA9IGZpbHRlclRvU2NoZW1hKHByb3BzLCBjb25maWcuYWxsb3dlZEZpZWxkcyk7XG4gICAgZmlsdGVyZWQgPSBzYW5pdGl6ZVBhZ2VJZChmaWx0ZXJlZCk7XG5cbiAgICBjb25zdCBpbnRlcmFjdGlvbkZpZWxkcyA9IHByb2plY3RXaWRnZXRJbnRlcmFjdGlvbkRhdGEocHJvcHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBmbGF0UGFyYW1zID0ge1xuICAgICAgLi4uZmxhdHRlbkRvdEtleXMoZmlsdGVyZWQpLFxuICAgICAgLi4uaW50ZXJhY3Rpb25GaWVsZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRydW5jYXRlZFBhcmFtcyA9IHRydW5jYXRlVmFsdWVzKGZsYXRQYXJhbXMpO1xuXG4gICAgcHVzaFRvRGF0YUxheWVyKHtcbiAgICAgIGV2ZW50OiBjb25maWcuZ2FFdmVudE5hbWUsXG4gICAgICAuLi50cnVuY2F0ZWRQYXJhbXMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgcHJvamVjdGluZyBldmVudCB0byBHQTQnLCBlcnIsIHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICB9KTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUlBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLHVCQUF1QjtBQUVqRCxNQUFNLGtCQUNKLFlBQ0Esa0JBQzRCO0NBQzVCLE1BQU1DLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLFNBQVMsY0FDbEIsS0FBSSxTQUFTLFdBQ1gsUUFBTyxTQUFTLFdBQVc7QUFHL0IsUUFBTzs7QUFJVCxNQUFNLGtCQUFrQixRQUEwRDtDQUNoRixNQUFNQSxTQUFrQyxFQUFFO0FBQzFDLE1BQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsSUFBSSxDQUM1QyxRQUFPLElBQUksUUFBUSxPQUFPLElBQUksSUFBSTtBQUVwQyxRQUFPOztBQVNULE1BQU0sa0JBQWtCLGFBQStEO0NBQ3JGLE1BQU0sV0FBVyxTQUFTO0FBQzFCLEtBQUksYUFBYSxTQUFTLGFBQWEsTUFDckMsUUFBTztDQUVULE1BQU0sT0FBTyxFQUFFLEdBQUcsVUFBVTtBQUM1QixRQUFPLEtBQUs7QUFDWixRQUFPOztBQUlULE1BQU0sZ0NBQ0osWUFDQSxXQUM0QjtBQUM1QixLQUFJLENBQUMsT0FBTyxpQ0FDVixRQUFPLEVBQUU7Q0FHWCxNQUFNLGNBQWMsV0FBVztBQUMvQixLQUFJLE9BQU8sZ0JBQWdCLFNBQ3pCLFFBQU8sRUFBRTtDQUdYLE1BQU0sZ0JBQWdCLE9BQU8saUNBQWlDO0FBQzlELEtBQUksQ0FBQyxjQUNILFFBQU8sRUFBRTtDQUdYLE1BQU0sa0JBQWtCLFdBQVc7QUFDbkMsS0FDRSxvQkFBb0IsUUFDcEIsb0JBQW9CLFVBQ3BCLE9BQU8sb0JBQW9CLFNBRTNCLFFBQU8sRUFBRTtDQUdYLE1BQU0sT0FBTztDQUNiLE1BQU1BLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLENBQUMsT0FBTyxnQkFBZ0IsT0FBTyxRQUFRLGNBQWMsQ0FDOUQsS0FBSSxlQUFlLEtBQ2pCLFFBQU8sU0FBUyxLQUFLO0FBR3pCLFFBQU87O0FBR1QsTUFBTSxrQkFBa0IsVUFBNEI7QUFDbEQsS0FBSSxPQUFPLFVBQVUsWUFBWSxNQUFNLFNBQVMsSUFDOUMsUUFBTyxHQUFHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUVuQyxRQUFPOztBQUdULE1BQU0sa0JBQWtCLFFBQTBEO0NBQ2hGLE1BQU1BLFNBQWtDLEVBQUU7QUFDMUMsTUFBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxJQUFJLENBQzVDLFFBQU8sT0FBTyxlQUFlLE1BQU07QUFFckMsUUFBTzs7QUFHVCxNQUFNLG1CQUFtQixZQUEyQztBQUNsRSxLQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sVUFDMUMsUUFBTyxVQUFVLEtBQUssUUFBUTs7QUFJbEMsTUFBYSxnQkFDWCxXQUNBLGVBQ1M7QUFDVCxLQUFJO0VBQ0YsTUFBTSxjQUFjLGlCQUFpQjtBQUVyQyxNQUFJLFlBQVksZ0JBQWdCLEtBQzlCO0VBR0YsTUFBTSxTQUFTO0VBQ2YsTUFBTSxRQUFRLGNBQWMsRUFBRTtFQUU5QixJQUFJLFdBQVcsZUFBZSxPQUFPLE9BQU8sY0FBYztBQUMxRCxhQUFXLGVBQWUsU0FBUztFQUVuQyxNQUFNLG9CQUFvQiw2QkFBNkIsT0FBTyxPQUFPO0VBT3JFLE1BQU0sa0JBQWtCLGVBTEw7R0FDakIsR0FBRyxlQUFlLFNBQVM7R0FDM0IsR0FBRztHQUNKLENBRWlEO0FBRWxELGtCQUFnQjtHQUNkLE9BQU8sT0FBTztHQUNkLEdBQUc7R0FDSixDQUFDO1VBQ0ssS0FBSztBQUNaLFNBQU8sU0FBUyxpQ0FBaUMsS0FBSyxFQUNwRCxXQUNELENBQUMifQ==
|
|
@@ -7,30 +7,31 @@ let __envive_ai_analytics = require("@envive-ai/analytics");
|
|
|
7
7
|
let __envive_ai_analytics_dist_analytics_EnviveAnalytics = require("@envive-ai/analytics/dist/analytics/EnviveAnalytics");
|
|
8
8
|
|
|
9
9
|
//#region src/services/userIdentityService/userIdentityService.ts
|
|
10
|
+
const logger = new require_logger.default("userIdentityService");
|
|
10
11
|
var UserIdentityService = class {
|
|
11
12
|
constructor({ apiKey }) {
|
|
12
13
|
this.USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
|
|
13
14
|
this.apiKey = apiKey;
|
|
14
15
|
}
|
|
15
16
|
getUserIdOverrideFromLocalStorage() {
|
|
16
|
-
|
|
17
|
+
logger.logDebug("Getting userID from localStorage");
|
|
17
18
|
return localStorage.getItem(this.USER_ID_OVERRIDE_KEY) ?? void 0;
|
|
18
19
|
}
|
|
19
20
|
async getUserIdOrDefault() {
|
|
20
21
|
const userIdOverride = this.getUserIdOverrideFromLocalStorage();
|
|
21
22
|
if (userIdOverride) return userIdOverride;
|
|
22
23
|
try {
|
|
23
|
-
|
|
24
|
+
logger.logDebug("Getting userID via EnviveAnalytics in UserIdentityService");
|
|
24
25
|
const enviveUserId = await new __envive_ai_analytics.EnviveAnalytics({
|
|
25
26
|
apiKey: this.apiKey,
|
|
26
27
|
environmentInfo: { executionContext: __envive_ai_analytics_dist_analytics_EnviveAnalytics.ExecutionContext.EnviveReactComponentsV3 }
|
|
27
28
|
}).resolveEnviveUserId();
|
|
28
|
-
if (!enviveUserId) throw new Error("
|
|
29
|
+
if (!enviveUserId) throw new Error("EnviveAnalytics.resolveEnviveUserId() returned null/undefined");
|
|
29
30
|
return enviveUserId;
|
|
30
31
|
} catch (error) {
|
|
31
|
-
|
|
32
|
+
logger.logError("CRITICAL: Failed to get user ID:", error);
|
|
32
33
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
33
|
-
throw new Error(`
|
|
34
|
+
throw new Error(`CRITICAL: User ID resolution failed: ${errorMessage}`);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
async initializeUser(atomStore) {
|
|
@@ -38,7 +39,7 @@ var UserIdentityService = class {
|
|
|
38
39
|
const userId = await this.getUserIdOrDefault();
|
|
39
40
|
(atomStore || require_atomStore.getAtomStore()).set(require_atoms_app_index.userIdAtom, userId);
|
|
40
41
|
} catch (error) {
|
|
41
|
-
|
|
42
|
+
logger.logError("CRITICAL: Failed to initialize user ID:", error);
|
|
42
43
|
throw error;
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -46,4 +47,4 @@ var UserIdentityService = class {
|
|
|
46
47
|
|
|
47
48
|
//#endregion
|
|
48
49
|
exports.UserIdentityService = UserIdentityService;
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJFbnZpdmVBbmFseXRpY3MiLCJFeGVjdXRpb25Db250ZXh0IiwiZXJyb3I6IHVua25vd24iLCJnZXRBdG9tU3RvcmUiLCJ1c2VySWRBdG9tIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXJJZGVudGl0eVNlcnZpY2UvdXNlcklkZW50aXR5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpdmVBbmFseXRpY3MgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlJztcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcy9kaXN0L2FuYWx5dGljcy9FbnZpdmVBbmFseXRpY3MnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd1c2VySWRlbnRpdHlTZXJ2aWNlJyk7XG5cbnR5cGUgVXNlcklkZW50aXR5U2VydmljZVByb3BzID0ge1xuICBhcGlLZXk6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBVc2VySWRlbnRpdHlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IFVTRVJfSURfT1ZFUlJJREVfS0VZID0gJ3YxLXNwaWZmeS11c2VyLWlkLW92ZXJyaWRlJztcblxuICBjb25zdHJ1Y3Rvcih7IGFwaUtleSB9OiBVc2VySWRlbnRpdHlTZXJ2aWNlUHJvcHMpIHtcbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgfVxuXG4gIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxvZ2dlci5sb2dEZWJ1ZygnR2V0dGluZyB1c2VySUQgZnJvbSBsb2NhbFN0b3JhZ2UnKTtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lEX09WRVJSSURFX0tFWSkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkT3JEZWZhdWx0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdXNlcklkT3ZlcnJpZGUgPSB0aGlzLmdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICh1c2VySWRPdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHVzZXJJZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0dldHRpbmcgdXNlcklEIHZpYSBFbnZpdmVBbmFseXRpY3MgaW4gVXNlcklkZW50aXR5U2VydmljZScpO1xuICAgICAgY29uc3QgZW52aXZlQW5hbHl0aWNzID0gbmV3IEVudml2ZUFuYWx5dGljcyh7XG4gICAgICAgIGFwaUtleTogdGhpcy5hcGlLZXksXG4gICAgICAgIGVudmlyb25tZW50SW5mbzogeyBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0LkVudml2ZVJlYWN0Q29tcG9uZW50c1YzIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVudml2ZVVzZXJJZCA9IGF3YWl0IGVudml2ZUFuYWx5dGljcy5yZXNvbHZlRW52aXZlVXNlcklkKCk7XG5cbiAgICAgIGlmICghZW52aXZlVXNlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW52aXZlQW5hbHl0aWNzLnJlc29sdmVFbnZpdmVVc2VySWQoKSByZXR1cm5lZCBudWxsL3VuZGVmaW5lZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW52aXZlVXNlcklkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2dnZXIubG9nRXJyb3IoJ0NSSVRJQ0FMOiBGYWlsZWQgdG8gZ2V0IHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENSSVRJQ0FMOiBVc2VyIElEIHJlc29sdXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplVXNlcihhdG9tU3RvcmU/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBdG9tU3RvcmU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGF3YWl0IHRoaXMuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHN0b3JlID0gYXRvbVN0b3JlIHx8IGdldEF0b21TdG9yZSgpO1xuICAgICAgc3RvcmUuc2V0KHVzZXJJZEF0b20sIHVzZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignQ1JJVElDQUw6IEZhaWxlZCB0byBpbml0aWFsaXplIHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxzQkFBc0I7QUFNaEQsSUFBYSxzQkFBYixNQUFpQztDQUsvQixZQUFZLEVBQUUsVUFBb0M7OEJBRlY7QUFHdEMsT0FBSyxTQUFTOztDQUdoQixvQ0FBd0Q7QUFDdEQsU0FBTyxTQUFTLG1DQUFtQztBQUNuRCxTQUFPLGFBQWEsUUFBUSxLQUFLLHFCQUFxQixJQUFJOztDQUc1RCxNQUFNLHFCQUFzQztFQUMxQyxNQUFNLGlCQUFpQixLQUFLLG1DQUFtQztBQUMvRCxNQUFJLGVBQ0YsUUFBTztBQUdULE1BQUk7QUFDRixVQUFPLFNBQVMsNERBQTREO0dBSzVFLE1BQU0sZUFBZSxNQUpHLElBQUlDLHNDQUFnQjtJQUMxQyxRQUFRLEtBQUs7SUFDYixpQkFBaUIsRUFBRSxrQkFBa0JDLHNFQUFpQix5QkFBeUI7SUFDaEYsQ0FBQyxDQUN5QyxxQkFBcUI7QUFFaEUsT0FBSSxDQUFDLGFBQ0gsT0FBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBR2xGLFVBQU87V0FDQUMsT0FBZ0I7QUFDdkIsVUFBTyxTQUFTLG9DQUFvQyxNQUFNO0dBQzFELE1BQU0sZUFBZSxpQkFBaUIsUUFBUSxNQUFNLFVBQVU7QUFDOUQsU0FBTSxJQUFJLE1BQU0sd0NBQXdDLGVBQWU7OztDQUkzRSxNQUFNLGVBQWUsV0FBNEQ7QUFDL0UsTUFBSTtHQUNGLE1BQU0sU0FBUyxNQUFNLEtBQUssb0JBQW9CO0FBRzlDLElBRGMsYUFBYUMsZ0NBQWMsRUFDbkMsSUFBSUMsb0NBQVksT0FBTztXQUN0QixPQUFPO0FBQ2QsVUFBTyxTQUFTLDJDQUEyQyxNQUFNO0FBQ2pFLFNBQU0ifQ==
|
|
@@ -6,30 +6,31 @@ import { EnviveAnalytics } from "@envive-ai/analytics";
|
|
|
6
6
|
import { ExecutionContext } from "@envive-ai/analytics/dist/analytics/EnviveAnalytics";
|
|
7
7
|
|
|
8
8
|
//#region src/services/userIdentityService/userIdentityService.ts
|
|
9
|
+
const logger = new logger_default("userIdentityService");
|
|
9
10
|
var UserIdentityService = class {
|
|
10
11
|
constructor({ apiKey }) {
|
|
11
12
|
this.USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
|
|
12
13
|
this.apiKey = apiKey;
|
|
13
14
|
}
|
|
14
15
|
getUserIdOverrideFromLocalStorage() {
|
|
15
|
-
|
|
16
|
+
logger.logDebug("Getting userID from localStorage");
|
|
16
17
|
return localStorage.getItem(this.USER_ID_OVERRIDE_KEY) ?? void 0;
|
|
17
18
|
}
|
|
18
19
|
async getUserIdOrDefault() {
|
|
19
20
|
const userIdOverride = this.getUserIdOverrideFromLocalStorage();
|
|
20
21
|
if (userIdOverride) return userIdOverride;
|
|
21
22
|
try {
|
|
22
|
-
|
|
23
|
+
logger.logDebug("Getting userID via EnviveAnalytics in UserIdentityService");
|
|
23
24
|
const enviveUserId = await new EnviveAnalytics({
|
|
24
25
|
apiKey: this.apiKey,
|
|
25
26
|
environmentInfo: { executionContext: ExecutionContext.EnviveReactComponentsV3 }
|
|
26
27
|
}).resolveEnviveUserId();
|
|
27
|
-
if (!enviveUserId) throw new Error("
|
|
28
|
+
if (!enviveUserId) throw new Error("EnviveAnalytics.resolveEnviveUserId() returned null/undefined");
|
|
28
29
|
return enviveUserId;
|
|
29
30
|
} catch (error) {
|
|
30
|
-
|
|
31
|
+
logger.logError("CRITICAL: Failed to get user ID:", error);
|
|
31
32
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
32
|
-
throw new Error(`
|
|
33
|
+
throw new Error(`CRITICAL: User ID resolution failed: ${errorMessage}`);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
async initializeUser(atomStore) {
|
|
@@ -37,7 +38,7 @@ var UserIdentityService = class {
|
|
|
37
38
|
const userId = await this.getUserIdOrDefault();
|
|
38
39
|
(atomStore || getAtomStore()).set(userIdAtom, userId);
|
|
39
40
|
} catch (error) {
|
|
40
|
-
|
|
41
|
+
logger.logError("CRITICAL: Failed to initialize user ID:", error);
|
|
41
42
|
throw error;
|
|
42
43
|
}
|
|
43
44
|
}
|
|
@@ -45,4 +46,4 @@ var UserIdentityService = class {
|
|
|
45
46
|
|
|
46
47
|
//#endregion
|
|
47
48
|
export { UserIdentityService };
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5U2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsImVycm9yOiB1bmtub3duIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3VzZXJJZGVudGl0eVNlcnZpY2UvdXNlcklkZW50aXR5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpdmVBbmFseXRpY3MgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlJztcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICdAZW52aXZlLWFpL2FuYWx5dGljcy9kaXN0L2FuYWx5dGljcy9FbnZpdmVBbmFseXRpY3MnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd1c2VySWRlbnRpdHlTZXJ2aWNlJyk7XG5cbnR5cGUgVXNlcklkZW50aXR5U2VydmljZVByb3BzID0ge1xuICBhcGlLZXk6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBVc2VySWRlbnRpdHlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IFVTRVJfSURfT1ZFUlJJREVfS0VZID0gJ3YxLXNwaWZmeS11c2VyLWlkLW92ZXJyaWRlJztcblxuICBjb25zdHJ1Y3Rvcih7IGFwaUtleSB9OiBVc2VySWRlbnRpdHlTZXJ2aWNlUHJvcHMpIHtcbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgfVxuXG4gIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxvZ2dlci5sb2dEZWJ1ZygnR2V0dGluZyB1c2VySUQgZnJvbSBsb2NhbFN0b3JhZ2UnKTtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5VU0VSX0lEX09WRVJSSURFX0tFWSkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklkT3JEZWZhdWx0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdXNlcklkT3ZlcnJpZGUgPSB0aGlzLmdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICh1c2VySWRPdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHVzZXJJZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0dldHRpbmcgdXNlcklEIHZpYSBFbnZpdmVBbmFseXRpY3MgaW4gVXNlcklkZW50aXR5U2VydmljZScpO1xuICAgICAgY29uc3QgZW52aXZlQW5hbHl0aWNzID0gbmV3IEVudml2ZUFuYWx5dGljcyh7XG4gICAgICAgIGFwaUtleTogdGhpcy5hcGlLZXksXG4gICAgICAgIGVudmlyb25tZW50SW5mbzogeyBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0LkVudml2ZVJlYWN0Q29tcG9uZW50c1YzIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVudml2ZVVzZXJJZCA9IGF3YWl0IGVudml2ZUFuYWx5dGljcy5yZXNvbHZlRW52aXZlVXNlcklkKCk7XG5cbiAgICAgIGlmICghZW52aXZlVXNlcklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW52aXZlQW5hbHl0aWNzLnJlc29sdmVFbnZpdmVVc2VySWQoKSByZXR1cm5lZCBudWxsL3VuZGVmaW5lZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW52aXZlVXNlcklkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2dnZXIubG9nRXJyb3IoJ0NSSVRJQ0FMOiBGYWlsZWQgdG8gZ2V0IHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENSSVRJQ0FMOiBVc2VyIElEIHJlc29sdXRpb24gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplVXNlcihhdG9tU3RvcmU/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBdG9tU3RvcmU+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGF3YWl0IHRoaXMuZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHN0b3JlID0gYXRvbVN0b3JlIHx8IGdldEF0b21TdG9yZSgpO1xuICAgICAgc3RvcmUuc2V0KHVzZXJJZEF0b20sIHVzZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignQ1JJVElDQUw6IEZhaWxlZCB0byBpbml0aWFsaXplIHVzZXIgSUQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBTUEsTUFBTSxTQUFTLElBQUlBLGVBQU8sc0JBQXNCO0FBTWhELElBQWEsc0JBQWIsTUFBaUM7Q0FLL0IsWUFBWSxFQUFFLFVBQW9DOzhCQUZWO0FBR3RDLE9BQUssU0FBUzs7Q0FHaEIsb0NBQXdEO0FBQ3RELFNBQU8sU0FBUyxtQ0FBbUM7QUFDbkQsU0FBTyxhQUFhLFFBQVEsS0FBSyxxQkFBcUIsSUFBSTs7Q0FHNUQsTUFBTSxxQkFBc0M7RUFDMUMsTUFBTSxpQkFBaUIsS0FBSyxtQ0FBbUM7QUFDL0QsTUFBSSxlQUNGLFFBQU87QUFHVCxNQUFJO0FBQ0YsVUFBTyxTQUFTLDREQUE0RDtHQUs1RSxNQUFNLGVBQWUsTUFKRyxJQUFJLGdCQUFnQjtJQUMxQyxRQUFRLEtBQUs7SUFDYixpQkFBaUIsRUFBRSxrQkFBa0IsaUJBQWlCLHlCQUF5QjtJQUNoRixDQUFDLENBQ3lDLHFCQUFxQjtBQUVoRSxPQUFJLENBQUMsYUFDSCxPQUFNLElBQUksTUFBTSxnRUFBZ0U7QUFHbEYsVUFBTztXQUNBQyxPQUFnQjtBQUN2QixVQUFPLFNBQVMsb0NBQW9DLE1BQU07R0FDMUQsTUFBTSxlQUFlLGlCQUFpQixRQUFRLE1BQU0sVUFBVTtBQUM5RCxTQUFNLElBQUksTUFBTSx3Q0FBd0MsZUFBZTs7O0NBSTNFLE1BQU0sZUFBZSxXQUE0RDtBQUMvRSxNQUFJO0dBQ0YsTUFBTSxTQUFTLE1BQU0sS0FBSyxvQkFBb0I7QUFHOUMsSUFEYyxhQUFhLGNBQWMsRUFDbkMsSUFBSSxZQUFZLE9BQU87V0FDdEIsT0FBTztBQUNkLFVBQU8sU0FBUywyQ0FBMkMsTUFBTTtBQUNqRSxTQUFNIn0=
|
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.19",
|
|
4
4
|
"description": "React hooks for connecting to Envive AI services.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@amplitude/analytics-browser": "2.23.7",
|
|
41
|
-
"@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.
|
|
41
|
+
"@spiffy-ai/commerce-api-client": "1.1.0-SNAPSHOT.202603181358",
|
|
42
42
|
"@envive-ai/analytics": "1.0.28",
|
|
43
43
|
"fuse.js": "^7.1.0",
|
|
44
44
|
"jotai": "^2.14.0",
|
|
@@ -63,6 +63,8 @@ import { productRetrievalResponseToProductRetrievalResult } from './utils/produc
|
|
|
63
63
|
import { apiWidgetTextResponseToCoreWidgetText } from './utils/widgetTextFromApiWidgetTextResponse';
|
|
64
64
|
import { coreWidgetTextRequestToApiRequest } from './utils/widgetTextRequestToApiRequest';
|
|
65
65
|
|
|
66
|
+
const logger = new Logger('commerce-api');
|
|
67
|
+
|
|
66
68
|
async function errorResponseBody(error: ResponseError) {
|
|
67
69
|
try {
|
|
68
70
|
return await error.response.json();
|
|
@@ -73,7 +75,7 @@ async function errorResponseBody(error: ResponseError) {
|
|
|
73
75
|
|
|
74
76
|
async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
|
|
75
77
|
if (!(error instanceof ResponseError)) {
|
|
76
|
-
|
|
78
|
+
logger.logInfo(errorMsg, error);
|
|
77
79
|
throw error;
|
|
78
80
|
}
|
|
79
81
|
|
|
@@ -87,7 +89,7 @@ async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
|
|
|
87
89
|
errorResponse?.app_code?.toUpperCase() === 'RESTART_SESSION' ||
|
|
88
90
|
errorResponse?.sub_code?.toUpperCase() === 'NOT_FOUND' // for backward compatibility. new API responses will contain "app_code"
|
|
89
91
|
) {
|
|
90
|
-
|
|
92
|
+
logger.logInfo(
|
|
91
93
|
'Session does not exist. Re-start session',
|
|
92
94
|
error,
|
|
93
95
|
error.response,
|
|
@@ -96,7 +98,7 @@ async function throwSessionRestartRequiredIf(errorMsg: string, error: unknown) {
|
|
|
96
98
|
throw new SessionRestartRequired();
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
logger.logInfo(errorMsg, error);
|
|
100
102
|
throw error;
|
|
101
103
|
}
|
|
102
104
|
|
|
@@ -200,7 +202,7 @@ class CommerceApiClient {
|
|
|
200
202
|
|
|
201
203
|
return messages.filter((m): m is Message => m != null);
|
|
202
204
|
} catch (err: unknown) {
|
|
203
|
-
|
|
205
|
+
logger.logInfo('Failed to get next responses', err, {
|
|
204
206
|
payloadContext: payload?.context,
|
|
205
207
|
userEvents: payload?.userEvents,
|
|
206
208
|
});
|
|
@@ -224,7 +226,7 @@ class CommerceApiClient {
|
|
|
224
226
|
|
|
225
227
|
// Read the response as a stream of data
|
|
226
228
|
if (!response.raw.body) {
|
|
227
|
-
|
|
229
|
+
logger.logError('No body in the streamed response', undefined, {
|
|
228
230
|
response: response.raw,
|
|
229
231
|
});
|
|
230
232
|
return;
|
|
@@ -239,7 +241,7 @@ class CommerceApiClient {
|
|
|
239
241
|
try {
|
|
240
242
|
return JSON.parse(line); // Parse the JSON string
|
|
241
243
|
} catch (err) {
|
|
242
|
-
|
|
244
|
+
logger.logError('Error parsing streamed line', err, {
|
|
243
245
|
line,
|
|
244
246
|
partial,
|
|
245
247
|
});
|
|
@@ -283,7 +285,7 @@ class CommerceApiClient {
|
|
|
283
285
|
}
|
|
284
286
|
}
|
|
285
287
|
} catch (error: unknown) {
|
|
286
|
-
|
|
288
|
+
logger.logError('Failed to get next streaming responses', error, {
|
|
287
289
|
payloadContext: payload?.context,
|
|
288
290
|
userEvents: payload?.userEvents,
|
|
289
291
|
});
|
|
@@ -320,7 +322,7 @@ class CommerceApiClient {
|
|
|
320
322
|
|
|
321
323
|
return suggestions;
|
|
322
324
|
} catch (error: unknown) {
|
|
323
|
-
|
|
325
|
+
logger.logInfo('Failed to get suggestions', error, {
|
|
324
326
|
payloadContext: payload?.context,
|
|
325
327
|
userEvents: payload?.userEvents,
|
|
326
328
|
});
|
|
@@ -510,7 +512,7 @@ class CommerceApiClient {
|
|
|
510
512
|
merchant_tags: httpResponseJson.merchant_tags || [],
|
|
511
513
|
};
|
|
512
514
|
} catch (err) {
|
|
513
|
-
|
|
515
|
+
logger.logError('Failed to get response for v1SupportedEventPost', {
|
|
514
516
|
err,
|
|
515
517
|
});
|
|
516
518
|
return {
|
|
@@ -569,7 +571,7 @@ class CommerceApiClient {
|
|
|
569
571
|
|
|
570
572
|
return validateOrgConfigResults(response);
|
|
571
573
|
} catch (err) {
|
|
572
|
-
|
|
574
|
+
logger.logError(`Failed to get org config`, err, { err });
|
|
573
575
|
return undefined;
|
|
574
576
|
}
|
|
575
577
|
};
|
|
@@ -579,7 +581,7 @@ class CommerceApiClient {
|
|
|
579
581
|
email: string,
|
|
580
582
|
customerServiceProvider: CustomerServiceProvider,
|
|
581
583
|
) => {
|
|
582
|
-
|
|
584
|
+
logger.logInfo(
|
|
583
585
|
`addNoteToLatestConversation - user_id=${spiffyUserId} email=${email} customer_service_provider=${customerServiceProvider}`,
|
|
584
586
|
);
|
|
585
587
|
try {
|
|
@@ -593,7 +595,7 @@ class CommerceApiClient {
|
|
|
593
595
|
},
|
|
594
596
|
);
|
|
595
597
|
} catch (err) {
|
|
596
|
-
|
|
598
|
+
logger.logError('Failed to add note to latest conversation', { err });
|
|
597
599
|
}
|
|
598
600
|
};
|
|
599
601
|
|
|
@@ -1,20 +1,45 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
|
|
3
3
|
class Logger {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
private readonly caller: string;
|
|
5
|
+
|
|
6
|
+
/* Creates a new Logger instance.
|
|
7
|
+
* @param caller - The caller of the logger.
|
|
8
|
+
*/
|
|
9
|
+
constructor(caller: string) {
|
|
10
|
+
this.caller = caller;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
static getTimestamp(): string {
|
|
14
|
+
return new Date().toISOString();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
logInfo(message: string, ...args: unknown[]): void {
|
|
18
|
+
console.info(
|
|
19
|
+
`INFO: [envive-ai] ${Logger.getTimestamp()} - ${this.caller} - ${message}`,
|
|
20
|
+
...args,
|
|
21
|
+
);
|
|
6
22
|
}
|
|
7
23
|
|
|
8
|
-
|
|
9
|
-
console.debug(
|
|
24
|
+
logDebug(message: string, ...args: unknown[]): void {
|
|
25
|
+
console.debug(
|
|
26
|
+
`DEBUG: [envive-ai] ${Logger.getTimestamp()} - ${this.caller} - ${message}`,
|
|
27
|
+
...args,
|
|
28
|
+
);
|
|
10
29
|
}
|
|
11
30
|
|
|
12
|
-
|
|
13
|
-
console.error(
|
|
31
|
+
logError(message: string, error: unknown | undefined, ...args: unknown[]): void {
|
|
32
|
+
console.error(
|
|
33
|
+
`ERROR: [envive-ai] ${Logger.getTimestamp()} - ${this.caller} - ${message} error=${error}`,
|
|
34
|
+
args,
|
|
35
|
+
);
|
|
14
36
|
}
|
|
15
37
|
|
|
16
|
-
|
|
17
|
-
console.warn(
|
|
38
|
+
logWarn(message: string, error: unknown | undefined, ...args: unknown[]): void {
|
|
39
|
+
console.warn(
|
|
40
|
+
`WARN: [envive-ai] ${Logger.getTimestamp()} - ${this.caller} - ${message} error=${error}`,
|
|
41
|
+
args,
|
|
42
|
+
);
|
|
18
43
|
}
|
|
19
44
|
}
|
|
20
45
|
|
|
@@ -3,6 +3,8 @@ import { FormType } from '@spiffy-ai/commerce-api-client';
|
|
|
3
3
|
import { ApiFormResponseAttributes } from 'src/application/models/api/responseGenerics';
|
|
4
4
|
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
5
5
|
|
|
6
|
+
const logger = new Logger('isApiFormResponse');
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* Type guard to check if the provided data has the all of the properties (with the correct types) of
|
|
8
10
|
* a FormResponseAttribute
|
|
@@ -13,14 +15,14 @@ import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
|
13
15
|
*/
|
|
14
16
|
export const isApiFormResponseAttributes = (data: unknown): data is ApiFormResponseAttributes => {
|
|
15
17
|
if (data == null || typeof data !== 'object') {
|
|
16
|
-
|
|
18
|
+
logger.logError('isApiFormResponseAttributes: data is null or not an object', undefined, {
|
|
17
19
|
data,
|
|
18
20
|
});
|
|
19
21
|
return false;
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
if ('form_category' in data && typeof data.form_category !== 'object') {
|
|
23
|
-
|
|
25
|
+
logger.logError('isApiFormResponseAttributes: form_category is not an object', undefined, {
|
|
24
26
|
data,
|
|
25
27
|
});
|
|
26
28
|
return false;
|
|
@@ -31,7 +33,7 @@ export const isApiFormResponseAttributes = (data: unknown): data is ApiFormRespo
|
|
|
31
33
|
!hasPropertyOfType(data.form_category, 'form_type', 'string') ||
|
|
32
34
|
!Object.values(FormType).includes(data.form_category.form_type as FormType)
|
|
33
35
|
) {
|
|
34
|
-
|
|
36
|
+
logger.logError(
|
|
35
37
|
'isApiFormResponseAttributes: form_type is missing or not a valid form type',
|
|
36
38
|
undefined,
|
|
37
39
|
{
|
|
@@ -43,7 +45,7 @@ export const isApiFormResponseAttributes = (data: unknown): data is ApiFormRespo
|
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
if (!hasPropertyOfType(data, 'schema', 'object')) {
|
|
46
|
-
|
|
48
|
+
logger.logError('isApiFormResponseAttributes: schema is missing or not an object', undefined, {
|
|
47
49
|
data,
|
|
48
50
|
});
|
|
49
51
|
return false;
|
|
@@ -52,7 +54,7 @@ export const isApiFormResponseAttributes = (data: unknown): data is ApiFormRespo
|
|
|
52
54
|
// TODO: also wanna validate the fields of data.schema.properties but might wanna change the schema
|
|
53
55
|
// to not have the property name as a key in the object
|
|
54
56
|
if (!hasPropertyOfType(data.schema, 'properties', 'object')) {
|
|
55
|
-
|
|
57
|
+
logger.logError(
|
|
56
58
|
'isApiFormResponseAttributes: schema.properties is missing or not an object',
|
|
57
59
|
undefined,
|
|
58
60
|
{
|
|
@@ -63,7 +65,7 @@ export const isApiFormResponseAttributes = (data: unknown): data is ApiFormRespo
|
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
if (!hasPropertyOfType(data.schema, 'required', 'array')) {
|
|
66
|
-
|
|
68
|
+
logger.logError(
|
|
67
69
|
'isApiFormResponseAttributes: schema.required is missing or not an array',
|
|
68
70
|
undefined,
|
|
69
71
|
{ data },
|
|
@@ -76,7 +78,7 @@ export const isApiFormResponseAttributes = (data: unknown): data is ApiFormRespo
|
|
|
76
78
|
(key: unknown) => typeof key === 'string' && key in data.schema.properties,
|
|
77
79
|
)
|
|
78
80
|
) {
|
|
79
|
-
|
|
81
|
+
logger.logError(
|
|
80
82
|
'isApiFormResponseAttributes: schema.required contains invalid property keys',
|
|
81
83
|
undefined,
|
|
82
84
|
{
|
|
@@ -2,21 +2,23 @@ import Logger from 'src/application/logging/logger';
|
|
|
2
2
|
import { FormSubmittedAttributes, FormType } from '@spiffy-ai/commerce-api-client';
|
|
3
3
|
import { hasPropertyOfType } from 'src/application/models/guards/utils';
|
|
4
4
|
|
|
5
|
+
const logger = new Logger('isApiFormSubmittedResponseAttributes');
|
|
6
|
+
|
|
5
7
|
export const isApiFormSubmittedResponseAttributes = (
|
|
6
8
|
data: unknown,
|
|
7
9
|
): data is FormSubmittedAttributes => {
|
|
8
10
|
if (data == null || typeof data !== 'object') {
|
|
9
|
-
|
|
11
|
+
logger.logError('isApiFormSubmittedResponseAttributes', 'data is null or not an object', data);
|
|
10
12
|
return false;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
if (!hasPropertyOfType(data, 'filled_schema', 'object')) {
|
|
14
|
-
|
|
16
|
+
logger.logError('isApiFormSubmittedResponseAttributes', 'filled_schema is not an object', data);
|
|
15
17
|
return false;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
if (!hasPropertyOfType(data, 'form_response_id', 'string')) {
|
|
19
|
-
|
|
21
|
+
logger.logError(
|
|
20
22
|
'isApiFormSubmittedResponseAttributes',
|
|
21
23
|
'form_response_id is not a string',
|
|
22
24
|
data,
|
|
@@ -25,7 +27,7 @@ export const isApiFormSubmittedResponseAttributes = (
|
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
if (!('form_type' in data) || !Object.values(FormType).includes(data.form_type as FormType)) {
|
|
28
|
-
|
|
30
|
+
logger.logError(
|
|
29
31
|
'isApiFormSubmittedResponseAttributes',
|
|
30
32
|
'form_type is not a valid form type enum',
|
|
31
33
|
data,
|