async function applyCoupon()

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;
  }
}