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

Use user benefits abtest #13137

Merged
merged 14 commits into from
Jan 21, 2025
Merged

Use user benefits abtest #13137

merged 14 commits into from
Jan 21, 2025

Conversation

rupertbates
Copy link
Member

@rupertbates rupertbates commented Jan 14, 2025

What does this change?

Adds the new user-benefits api as a source of information about what benefits (ad-free, hide support messaging) a user is entitled to.

The switch over to the new API is going to be managed with an server side AB test to allow us to control the amount of traffic going to the new service.

This PR requires support-service-lambdas to handles CORS

@rupertbates rupertbates requested review from a team as code owners January 14, 2025 15:50
Copy link

Hello 👋! When you're ready to run Chromatic, please apply the run_chromatic label to this PR.

You will need to reapply the label each time you want to run Chromatic.

Click here to see the Chromatic project.

Copy link

github-actions bot commented Jan 14, 2025

Size Change: +231 B (+0.03%)

Total Size: 884 kB

Filename Size Change
dotcom-rendering/dist/index.client.web.********************.js 45.1 kB +125 B (+0.28%)
dotcom-rendering/dist/SetABTests-importable.client.web.********************.js 3.8 kB +106 B (+2.87%)
ℹ️ View Unchanged
Filename Size
dotcom-rendering/dist/1076.client.web.********************.js 3.41 kB
dotcom-rendering/dist/1101.client.web.********************.js 4.81 kB
dotcom-rendering/dist/1262.client.web.********************.js 4.49 kB
dotcom-rendering/dist/1401.client.web.********************.js 441 B
dotcom-rendering/dist/1427.client.web.********************.js 4.94 kB
dotcom-rendering/dist/1477.client.web.********************.js 3.52 kB
dotcom-rendering/dist/1669.client.web.********************.js 12.3 kB
dotcom-rendering/dist/1714.client.web.********************.js 2.87 kB
dotcom-rendering/dist/2188.client.web.********************.js 6.52 kB
dotcom-rendering/dist/2444.client.web.********************.js 2.67 kB
dotcom-rendering/dist/2482.client.web.********************.js 44.8 kB
dotcom-rendering/dist/280.client.web.********************.js 531 B
dotcom-rendering/dist/3213.client.web.********************.js 5.42 kB
dotcom-rendering/dist/342.client.web.********************.js 4.18 kB
dotcom-rendering/dist/3524.client.web.********************.js 3.51 kB
dotcom-rendering/dist/3769.client.web.********************.js 22.7 kB
dotcom-rendering/dist/3789.client.web.********************.js 3.58 kB
dotcom-rendering/dist/39.client.web.********************.js 3.06 kB
dotcom-rendering/dist/3937.client.web.********************.js 3.85 kB
dotcom-rendering/dist/4170.client.web.********************.js 16.3 kB
dotcom-rendering/dist/4285.client.web.********************.js 6.55 kB
dotcom-rendering/dist/4501.client.web.********************.js 4.29 kB
dotcom-rendering/dist/4684.client.web.********************.js 3.17 kB
dotcom-rendering/dist/4878.client.web.********************.js 8.08 kB
dotcom-rendering/dist/4943.client.web.********************.js 3.69 kB
dotcom-rendering/dist/4982.client.web.********************.js 13.9 kB
dotcom-rendering/dist/5095.client.web.********************.js 4.17 kB
dotcom-rendering/dist/5223.client.web.********************.js 3.27 kB
dotcom-rendering/dist/5598.client.web.********************.js 4.49 kB
dotcom-rendering/dist/6021.client.web.********************.js 11.1 kB
dotcom-rendering/dist/6061.client.web.********************.js 3.63 kB
dotcom-rendering/dist/6073.client.web.********************.js 3.53 kB
dotcom-rendering/dist/6163.client.web.********************.js 3.83 kB
dotcom-rendering/dist/6577.client.web.********************.js 5.41 kB
dotcom-rendering/dist/6627.client.web.********************.js 10.4 kB
dotcom-rendering/dist/6876.client.web.********************.js 2.67 kB
dotcom-rendering/dist/6882.client.web.********************.js 12.6 kB
dotcom-rendering/dist/6903.client.web.********************.js 3.21 kB
dotcom-rendering/dist/6931.client.web.********************.js 2.63 kB
dotcom-rendering/dist/6940.client.web.********************.js 526 B
dotcom-rendering/dist/7116.client.web.********************.js 23 kB
dotcom-rendering/dist/719.client.web.********************.js 3.49 kB
dotcom-rendering/dist/7350.client.web.********************.js 3.32 kB
dotcom-rendering/dist/7364.client.web.********************.js 3.22 kB
dotcom-rendering/dist/7540.client.web.********************.js 2.72 kB
dotcom-rendering/dist/7546.client.web.********************.js 7.36 kB
dotcom-rendering/dist/7861.client.web.********************.js 619 B
dotcom-rendering/dist/8030.client.web.********************.js 4.18 kB
dotcom-rendering/dist/8067.client.web.********************.js 3.39 kB
dotcom-rendering/dist/8209.client.web.********************.js 3.64 kB
dotcom-rendering/dist/8592.client.web.********************.js 157 B
dotcom-rendering/dist/895.client.web.********************.js 5.14 kB
dotcom-rendering/dist/9072.client.web.********************.js 2.61 kB
dotcom-rendering/dist/9242.client.web.********************.js 3.76 kB
dotcom-rendering/dist/9288.client.web.********************.js 2.51 kB
dotcom-rendering/dist/9362.client.web.********************.js 20.3 kB
dotcom-rendering/dist/9558.client.web.********************.js 3.53 kB
dotcom-rendering/dist/9665.client.web.********************.js 4.04 kB
dotcom-rendering/dist/9735.client.web.********************.js 4.46 kB
dotcom-rendering/dist/9766.client.web.********************.js 3.4 kB
dotcom-rendering/dist/9790.client.web.********************.js 3.58 kB
dotcom-rendering/dist/Accessibility-importable.client.web.********************.js 6.71 kB
dotcom-rendering/dist/AdBlockAsk-importable.client.web.********************.js 2.85 kB
dotcom-rendering/dist/AdPortals-importable.client.web.********************.js 4.85 kB
dotcom-rendering/dist/AlreadyVisited-importable.client.web.********************.js 424 B
dotcom-rendering/dist/AppsEpic-importable.client.web.********************.js 3.63 kB
dotcom-rendering/dist/AppsFooter-importable.client.web.********************.js 2.7 kB
dotcom-rendering/dist/AppsLightboxImage-importable.client.web.********************.js 2.66 kB
dotcom-rendering/dist/AppsLightboxImageStore-importable.client.web.********************.js 2.55 kB
dotcom-rendering/dist/AudioAtomWrapper-importable.client.web.********************.js 2.59 kB
dotcom-rendering/dist/AudioPlayerWrapper-importable.client.web.********************.js 6.33 kB
dotcom-rendering/dist/AustralianTerritorySwitcher-importable.client.web.********************.js 2 kB
dotcom-rendering/dist/Branding-importable.client.web.********************.js 2.88 kB
dotcom-rendering/dist/braze-web-sdk-core.client.web.********************.js 37.2 kB
dotcom-rendering/dist/BrazeMessaging-importable.client.web.********************.js 1.97 kB
dotcom-rendering/dist/CalloutBlockComponent-importable.client.web.********************.js 6.74 kB
dotcom-rendering/dist/CalloutEmbedBlockComponent-importable.client.web.********************.js 5.77 kB
dotcom-rendering/dist/CardCommentCount-importable.client.web.********************.js 2.66 kB
dotcom-rendering/dist/Carousel-importable.client.web.********************.js 7.03 kB
dotcom-rendering/dist/CarouselForNewsletters-importable.client.web.********************.js 5.15 kB
dotcom-rendering/dist/ChartAtom-importable.client.web.********************.js 538 B
dotcom-rendering/dist/CommentCount-importable.client.web.********************.js 2.29 kB
dotcom-rendering/dist/Crossword-importable.client.web.********************.js 277 B
dotcom-rendering/dist/DiscussionApps-importable.client.web.********************.js 1.93 kB
dotcom-rendering/dist/DiscussionMeta-importable.client.web.********************.js 2.44 kB
dotcom-rendering/dist/DiscussionWeb-importable.client.web.********************.js 1.74 kB
dotcom-rendering/dist/DocumentBlockComponent-importable.client.web.********************.js 2.82 kB
dotcom-rendering/dist/Dropdown-importable.client.web.********************.js 1.72 kB
dotcom-rendering/dist/EditionSwitcherBanner-importable.client.web.********************.js 3.49 kB
dotcom-rendering/dist/EmbedBlockComponent-importable.client.web.********************.js 3.94 kB
dotcom-rendering/dist/EnhancePinnedPost-importable.client.web.********************.js 2.02 kB
dotcom-rendering/dist/FetchOnwardsData-importable.client.web.********************.js 1.94 kB
dotcom-rendering/dist/FilterKeyEventsToggle-importable.client.web.********************.js 3.8 kB
dotcom-rendering/dist/FocusStyles-importable.client.web.********************.js 617 B
dotcom-rendering/dist/FollowWrapper-importable.client.web.********************.js 2.52 kB
dotcom-rendering/dist/FooterLabel-importable.client.web.********************.js 343 B
dotcom-rendering/dist/FooterReaderRevenueLinks-importable.client.web.********************.js 3.5 kB
dotcom-rendering/dist/frameworks.client.web.********************.js 20.9 kB
dotcom-rendering/dist/FrontSubNav-importable.client.web.********************.js 7.37 kB
dotcom-rendering/dist/GetCricketScoreboard-importable.client.web.********************.js 6.26 kB
dotcom-rendering/dist/GetMatchNav-importable.client.web.********************.js 11.4 kB
dotcom-rendering/dist/GetMatchStats-importable.client.web.********************.js 7.97 kB
dotcom-rendering/dist/GetMatchTabs-importable.client.web.********************.js 2.58 kB
dotcom-rendering/dist/guardian-braze-components-banner.client.web.********************.js 15.8 kB
dotcom-rendering/dist/guardian-braze-components-end-of-article.client.web.********************.js 10.2 kB
dotcom-rendering/dist/GuideAtomWrapper-importable.client.web.********************.js 783 B
dotcom-rendering/dist/InstagramBlockComponent-importable.client.web.********************.js 2.9 kB
dotcom-rendering/dist/InteractiveAtomMessenger-importable.client.web.********************.js 853 B
dotcom-rendering/dist/InteractiveBlockComponent-importable.client.web.********************.js 8.49 kB
dotcom-rendering/dist/InteractiveContentsBlockComponent-importable.client.web.********************.js 3.74 kB
dotcom-rendering/dist/KeyEventsCarousel-importable.client.web.********************.js 5.68 kB
dotcom-rendering/dist/KnowledgeQuizAtom-importable.client.web.********************.js 3.55 kB
dotcom-rendering/dist/LatestLinks-importable.client.web.********************.js 6.38 kB
dotcom-rendering/dist/LightboxHash-importable.client.web.********************.js 436 B
dotcom-rendering/dist/LightboxLayout-importable.client.web.********************.js 6.52 kB
dotcom-rendering/dist/LiveBlogEpic-importable.client.web.********************.js 3.55 kB
dotcom-rendering/dist/LiveblogNotifications-importable.client.web.********************.js 4.82 kB
dotcom-rendering/dist/Liveness-importable.client.web.********************.js 4.72 kB
dotcom-rendering/dist/ManyNewsletterSignUp-importable.client.web.********************.js 7.6 kB
dotcom-rendering/dist/MapEmbedBlockComponent-importable.client.web.********************.js 5.89 kB
dotcom-rendering/dist/Metrics-importable.client.web.********************.js 2.69 kB
dotcom-rendering/dist/MostViewedFooter-importable.client.web.********************.js 3.85 kB
dotcom-rendering/dist/MostViewedFooterData-importable.client.web.********************.js 5.94 kB
dotcom-rendering/dist/MostViewedRightWithAd-importable.client.web.********************.js 5.12 kB
dotcom-rendering/dist/OnwardsUpper-importable.client.web.********************.js 5.32 kB
dotcom-rendering/dist/PersonalityQuizAtom-importable.client.web.********************.js 3.72 kB
dotcom-rendering/dist/ProfileAtom-importable.client.web.********************.js 543 B
dotcom-rendering/dist/ProfileAtomWrapper-importable.client.web.********************.js 802 B
dotcom-rendering/dist/PulsingDot-importable.client.web.********************.js 749 B
dotcom-rendering/dist/QandaAtom-importable.client.web.********************.js 543 B
dotcom-rendering/dist/ReaderRevenueDev-importable.client.web.********************.js 468 B
dotcom-rendering/dist/readerRevenueDevUtils.client.web.********************.js 1.75 kB
dotcom-rendering/dist/RelativeTime-importable.client.web.********************.js 2.53 kB
dotcom-rendering/dist/RichLinkComponent-importable.client.web.********************.js 6.11 kB
dotcom-rendering/dist/ScrollableFeature-importable.client.web.********************.js 7.1 kB
dotcom-rendering/dist/ScrollableHighlights-importable.client.web.********************.js 6.12 kB
dotcom-rendering/dist/ScrollableMedium-importable.client.web.********************.js 4.4 kB
dotcom-rendering/dist/ScrollableSmall-importable.client.web.********************.js 4.37 kB
dotcom-rendering/dist/SecureSignup-importable.client.web.********************.js 4.1 kB
dotcom-rendering/dist/SendTargetingParams-importable.client.web.********************.js 2.22 kB
dotcom-rendering/dist/sentry.client.web.********************.js 794 B
dotcom-rendering/dist/SetAdTargeting-importable.client.web.********************.js 485 B
dotcom-rendering/dist/ShareButton-importable.client.web.********************.js 919 B
dotcom-rendering/dist/shimport.client.web.********************.js 2.8 kB
dotcom-rendering/dist/ShowHideContainers-importable.client.web.********************.js 658 B
dotcom-rendering/dist/ShowMore-importable.client.web.********************.js 2.1 kB
dotcom-rendering/dist/SignInGateMain.client.web.********************.js 4.46 kB
dotcom-rendering/dist/SignInGateMainCheckoutComplete.client.web.********************.js 5.56 kB
dotcom-rendering/dist/SignInGateSelector-importable.client.web.********************.js 5.83 kB
dotcom-rendering/dist/SlideshowCarousel-importable.client.web.********************.js 4.37 kB
dotcom-rendering/dist/SlotBodyEnd-importable.client.web.********************.js 4.84 kB
dotcom-rendering/dist/SpotifyBlockComponent-importable.client.web.********************.js 5.71 kB
dotcom-rendering/dist/StickyBottomBanner-importable.client.web.********************.js 6.15 kB
dotcom-rendering/dist/StickyLiveblogAskWrapper-importable.client.web.********************.js 8.14 kB
dotcom-rendering/dist/SubNav-importable.client.web.********************.js 2.41 kB
dotcom-rendering/dist/TableOfContents-importable.client.web.********************.js 3.48 kB
dotcom-rendering/dist/TimelineAtom-importable.client.web.********************.js 1.23 kB
dotcom-rendering/dist/Titlepiece-importable.client.web.********************.js 13.5 kB
dotcom-rendering/dist/TopBar-importable.client.web.********************.js 9.29 kB
dotcom-rendering/dist/TopBarSupport-importable.client.web.********************.js 2.5 kB
dotcom-rendering/dist/TweetBlockComponent-importable.client.web.********************.js 1.13 kB
dotcom-rendering/dist/UnsafeEmbedBlockComponent-importable.client.web.********************.js 2.91 kB
dotcom-rendering/dist/VideoFacebookBlockComponent-importable.client.web.********************.js 5.9 kB
dotcom-rendering/dist/VineBlockComponent-importable.client.web.********************.js 2.78 kB
dotcom-rendering/dist/YoutubeBlockComponent-importable.client.web.********************.js 4.38 kB

compressed-size-action

},
);
if (!validateResponse(response)) {
throw new Error('invalid response');
Copy link
Member

Choose a reason for hiding this comment

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

presumably that will throw an alarm somewhere for us/sentry?

Copy link
Member Author

Choose a reason for hiding this comment

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

I guess? Not sure, this is the same as the previous implementation

Copy link
Member

Choose a reason for hiding this comment

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

true I guess the more pertinent question is how will you know that everything is working with the new API like it was before across a similar percentage of browsers

@rupertbates rupertbates force-pushed the use-user-benefits-abtest branch from 36dece9 to c6c44a0 Compare January 15, 2025 10:20
@rupertbates rupertbates marked this pull request as draft January 15, 2025 11:59
@rupertbates rupertbates force-pushed the use-user-benefits-abtest branch from c6c44a0 to 65ecce9 Compare January 15, 2025 12:14
@rupertbates rupertbates added the run_chromatic Runs chromatic when label is applied label Jan 16, 2025
@github-actions github-actions bot removed the run_chromatic Runs chromatic when label is applied label Jan 16, 2025
@rupertbates rupertbates force-pushed the use-user-benefits-abtest branch from d5cd1f1 to 8263a51 Compare January 16, 2025 16:01
@rupertbates rupertbates force-pushed the use-user-benefits-abtest branch from 2de412d to 549714f Compare January 20, 2025 14:50
@rupertbates rupertbates marked this pull request as ready for review January 20, 2025 14:53
@rupertbates rupertbates added the run_chromatic Runs chromatic when label is applied label Jan 20, 2025
@github-actions github-actions bot removed the run_chromatic Runs chromatic when label is applied label Jan 20, 2025
return Promise.reject('The user is not signed in');
}
if (shouldUseUserBenefitsApi()) {
return syncDataFromUserBenefitsApi(authStatus).then(persistResponse);
Copy link
Member

Choose a reason for hiding this comment

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

This is neat that both methods return value of the same shape (so can use persistResponse in both cases).

Copy link
Member

@tjmw tjmw left a comment

Choose a reason for hiding this comment

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

LGTM! 👍

): Promise<UserBenefits> => {
const response = await fetchJson(
window.guardian.config.page.userBenefitsApiUrl ??
'/USER_BENEFIT_API_NOT_FOUND',
Copy link
Member

Choose a reason for hiding this comment

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

Would it be clearer/more explicit to error in the case that the url isn't set in config? (Rather than making a request to a non-existent URL?)

Copy link
Member Author

Choose a reason for hiding this comment

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

I did think that as well, but I stuck with the way it was written already. Happy to change it, what do you think?

Copy link
Member Author

Choose a reason for hiding this comment

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

I went ahead and changed it.

Copy link
Member

Choose a reason for hiding this comment

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

Ah great, yeah I think it feels like there'd be less scope for confusion when debugging an issue that way 👍

@johnduffell
Copy link
Member

The screenshots in the descrtiption appear as broken images for me.

Out of interest wouldn't this have been ok as a client side "AB test" (which would presumably avoid splitting the cache?)

@rupertbates rupertbates force-pushed the use-user-benefits-abtest branch from c2ec95d to 9709c95 Compare January 20, 2025 16:38
Copy link
Member

@johnduffell johnduffell left a comment

Choose a reason for hiding this comment

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

nice work 👏

@rupertbates
Copy link
Member Author

The screenshots in the descrtiption appear as broken images for me.

Out of interest wouldn't this have been ok as a client side "AB test" (which would presumably avoid splitting the cache?)

The test needs to be used too early in the page load for a client side test because they rely on React being available.

@rupertbates rupertbates added the run_chromatic Runs chromatic when label is applied label Jan 20, 2025
@github-actions github-actions bot removed the run_chromatic Runs chromatic when label is applied label Jan 20, 2025
@rupertbates rupertbates merged commit 73f02a4 into main Jan 21, 2025
31 checks passed
@rupertbates rupertbates deleted the use-user-benefits-abtest branch January 21, 2025 09:54
@prout-bot
Copy link

Seen on PROD (merged by @rupertbates 7 minutes and 47 seconds ago) Please check your changes!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants