Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WSTEAMA-1412: Add Reverb dependency as the transpiled version #12189

Merged
merged 100 commits into from
Jan 21, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
1af2a31
Add reverb as a dependency
karinathomasbbc Oct 23, 2024
881309c
use git+ssh syntax
karinathomasbbc Oct 23, 2024
d8d342b
Following guidelines in https://github.com/bbc/delivery-engineering/t…
karinathomasbbc Oct 23, 2024
50f1608
Following guidelines in https://github.com/bbc/delivery-engineering/t…
karinathomasbbc Oct 23, 2024
ecf0f23
TEMP: don't check package manager; remove winston as npm does not sup…
karinathomasbbc Oct 23, 2024
8cf70ff
Adding GITHUB_TOKEN to builds which install node modules
karinathomasbbc Oct 23, 2024
f4eb63c
Use git+ssh syntax
karinathomasbbc Oct 23, 2024
d7c72fb
Revert "TEMP: don't check package manager; remove winston as npm does…
karinathomasbbc Oct 23, 2024
5dcb396
Use github instead of github+ssh syntax
karinathomasbbc Oct 28, 2024
2fe6d28
Update bbc/reverb reference
alex-magana Oct 30, 2024
edbba63
Change reference
alex-magana Oct 30, 2024
21134ea
Add flag
alex-magana Oct 30, 2024
bdc6cba
Revert flag
alex-magana Oct 30, 2024
e54735f
Change reverb reference
alex-magana Oct 31, 2024
a56a4f3
Remove Reverb from cache and lock file
alex-magana Nov 5, 2024
5617923
Update Reverb reference to match Webcore
alex-magana Nov 12, 2024
a7cfef2
Serve compiled Reverb code
alex-magana Nov 18, 2024
164e389
Use correct reference for smart tag
alex-magana Nov 19, 2024
443d632
Add reverb loading boilerplate code
alex-magana Nov 20, 2024
0bce537
Disable withReverb in applyBasicPageHandlers
alex-magana Nov 21, 2024
f64a497
Fire page view event via Reverb
alex-magana Nov 22, 2024
76f28ad
Use static Reverb in sendBeacon module
alex-magana Nov 25, 2024
ea302c5
Add click tracking for MostRead
alex-magana Nov 25, 2024
d5ff79d
Remove sample Reverb data
alex-magana Nov 26, 2024
b144379
Add view tracking support
alex-magana Nov 26, 2024
5529207
Enable Top Stories view tracking
alex-magana Nov 26, 2024
dba7875
Add click tracking for Top Stories
alex-magana Nov 26, 2024
d91a4fc
Enable click and view tracking for Feature Analysis component
alex-magana Nov 26, 2024
fd66f0c
Revert setting GITHUB_TOKEN in workflow config
alex-magana Nov 26, 2024
75fd19e
Remove reverb from package.json
alex-magana Nov 26, 2024
06460e8
Remove local compiled versions of reverb in favour of mybbc-analytics…
alex-magana Nov 26, 2024
84aa432
Delete the withReverb page handler
alex-magana Nov 26, 2024
5e20221
Invoke event functions if reverb is ready
alex-magana Dec 5, 2024
4d15f30
Fix return linting error
alex-magana Dec 5, 2024
068f6b0
Make the reverb static script non-blocking
alex-magana Dec 5, 2024
1d1e1ba
To be reverted - make atiAnalyticsProducerName optional
alex-magana Dec 9, 2024
736a246
Merge pull request #12226 from bbc/WSTEAMA-1482-optimise-reverb-initi…
alex-magana Dec 10, 2024
ca43537
Merge branch 'latest' into reverb-dependency-minified
alex-magana Dec 10, 2024
6f86298
Merge branch 'latest' into reverb-dependency-minified
alex-magana Dec 16, 2024
47cde59
adds producer name value for afaanoromoo
louisearchibald Dec 17, 2024
109b613
correct name
louisearchibald Dec 17, 2024
974f998
adds producer name value for afrique amharic arabic archive and azeri
louisearchibald Dec 17, 2024
71b8703
add producer name to config for bengali burmese cymrufyw gahuza gujar…
louisearchibald Dec 18, 2024
b3a2931
update config for hindi igbo indonesia japanese and korean
louisearchibald Dec 18, 2024
91e38e1
update kyrgyz marathi mundo naidheachdan & nepali
louisearchibald Dec 18, 2024
99570ed
update config for news newsround pashto pidgin & portuguese
louisearchibald Dec 18, 2024
721cc0c
update service config for punjabi russian scotland serbian & sinhala
louisearchibald Dec 18, 2024
92addb7
update service config for somali sport swahili tamil & telugu
louisearchibald Dec 18, 2024
078e69f
update service config for thai tigrinya turkce ukchina & ukrainian
louisearchibald Dec 18, 2024
c18fb40
update service config for urdu uzbek vietnamese ws yoruba & zhongwen
louisearchibald Dec 18, 2024
a45c784
Remove useReverb prop from ATIAnalytics component
alex-magana Dec 19, 2024
f0c28b2
Remove useReverb prop from the MostRead component
alex-magana Dec 20, 2024
3e46f44
Remove useReverb prop from Top Stories component
alex-magana Dec 23, 2024
5a008d4
Remove useReverb prop from the FeaturesAnalysis component
alex-magana Dec 23, 2024
21122ae
Merge branch 'latest' into reverb-dependency-minified
alex-magana Dec 23, 2024
1c68e74
Merge pull request #12244 from bbc/WSTEAMA-1508-adds-producerName-to-…
alex-magana Jan 2, 2025
d98957c
Merge pull request #12253 from bbc/WSTEAMA-1496-enable-reverb-service…
alex-magana Jan 2, 2025
7e19f85
Add producerName to config generation assertions
alex-magana Jan 2, 2025
f68a76b
Fix ATIAnalytics and EventTrackingContext ATI tests assertions
alex-magana Jan 3, 2025
37f57da
Update PageLayoutWrapper copyright text
alex-magana Jan 3, 2025
547e8f7
Add Reverb boilerplate to the CanonicalRenderer snapshot
alex-magana Jan 3, 2025
f5ea110
Add producer name to snapshot
alex-magana Jan 6, 2025
55035ad
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 6, 2025
28465d9
Merge branch 'latest' into reverb-dependency-minified
eagerterrier Jan 6, 2025
9e013d7
Update snapshots to reflect 2025 in the page copyright
alex-magana Jan 6, 2025
78e8dfb
Merge branch 'reverb-dependency-minified' of github.com:bbc/simorgh i…
alex-magana Jan 6, 2025
4216516
WSTEAMA-1484 - Reverb unit tests (#12265)
amoore108 Jan 9, 2025
5fa3c20
Add custom resource loader to fetch Reverb
alex-magana Jan 9, 2025
d28acca
Merge branch 'reverb-dependency-minified' into add-custom-resource-lo…
alex-magana Jan 9, 2025
9bc880f
Merge pull request #12267 from bbc/add-custom-resource-loader
alex-magana Jan 13, 2025
65793a4
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 13, 2025
b2885fc
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 13, 2025
829d834
Fix passing event tracking data blocks for FeaturesAnalysis
alex-magana Jan 13, 2025
5919981
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 13, 2025
6b4279c
Merge branch 'latest' into reverb-dependency-minified
pvaliani Jan 14, 2025
608962d
Use dynamic values for click tracking
alex-magana Jan 15, 2025
648b225
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 15, 2025
34ab7c1
Update tests to assert dynamic tracking values are passed
alex-magana Jan 15, 2025
cc6a98e
Merge branch 'reverb-dependency-minified' of github.com:bbc/simorgh i…
alex-magana Jan 15, 2025
8e37d32
Merge branch 'latest' into reverb-dependency-minified
amoore108 Jan 16, 2025
f70f11a
Move the Reverb URL to env config
alex-magana Jan 16, 2025
4dcaa04
Merge branch 'reverb-dependency-minified' of github.com:bbc/simorgh i…
alex-magana Jan 16, 2025
3d96206
Set isSignedIn to false
alex-magana Jan 16, 2025
3d0ed10
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 16, 2025
331aa9f
Remove hashedId assignment
alex-magana Jan 16, 2025
07fc07b
Merge branch 'reverb-dependency-minified' of github.com:bbc/simorgh i…
alex-magana Jan 16, 2025
dec4da6
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 16, 2025
d93b087
Assert use of environment variables persisted in the .env file
alex-magana Jan 17, 2025
caa630b
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 17, 2025
33e1368
Merge branch 'reverb-dependency-minified' of github.com:bbc/simorgh i…
alex-magana Jan 17, 2025
3107f7f
Fix typo
alex-magana Jan 17, 2025
a040eaa
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 17, 2025
99ea38d
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 20, 2025
e5fd7a3
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 20, 2025
a032940
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 20, 2025
c6fc194
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 20, 2025
d6453b2
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 21, 2025
f27f8e4
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 21, 2025
85c6503
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 21, 2025
ff9fa82
Merge branch 'latest' into reverb-dependency-minified
alex-magana Jan 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions envConfig/live.env
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ AWS_EMF_SERVICE_NAME=Simorgh
AWS_EMF_LOG_GROUP_NAME=SimorghServer
AWS_EMF_ENVIRONMENT=EC2

# Reverb Reporting
SIMORGH_REVERB_SOURCE=https://mybbc-analytics.files.bbci.co.uk/reverb-client-js/reverb-3.9.2.js

## WebVitals Reporting
SIMORGH_WEBVITALS_REPORTING_ENDPOINT=https://ws.bbc-reporting-api.app/report-endpoint
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE=20
Expand Down
3 changes: 3 additions & 0 deletions envConfig/local.env
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ AWS_EMF_SERVICE_NAME=Simorgh
AWS_EMF_LOG_GROUP_NAME=SimorghServer
AWS_EMF_ENVIRONMENT=Local

# Reverb Reporting
SIMORGH_REVERB_SOURCE=https://mybbc-analytics.files.bbci.co.uk/reverb-client-js/reverb-3.9.2.js

## WebVitals Reporting
SIMORGH_WEBVITALS_REPORTING_ENDPOINT=https://ws.bbc-reporting-api.app/report-endpoint
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE=100
Expand Down
3 changes: 3 additions & 0 deletions envConfig/preview1.env
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ AWS_EMF_SERVICE_NAME=Simorgh
AWS_EMF_LOG_GROUP_NAME=SimorghServer
AWS_EMF_ENVIRONMENT=EC2

# Reverb Reporting
SIMORGH_REVERB_SOURCE=https://mybbc-analytics.files.bbci.co.uk/reverb-client-js/reverb-3.9.2.js

## WebVitals Reporting
SIMORGH_WEBVITALS_REPORTING_ENDPOINT=https://ws.bbc-reporting-api.app/report-endpoint
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE=100
Expand Down
3 changes: 3 additions & 0 deletions envConfig/preview2.env
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ AWS_EMF_SERVICE_NAME=Simorgh
AWS_EMF_LOG_GROUP_NAME=SimorghServer
AWS_EMF_ENVIRONMENT=EC2

# Reverb Reporting
SIMORGH_REVERB_SOURCE=https://mybbc-analytics.files.bbci.co.uk/reverb-client-js/reverb-3.9.2.js

## WebVitals Reporting
SIMORGH_WEBVITALS_REPORTING_ENDPOINT=https://ws.bbc-reporting-api.app/report-endpoint
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE=100
Expand Down
3 changes: 3 additions & 0 deletions envConfig/test.env
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ AWS_EMF_SERVICE_NAME=Simorgh
AWS_EMF_LOG_GROUP_NAME=SimorghServer
AWS_EMF_ENVIRONMENT=EC2

# Reverb Reporting
SIMORGH_REVERB_SOURCE=https://mybbc-analytics.files.bbci.co.uk/reverb-client-js/reverb-3.9.2.js

## WebVitals Reporting
SIMORGH_WEBVITALS_REPORTING_ENDPOINT=https://ws.bbc-reporting-api.app/report-endpoint
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE=100
Expand Down
165 changes: 164 additions & 1 deletion src/app/components/ATIAnalytics/atiUrl/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { resetWindowValue } from '#psammead/psammead-test-helpers/src';
import { Platforms } from '#app/models/types/global';
import * as genericLabelHelpers from '../../../lib/analyticsUtils';
import { buildATIPageTrackPath, buildATIEventTrackUrl } from '.';
import {
buildATIPageTrackPath,
buildATIEventTrackUrl,
buildReverbAnalyticsModel,
buildReverbPageSectionEventModel,
} from '.';

// @ts-expect-error required for testing purposes
const mockAndSet = ({ name, source }, response) => {
Expand Down Expand Up @@ -50,6 +56,7 @@ describe('getThingAttributes', () => {

afterEach(() => {
jest.resetAllMocks();

resetWindowValue('location', windowLocation);
});

Expand Down Expand Up @@ -278,3 +285,159 @@ describe('buildATIEventTrackUrl', () => {
]);
});
});

describe('Reverb', () => {
describe('buildReverbAnalyticsModel', () => {
beforeEach(() => {
analyticsUtilFunctions.forEach(func => {
mockAndSet(func, func.name);
});
});

afterEach(() => {
jest.resetAllMocks();
});

const input = {
appName: 'news',
campaigns: [
{
campaignId: '1',
campaignName: 'campaign1',
},
{
campaignId: '2',
campaignName: 'campaign2',
},
],
categoryName: 'categoryName',
contentId: 'contentId',
contentType: 'contentType',
language: 'language',
ldpThingIds: 'ldpThingIds',
ldpThingLabels: 'ldpThingLabels',
libraryVersion: 'libraryVersion',
pageIdentifier: 'pageIdentifier',
pageTitle: 'pageTitle',
platform: 'canonical' as Platforms,
previousPath: '',
producerName: 'producerName',
origin: 'http://localhost',
nationsProducer: '',
statsDestination: 'statsDestination',
timePublished: 'timePublished',
timeUpdated: 'timeUpdated',
};

it('should return the correct Reverb analytics model', () => {
const reverbAnalyticsModel = buildReverbAnalyticsModel(input);

const pageParams = {
contentId: 'contentId',
contentType: 'contentType',
destination: 'statsDestination',
name: 'pageIdentifier',
producer: 'producerName',
additionalProperties: {
app_name: 'news',
app_type: 'getAppType',
content_language: 'language',
product_platform: null,
referrer_url: 'getReferrer',
x5: 'getHref',
x8: 'libraryVersion',
x9: 'sanitise',
x10: '',
x11: 'timePublished',
x12: 'timeUpdated',
x13: 'ldpThingLabels',
x14: 'ldpThingIds',
x16: 'campaign1~campaign2',
x17: 'categoryName',
x18: 'isLocServeCookieSet',
},
};

expect(reverbAnalyticsModel.params.page).toEqual(pageParams);
expect(reverbAnalyticsModel.eventDetails).toEqual({
eventName: 'pageView',
});
});
});

describe('buildReverbPageSectionEventModel', () => {
const input = {
pageIdentifier: 'mundo.page',
producerName: 'MUNDO',
statsDestination: 'statsDestination',
componentName: 'top-stories',
campaignID: '1234',
format: 'format',
type: 'view',
advertiserID: 'advertiserID',
url: 'http://localhost',
};

it('should return the correct Reverb page section view event model', () => {
const reverbPageSectionViewEventModel =
buildReverbPageSectionEventModel(input);

const pageSectionViewEventParams = {
destination: 'statsDestination',
name: 'mundo.page',
producer: 'MUNDO',
additionalProperties: {
ati: 'PUB-[1234]-[top-stories]-[]-[format]-[mundo.page]-[]-[advertiserID]-[http://localhost]',
type: 'AT',
},
};

expect(reverbPageSectionViewEventModel.params.page).toEqual(
pageSectionViewEventParams,
);
});

it('should return the correct eventName for the Reverb page section view event model', () => {
const reverbPageSectionViewEventModel =
buildReverbPageSectionEventModel(input);

expect(reverbPageSectionViewEventModel.eventDetails).toEqual({
eventName: 'sectionView',
});
});

it('should return the correct Reverb page section click event model', () => {
const reverbPageSectionViewEventModel = buildReverbPageSectionEventModel({
...input,
type: 'click',
});

const pageSectionViewEventParams = {
destination: 'statsDestination',
name: 'mundo.page',
producer: 'MUNDO',
additionalProperties: {
atc: 'PUB-[1234]-[top-stories]-[]-[format]-[mundo.page]-[]-[advertiserID]-[http://localhost]',
type: 'AT',
},
};

expect(reverbPageSectionViewEventModel.params.page).toEqual(
pageSectionViewEventParams,
);
});

it('should return the correct event details for the Reverb page section click event model', () => {
const reverbPageSectionViewEventModel = buildReverbPageSectionEventModel({
...input,
type: 'click',
});

expect(reverbPageSectionViewEventModel.eventDetails).toEqual({
eventName: 'sectionClick',
componentName: 'top-stories',
container: '1234',
});
});
});
});
119 changes: 119 additions & 0 deletions src/app/components/ATIAnalytics/atiUrl/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -417,3 +417,122 @@ export const buildATIEventTrackUrl = ({
eventTrackingBeaconValues,
)}&type=AT`;
};

export const buildReverbAnalyticsModel = ({
appName,
campaigns,
categoryName,
contentId,
contentType,
language,
ldpThingIds,
ldpThingLabels,
libraryVersion,
pageIdentifier,
pageTitle,
platform,
previousPath,
producerName,
origin,
nationsProducer,
statsDestination,
timePublished,
timeUpdated,
}: ATIPageTrackingProps) => {
const href = getHref(platform);
const referrer = getReferrer(platform, origin, previousPath);

const aggregatedCampaigns = (Array.isArray(campaigns) ? campaigns : [])
.map(({ campaignName }) => campaignName)
.join('~');

const eventDetails = {
eventName: 'pageView',
};

const reverbVariables = {
params: {
page: {
contentId,
contentType,
destination: statsDestination,
name: pageIdentifier,
producer: producerName,
additionalProperties: {
app_name: platform === 'app' ? `${appName}-app` : appName,
app_type: getAppType(platform),
content_language: language,
product_platform: onOnionTld() ? 'tor-bbc' : null,
referrer_url:
referrer && encodeURIComponent(encodeURIComponent(referrer)),
x5: href && encodeURIComponent(encodeURIComponent(href)),
x8: libraryVersion,
x9: sanitise(pageTitle),
x10: nationsProducer && nationsProducer,
x11: timePublished,
x12: timeUpdated,
x13: ldpThingLabels,
x14: ldpThingIds,
x16: aggregatedCampaigns,
x17: categoryName,
x18: isLocServeCookieSet(),
},
},
user: {
hashedId: getAtUserId(),
isSignedIn: false,
},
},
eventDetails,
};

return reverbVariables;
};

export const buildReverbPageSectionEventModel = ({
pageIdentifier,
producerName,
statsDestination,
componentName,
campaignID,
format,
type,
advertiserID,
url,
}: ATIEventTrackingProps) => {
const eventPublisher = type === 'view' ? 'ati' : 'atc';

const eventDetails = {
eventName: type === 'view' ? 'sectionView' : 'sectionClick',
...(type === 'click' && {
componentName,
container: campaignID,
}),
};

return {
params: {
page: {
destination: statsDestination,
name: pageIdentifier,
producer: producerName,
additionalProperties: {
[eventPublisher]: getEventInfo({
campaignID,
componentName,
format,
pageIdentifier,
advertiserID,
url,
}),
type: 'AT',
},
},
user: {
hashedId: getAtUserId(),
isSignedIn: false,
Comment on lines +532 to +533
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need the same logic as above (lines 480-481)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for highlighting this Karina.
I reckon we should. Let me take a look at the existing logic
to confirm what informed this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've set this to false in both buildReverbAnalyticsModel and buildReverbPageSectionEventModel.
This is informed by the documentation here.
I've checked the beacons and confirmed that idclient is still reported in beacons
fired to ATI/Piano.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I was working on my personalisation project, I had set it to be !!hashedId - see #11353 (comment)

@gavinspence is this something we would like to put in place now, or shall we leave it for later?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the context. I've responded in the thread in 11353 for continuity.

I'll hold off merging pending steer from @gavinspence.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From discussing with @gavinspence, we've concluded that we should retain
isSignedIn as false to:

  • reflect the current logic/UX where audiences are "visitors" and not "users"
  • ensure that the data stored by Piano reflects that audiences are not signed in. This
    ensures that when personalisation is introduced, the aggregated sign-in data won't
    include data from a time when we reported visitors as being signed in even though they were not.

While investigating this, we've established that Reverb doesn't use hashedId to track
visitors. This property is used for accounts/users contrary to our initial understanding.
From the Reverb code, it appears Reverb logic doesn't use the cookie, atuserid,
to persist visitor IDs. We're awaiting clarification on how to pass in the idclient value.
Based on these findings, we may not need the user object in the Reverb config after all.

In summation, since visitors are identified using the idclient value obtained from
atuserid (or the equivalent cookie in Reverb), I believe we should be able to correlate visitors and accounts if/when they are created since we'll begin to pass in the hashedId which we'll then be able to cross-reference against existing idclient UUIDs.

Please let me know if this position works for you @karinathomasbbc , in which case we can proceed
to merge the PR and fix forward the idclient configuration once we've heard from Reverb.
With this merged, we should then be able to enable Reverb on TEST for Pidgin and examine the
tracking beacons further for any needed improvements prior to going LIVE for the low impact trial.

For future reference:

https://support.piano.io/hc/en-us/articles/4468178673170-Concept-of-Visitors

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fine @alex-magana, thanks for the detailed response and for following up with Product.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Brill! I'll proceed to merge this.
Thanks Karina.

},
},
eventDetails,
};
};
Loading
Loading