import { RedeemableToken } from '../models/redeemable-token'; import { RedeemableTokenResponsePost } from '../types/redeemable-token'; import { InvalidResponseError } from '../errors'; /** * Maps membership response to redeemableToken model. * @param tokenData Response to redeemToken request. * @throws {InvalidResponseError} If the membership request does not return the expected response. * @returns RedeemableToken instance. */ export function mapRedeemTokenResponse (tokenData: RedeemableTokenResponsePost): RedeemableToken { const mappedTokenData: object = { id: tokenData.id, creationDateTime: tokenData.creationDateTime, // if membership does not return accessDuration default to null accessDuration: tokenData.redeemableFor.accessDuration || null, accessLicenceId: tokenData.redeemableFor.accessLicenceId, accessType: tokenData.redeemableFor.type, // if membership does not return validUntil default to null validUntil: tokenData.validUntil || null, redeemability: tokenData.redeemability, status: tokenData.status }; if (Object.values(mappedTokenData).includes(undefined)) { throw new InvalidResponseError('Membership redeemable token data response contains undefined values', { mappedTokenData }); } return new RedeemableToken(mappedTokenData); }