async function getSubscriptions()

in typescript/src/user/user.ts [50:100]


async function getSubscriptions(
  subscriptionIds: string[],
): Promise<SubscriptionStatusResponse> {
  const subs: SubscriptionEmpty[] = [];
  const toGet = subscriptionIds.map((subscriptionId) =>
    new SubscriptionEmpty().setSubscriptionId(subscriptionId),
  );

  for await (const sub of dynamoMapper.batchGet(toGet)) {
    subs.push(sub);
  }

  const sortedSubs = subs.sort(
    (subscriptionA: Subscription, subscriptionB: Subscription) => {
      const endTimeA =
        (subscriptionA.endTimestamp &&
          Date.parse(subscriptionA.endTimestamp)) ||
        0;
      const endTimeB =
        (subscriptionB.endTimestamp &&
          Date.parse(subscriptionB.endTimestamp)) ||
        0;
      return endTimeA - endTimeB;
    },
  );

  const now = new Date();

  const subscriptionStatuses: SubscriptionStatus[] = sortedSubs.map((sub) => {
    const end = new Date(Date.parse(sub.endTimestamp));
    const endWithGracePeriod = plusDays(end, 30);
    const valid: boolean = now.getTime() <= endWithGracePeriod.getTime();
    const gracePeriod: boolean = now.getTime() > end.getTime() && valid;

    return {
      subscriptionId: sub.subscriptionId,
      from: sub.startTimestamp,
      to: sub.endTimestamp,
      cancellationTimestamp: sub.cancellationTimestamp,
      valid: valid,
      gracePeriod: gracePeriod,
      autoRenewing: sub.autoRenewing,
      productId: sub.productId,
      softOptInProductName: mapPlatformToSoftOptInProductName(sub.platform),
    };
  });

  return {
    subscriptions: subscriptionStatuses,
  };
}