From b2e28c4f5a5972020bbca048aa9704540bb4a10a Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Fri, 2 May 2025 19:42:54 +0600 Subject: [PATCH 1/5] [FSSDK-11197] EventTags type fix --- .../event_builder/log_event.ts | 8 ++--- .../event_builder/user_event.ts | 6 +--- lib/shared_types.ts | 4 +-- lib/utils/event_tag_utils/index.ts | 34 ++++++++++--------- 4 files changed, 22 insertions(+), 30 deletions(-) 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/shared_types.ts b/lib/shared_types.ts index c203613a3..4a2f7833d 100644 --- a/lib/shared_types.ts +++ b/lib/shared_types.ts @@ -88,9 +88,7 @@ export interface UserProfile { experiment_bucket_map: ExperimentBucketMap; } -export type EventTags = { - [key: string]: string | number | null; -}; +export type EventTags = Record; export interface UserProfileService { lookup(userId: string): UserProfile; diff --git a/lib/utils/event_tag_utils/index.ts b/lib/utils/event_tag_utils/index.ts index 7c4377d76..815f6a738 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 amount = typeof rawValue === 'number' ? rawValue : typeof rawValue === 'string' ? parseInt(rawValue) : NaN; - if (isFinite(parsedRevenueValue)) { - logger?.info(PARSED_REVENUE_VALUE, parsedRevenueValue); - return parsedRevenueValue; - } else { // NaN, +/- infinity values + if (isFinite(amount)) { + logger?.info(PARSED_REVENUE_VALUE, amount); + return amount; + } else { + // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_REVENUE, rawValue); return null; } @@ -65,16 +65,18 @@ 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; } - const parsedEventValue = typeof rawValue === 'string' ? parseFloat(rawValue) : rawValue; + const amount = typeof rawValue === 'number' ? rawValue : typeof rawValue === 'string' ? parseFloat(rawValue) : NaN; - if (isFinite(parsedEventValue)) { - logger?.info(PARSED_NUMERIC_VALUE, parsedEventValue); - return parsedEventValue; - } else { // NaN, +/- infinity values + if (isFinite(amount)) { + logger?.info(PARSED_NUMERIC_VALUE, amount); + return amount; + } else { + // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_VALUE, rawValue); return null; } From 7e40a55077da66bb4dbe2ddc3e81894e570544e0 Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Fri, 2 May 2025 21:12:41 +0600 Subject: [PATCH 2/5] [FSSDK-11197] EventTags type fix --- .../event_builder/log_event.spec.ts | 8 ++++++++ lib/optimizely/index.ts | 5 +++-- lib/shared_types.ts | 6 +++++- lib/utils/event_tag_utils/index.spec.ts | 4 ++++ lib/utils/event_tag_utils/index.ts | 16 ++++++++-------- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/lib/event_processor/event_builder/log_event.spec.ts b/lib/event_processor/event_builder/log_event.spec.ts index 54a9c2acf..7f04d3474 100644 --- a/lib/event_processor/event_builder/log_event.spec.ts +++ b/lib/event_processor/event_builder/log_event.spec.ts @@ -251,6 +251,8 @@ describe('buildConversionEventV1', () => { }, tags: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore foo: 'bar', value: '123', revenue: '1000', @@ -496,6 +498,8 @@ describe('buildConversionEventV1', () => { }, tags: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore foo: 'bar', value: 0, revenue: 0, @@ -582,6 +586,8 @@ describe('buildConversionEventV1', () => { }, tags: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore foo: 'bar', value: '123', revenue: '1000', @@ -665,6 +671,8 @@ describe('makeEventBatch', () => { }, tags: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore foo: 'bar', value: '123', revenue: '1000', diff --git a/lib/optimizely/index.ts b/lib/optimizely/index.ts index 6895fcea7..f7b623abf 100644 --- a/lib/optimizely/index.ts +++ b/lib/optimizely/index.ts @@ -607,8 +607,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 4a2f7833d..2e0e752fe 100644 --- a/lib/shared_types.ts +++ b/lib/shared_types.ts @@ -88,7 +88,11 @@ export interface UserProfile { experiment_bucket_map: ExperimentBucketMap; } -export type EventTags = Record; +export type EventTags = { + revenue?: string | number | null; + value?: string | number | null; + $opt_event_properties?: Record; +}; export interface UserProfileService { lookup(userId: string): UserProfile; diff --git a/lib/utils/event_tag_utils/index.spec.ts b/lib/utils/event_tag_utils/index.spec.ts index a1208b601..bfd76c767 100644 --- a/lib/utils/event_tag_utils/index.spec.ts +++ b/lib/utils/event_tag_utils/index.spec.ts @@ -50,6 +50,8 @@ describe('getRevenueValue', () => { }); it('should return null if the revenue value is not present in the event tags', () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore const parsedRevenueValue = eventTagUtils.getRevenueValue({ not_revenue: '1337' }, logger); expect(parsedRevenueValue).toBe(null); @@ -81,6 +83,8 @@ describe('getEventValue', () => { }); it('should return null if the value is not present in the event tags', () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore const parsedNumericValue = eventTagUtils.getEventValue({ not_value: '13.37' }, logger); expect(parsedNumericValue).toBe(null); diff --git a/lib/utils/event_tag_utils/index.ts b/lib/utils/event_tag_utils/index.ts index 815f6a738..551f98ebe 100644 --- a/lib/utils/event_tag_utils/index.ts +++ b/lib/utils/event_tag_utils/index.ts @@ -44,11 +44,11 @@ export function getRevenueValue(eventTags: EventTags, logger?: LoggerFacade): nu return null; } - const amount = typeof rawValue === 'number' ? rawValue : typeof rawValue === 'string' ? parseInt(rawValue) : NaN; + const parsedRevenueValue = typeof rawValue === 'string' ? parseInt(rawValue) : rawValue; - if (isFinite(amount)) { - logger?.info(PARSED_REVENUE_VALUE, amount); - return amount; + if (isFinite(parsedRevenueValue)) { + logger?.info(PARSED_REVENUE_VALUE, parsedRevenueValue); + return parsedRevenueValue; } else { // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_REVENUE, rawValue); @@ -70,11 +70,11 @@ export function getEventValue(eventTags: EventTags, logger?: LoggerFacade): numb return null; } - const amount = typeof rawValue === 'number' ? rawValue : typeof rawValue === 'string' ? parseFloat(rawValue) : NaN; + const parsedEventValue = typeof rawValue === 'string' ? parseFloat(rawValue) : rawValue; - if (isFinite(amount)) { - logger?.info(PARSED_NUMERIC_VALUE, amount); - return amount; + if (isFinite(parsedEventValue)) { + logger?.info(PARSED_NUMERIC_VALUE, parsedEventValue); + return parsedEventValue; } else { // NaN, +/- infinity values logger?.info(FAILED_TO_PARSE_VALUE, rawValue); From 8ceab0bdee7001e01b4fc1a2e1db849f880bf47e Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Mon, 5 May 2025 22:39:41 +0600 Subject: [PATCH 3/5] [FSSDK-11197] EventTags type fix v6 --- lib/shared_types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/shared_types.ts b/lib/shared_types.ts index 2e0e752fe..4a727af74 100644 --- a/lib/shared_types.ts +++ b/lib/shared_types.ts @@ -92,6 +92,7 @@ export type EventTags = { revenue?: string | number | null; value?: string | number | null; $opt_event_properties?: Record; + [key: string]: unknown; }; export interface UserProfileService { From 97466e4838950eada14f67199d12b7b5fda4aa42 Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Tue, 6 May 2025 17:23:47 +0600 Subject: [PATCH 4/5] [FSSDK-11197] ts-ignore removal --- lib/event_processor/event_builder/log_event.spec.ts | 8 -------- lib/utils/event_tag_utils/index.spec.ts | 4 ---- 2 files changed, 12 deletions(-) diff --git a/lib/event_processor/event_builder/log_event.spec.ts b/lib/event_processor/event_builder/log_event.spec.ts index 7f04d3474..54a9c2acf 100644 --- a/lib/event_processor/event_builder/log_event.spec.ts +++ b/lib/event_processor/event_builder/log_event.spec.ts @@ -251,8 +251,6 @@ describe('buildConversionEventV1', () => { }, tags: { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore foo: 'bar', value: '123', revenue: '1000', @@ -498,8 +496,6 @@ describe('buildConversionEventV1', () => { }, tags: { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore foo: 'bar', value: 0, revenue: 0, @@ -586,8 +582,6 @@ describe('buildConversionEventV1', () => { }, tags: { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore foo: 'bar', value: '123', revenue: '1000', @@ -671,8 +665,6 @@ describe('makeEventBatch', () => { }, tags: { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore foo: 'bar', value: '123', revenue: '1000', diff --git a/lib/utils/event_tag_utils/index.spec.ts b/lib/utils/event_tag_utils/index.spec.ts index bfd76c767..a1208b601 100644 --- a/lib/utils/event_tag_utils/index.spec.ts +++ b/lib/utils/event_tag_utils/index.spec.ts @@ -50,8 +50,6 @@ describe('getRevenueValue', () => { }); it('should return null if the revenue value is not present in the event tags', () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore const parsedRevenueValue = eventTagUtils.getRevenueValue({ not_revenue: '1337' }, logger); expect(parsedRevenueValue).toBe(null); @@ -83,8 +81,6 @@ describe('getEventValue', () => { }); it('should return null if the value is not present in the event tags', () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore const parsedNumericValue = eventTagUtils.getEventValue({ not_value: '13.37' }, logger); expect(parsedNumericValue).toBe(null); From 62c96ce5578a772696931b0b86ccc9db31ab35e2 Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Tue, 6 May 2025 17:58:21 +0600 Subject: [PATCH 5/5] [FSSDK-11197] condition improvement --- lib/utils/event_tag_utils/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/event_tag_utils/index.ts b/lib/utils/event_tag_utils/index.ts index 551f98ebe..d50292a39 100644 --- a/lib/utils/event_tag_utils/index.ts +++ b/lib/utils/event_tag_utils/index.ts @@ -44,7 +44,7 @@ export function getRevenueValue(eventTags: EventTags, logger?: LoggerFacade): nu 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);