Rewarded videos ads to test a skin (#3120)

## Description:

Added rewarded video ads for skin trials via Playwire's
manuallyCreateRewardUi API. Users can now click "Try me" to watch a
video ad and receive a temporary skin trial. Upon completion a temporary
flare is granted to the player so they have ~5 minutes to use the skin.

added getPlayerCosmeticsRefs and getPlayerCosmetics to Cosmetics.ts to
centralize cosmetic retrieval & validation.

<img width="801" height="534" alt="Screenshot 2026-02-10 at 7 58 14 PM"
src="https://github.com/user-attachments/assets/51cc378c-2feb-4692-8cf2-20ee54cea3b8"
/>

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evan
This commit is contained in:
Evan
2026-02-11 20:52:48 -08:00
committed by GitHub
parent d80b2d2bb9
commit 97d0a05d58
14 changed files with 548 additions and 89 deletions
+25
View File
@@ -125,6 +125,31 @@ export async function createCheckoutSession(
}
}
export async function grantTemporaryFlare(flare: string): Promise<boolean> {
try {
const response = await fetch(`${getApiBase()}/flares_granted/temporary`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: await getAuthHeader(),
},
body: JSON.stringify({ flare }),
});
if (!response.ok) {
console.error(
"grantTemporaryFlare: request failed",
response.status,
response.statusText,
);
return false;
}
return true;
} catch (e) {
console.error("grantTemporaryFlare: request failed", e);
return false;
}
}
export function getApiBase() {
const domainname = getAudience();