diff --git a/lib/event_processor/event_builder/log_event.ts b/lib/event_processor/event_builder/log_event.ts index 6266d8a5a..c4132567e 100644 --- a/lib/event_processor/event_builder/log_event.ts +++ b/lib/event_processor/event_builder/log_event.ts @@ -13,14 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - EventTags, - ConversionEvent, - ImpressionEvent, - UserEvent, -} from './user_event'; +import { ConversionEvent, ImpressionEvent, UserEvent } from './user_event'; import { LogEvent } from '../event_dispatcher/event_dispatcher'; +import { EventTags } from '../../shared_types'; const ACTIVATE_EVENT_KEY = 'campaign_activated' const CUSTOM_ATTRIBUTE_FEATURE_TYPE = 'custom' diff --git a/lib/event_processor/event_builder/user_event.ts b/lib/event_processor/event_builder/user_event.ts index e2e52bedc..e0a91b5ae 100644 --- a/lib/event_processor/event_builder/user_event.ts +++ b/lib/event_processor/event_builder/user_event.ts @@ -25,7 +25,7 @@ import { ProjectConfig, } from '../../project_config/project_config'; -import { UserAttributes } from '../../shared_types'; +import { EventTags, UserAttributes } from '../../shared_types'; import { LoggerFacade } from '../../logging/logger'; export type VisitorAttribute = { @@ -79,10 +79,6 @@ export type ImpressionEvent = BaseUserEvent & { cmabUuid?: string; }; -export type EventTags = { - [key: string]: string | number | null; -}; - export type ConversionEvent = BaseUserEvent & { type: 'conversion'; diff --git a/lib/optimizely/index.ts b/lib/optimizely/index.ts index 09b7d47d9..883391e4a 100644 --- a/lib/optimizely/index.ts +++ b/lib/optimizely/index.ts @@ -609,8 +609,9 @@ export default class Optimizely extends BaseService implements Client { */ private filterEmptyValues(map: EventTags | undefined): EventTags | undefined { for (const key in map) { - if (map.hasOwnProperty(key) && (map[key] === null || map[key] === undefined)) { - delete map[key]; + const typedKey = key as keyof EventTags; + if (map.hasOwnProperty(typedKey) && (map[typedKey] === null || map[typedKey] === undefined)) { + delete map[typedKey]; } } return map; diff --git a/lib/shared_types.ts b/lib/shared_types.ts index c203613a3..4a727af74 100644 --- a/lib/shared_types.ts +++ b/lib/shared_types.ts @@ -89,7 +89,10 @@ export interface UserProfile { } export type EventTags = { - [key: string]: string | number | null; + revenue?: string | number | null; + value?: string | number | null; + $opt_event_properties?: Record; + [key: string]: unknown; }; export interface UserProfileService { diff --git a/lib/utils/event_tag_utils/index.ts b/lib/utils/event_tag_utils/index.ts index 7c4377d76..d50292a39 100644 --- a/lib/utils/event_tag_utils/index.ts +++ b/lib/utils/event_tag_utils/index.ts @@ -19,12 +19,10 @@ import { PARSED_NUMERIC_VALUE, PARSED_REVENUE_VALUE, } from 'log_message'; -import { EventTags } from '../../event_processor/event_builder/user_event'; import { LoggerFacade } from '../../logging/logger'; -import { - RESERVED_EVENT_KEYWORDS, -} from '../enums'; +import { RESERVED_EVENT_KEYWORDS } from '../enums'; +import { EventTags } from '../../shared_types'; /** * Provides utility method for parsing event tag values @@ -41,16 +39,18 @@ const VALUE_EVENT_METRIC_NAME = RESERVED_EVENT_KEYWORDS.VALUE; export function getRevenueValue(eventTags: EventTags, logger?: LoggerFacade): number | null { const rawValue = eventTags[REVENUE_EVENT_METRIC_NAME]; - if (rawValue == null) { // null or undefined event values + if (rawValue == null) { + // null or undefined event values return null; } - const parsedRevenueValue = typeof rawValue === 'string' ? parseInt(rawValue) : rawValue; + const parsedRevenueValue = typeof rawValue === 'string' ? parseInt(rawValue) : Math.trunc(rawValue); if (isFinite(parsedRevenueValue)) { logger?.info(PARSED_REVENUE_VALUE, parsedRevenueValue); return parsedRevenueValue; - } else { // NaN, +/- infinity values + } else { + // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_REVENUE, rawValue); return null; } @@ -65,7 +65,8 @@ export function getRevenueValue(eventTags: EventTags, logger?: LoggerFacade): nu export function getEventValue(eventTags: EventTags, logger?: LoggerFacade): number | null { const rawValue = eventTags[VALUE_EVENT_METRIC_NAME]; - if (rawValue == null) { // null or undefined event values + if (rawValue == null) { + // null or undefined event values return null; } @@ -74,7 +75,8 @@ export function getEventValue(eventTags: EventTags, logger?: LoggerFacade): numb if (isFinite(parsedEventValue)) { logger?.info(PARSED_NUMERIC_VALUE, parsedEventValue); return parsedEventValue; - } else { // NaN, +/- infinity values + } else { + // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_VALUE, rawValue); return null; }