diff --git a/src/routes/settings/Plus.tsx b/src/routes/settings/Plus.tsx index 1a2deaa..1d4a4a9 100644 --- a/src/routes/settings/Plus.tsx +++ b/src/routes/settings/Plus.tsx @@ -27,6 +27,7 @@ import eify from "~/utils/eify"; import party from "~/assets/party.gif"; import { LoadingShimmer } from "~/components/BalanceBox"; import { useI18n } from "~/i18n/context"; +import { subscriptionValid } from "~/utils/subscriptions"; function Perks(props: { alreadySubbed?: boolean }) { const i18n = useI18n(); @@ -114,10 +115,7 @@ function PlusCTA() { ); } - if ( - state.subscription_timestamp && - state.subscription_timestamp < Math.ceil(Date.now() / 1000) - ) { + if (!subscriptionValid(state.subscription_timestamp)) { setError( new Error( i18n.t("settings.plus.error_expired_subscription") diff --git a/src/state/megaStore.tsx b/src/state/megaStore.tsx index 99db5ac..8fb082f 100644 --- a/src/state/megaStore.tsx +++ b/src/state/megaStore.tsx @@ -23,6 +23,7 @@ import { checkBrowserCompatibility } from "~/logic/browserCompatibility"; import eify from "~/utils/eify"; import { timeout } from "~/utils/timeout"; import { ParsedParams } from "~/logic/waila"; +import { subscriptionValid } from "~/utils/subscriptions"; const MegaStoreContext = createContext(); @@ -81,13 +82,8 @@ export const Provider: ParentComponent = (props) => { existing_tab_detected: false, subscription_timestamp: undefined as number | undefined, get mutiny_plus(): boolean { - // No subscription - if (!state.subscription_timestamp) return false; - - // Expired - if (state.subscription_timestamp < Math.ceil(Date.now() / 1000)) - return false; - else return true; + // Make sure the subscription hasn't expired + return subscriptionValid(state.subscription_timestamp); }, needs_password: false, load_stage: "fresh" as LoadStage, diff --git a/src/utils/subscriptions.ts b/src/utils/subscriptions.ts new file mode 100644 index 0000000..0cc9cfe --- /dev/null +++ b/src/utils/subscriptions.ts @@ -0,0 +1,7 @@ +const GRACE = 60 * 60 * 24 * 3; // 3 days + +export function subscriptionValid(subscriptionExpiresTimestamp?: number) { + if (!subscriptionExpiresTimestamp) return false; + + return subscriptionExpiresTimestamp + GRACE > Math.ceil(Date.now() / 1000); +}