enum PromoValues { NONE, } enum RestrictionType { DATE, } async function getPaymentSpeedDefinitions(context) { let promoType = PROMO_TYPE.NONE; if (await tdClient.isSwitchOn(PROMOTIONS)) { promoType = await getPromoType(context); } return await context.dao.paymentSpeed.findAllPOaymentSpeedDefinitions(promoType); } async function getPromoType(context): PromoType { const flagResult = await tdclient.getFlag(flag_name, { carrierId: context.carrierId }) const promoDetails = flagResult.jsonValues(); if (!promoDetails) { return PromoValues.NONE; } const { restriction, promoType } = promoDetails; switch (restriction.type as RestrictionType) { case RestrictionType.DATE: return getDateRestrictionType(promoDetails); case DEFAULT: console.error('unsupported promo type', { context } ); return PromoValues.NONE; } } function getDateRestrictionType({ restriction: { start, end, tz }, promoType }) { const now = moment.tz(tz); const start = moment.tz(tz, start); const end = moment.tz(tz, end); if (now.between(start, end)) { return promoType; } return PromoValues.NONE; }