in src/utils/fxa.ts [355:398]
async function applyCoupon(
bearerToken: string,
couponCodeId: string,
): Promise<void> {
try {
const subs = (await getSubscriptions(bearerToken)) ?? [];
let subscriptionId;
for (const sub of subs) {
if (
sub &&
sub.productId &&
sub.productId === process.env.PREMIUM_PRODUCT_ID
) {
subscriptionId = sub.subscriptionId;
}
}
if (subscriptionId) {
const applyCouponUrl = `${envVars.OAUTH_ACCOUNT_URI}/oauth/subscriptions/coupon/apply`;
const response = await fetch(applyCouponUrl, {
method: "PUT",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
Authorization: `Bearer ${bearerToken}`,
},
body: JSON.stringify({
promotionId: couponCodeId,
subscriptionId,
}),
});
const responseJson = await response.json();
if (!response.ok) throw new Error(responseJson);
logger.info("apply_fxa_coupon_success");
}
} catch (e) {
if (e instanceof Error) {
logger.error(
"apply_fxa_coupon",
JSON.stringify({ stack: e.stack, message: e.message }),
);
}
throw e;
}
}