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