chore: remove hard-coded max instance counts and prefer subscription_quantity

This commit is contained in:
Ben Allfree 2025-01-10 04:05:41 -08:00
parent a1d7f65aa6
commit ad64887ba0
4 changed files with 20 additions and 28 deletions

View File

@ -1,8 +1,4 @@
import { import { type InstanceFields, parseBoolean } from 'pockethost/common'
type InstanceFields,
parseBoolean,
SubscriptionType,
} from 'pockethost/common'
/** /**
* These environment variables default to pointing to the production build so * These environment variables default to pointing to the production build so
@ -33,15 +29,6 @@ const mkPath = (...paths: string[]) => {
return paths.filter((v) => !!v).join('/') return paths.filter((v) => !!v).join('/')
} }
export const MAX_INSTANCE_COUNTS = {
[SubscriptionType.Free]: 25,
[SubscriptionType.Legacy]: 25,
[SubscriptionType.Founder]: 2147483647, // https://discord.com/channels/1128192380500193370/1128192380500193373/1296340516044017718
[SubscriptionType.Premium]: 250,
[SubscriptionType.Flounder]: 250, // Added to get the error away
}
export const FREE_MAX_INSTANCE_COUNT = 25
export const APP_URL = (...paths: string[]) => { export const APP_URL = (...paths: string[]) => {
return `${PUBLIC_APP_URL}/${mkPath(...paths)}` return `${PUBLIC_APP_URL}/${mkPath(...paths)}`
} }

View File

@ -1,12 +1,16 @@
<script lang="ts"> <script lang="ts">
import { MAX_INSTANCE_COUNTS } from '$src/env' import {
import { globalInstancesStore, userSubscriptionType } from '$util/stores' globalInstancesStore,
userSubscriptionType,
userStore,
} from '$util/stores'
import { values } from '@s-libs/micro-dash' import { values } from '@s-libs/micro-dash'
import InstanceList from './InstanceList.svelte' import InstanceList from './InstanceList.svelte'
import { SubscriptionType } from 'pockethost/common' import { SubscriptionType } from 'pockethost/common'
import { faPlus } from '@fortawesome/free-solid-svg-icons' import { faPlus } from '@fortawesome/free-solid-svg-icons'
import Fa from 'svelte-fa' import Fa from 'svelte-fa'
$: maxInstances = $userStore?.subscription_quantity || 0
$: instanceCount = values($globalInstancesStore).length $: instanceCount = values($globalInstancesStore).length
</script> </script>
@ -29,17 +33,17 @@
<progress <progress
class="progress progress-primary w-48 md:w-80" class="progress progress-primary w-48 md:w-80"
value={instanceCount} value={instanceCount}
max={MAX_INSTANCE_COUNTS[$userSubscriptionType]} max={maxInstances}
></progress> ></progress>
<div> <div>
{#if $userSubscriptionType === SubscriptionType.Founder} {#if $userSubscriptionType === SubscriptionType.Founder}
{instanceCount}/<a {instanceCount}/<a
href="https://discord.com/channels/1128192380500193370/1128192380500193373/1296340516044017718" href="https://discord.com/channels/1128192380500193370/1128192380500193373/1296340516044017718"
class="link" class="link"
target="_blank">{MAX_INSTANCE_COUNTS[$userSubscriptionType]}</a target="_blank">{maxInstances}</a
> >
{:else} {:else}
{instanceCount}/{MAX_INSTANCE_COUNTS[$userSubscriptionType]} {instanceCount}/{maxInstances}
{/if} {/if}
{#if $userSubscriptionType === SubscriptionType.Free} {#if $userSubscriptionType === SubscriptionType.Free}
<a href="/pricing" class="link text-xs text-success">Upgrade</a> <a href="/pricing" class="link text-xs text-success">Upgrade</a>

View File

@ -3,19 +3,18 @@
globalInstancesStore, globalInstancesStore,
userSubscriptionType, userSubscriptionType,
versions, versions,
userStore,
} from '$util/stores' } from '$util/stores'
import { values } from '@s-libs/micro-dash' import { values } from '@s-libs/micro-dash'
import Creator from './Creator.svelte' import Creator from './Creator.svelte'
import Paywall from './Paywall.svelte' import Paywall from './Paywall.svelte'
import { MAX_INSTANCE_COUNTS } from '$src/env'
$: maxInstances = $userStore?.subscription_quantity || 0
let instanceCount = 0 let instanceCount = 0
let canCreate = false let canCreate = false
$: { $: {
instanceCount = values($globalInstancesStore).length instanceCount = values($globalInstancesStore).length
canCreate = canCreate = instanceCount < maxInstances && $versions.length > 0
instanceCount < MAX_INSTANCE_COUNTS[$userSubscriptionType] &&
$versions.length > 0
} }
</script> </script>

View File

@ -1,7 +1,8 @@
<script lang="ts"> <script lang="ts">
import { MAX_INSTANCE_COUNTS } from '$src/env' import { userSubscriptionType, userStore } from '$util/stores'
import { userSubscriptionType } from '$util/stores' import { PLAN_NAMES } from 'pockethost/common'
import { PLAN_NAMES, SubscriptionType } from 'pockethost/common'
$: maxInstances = $userStore?.subscription_quantity || 0
</script> </script>
<div class="card max-w-sm bg-base-100 shadow-xl"> <div class="card max-w-sm bg-base-100 shadow-xl">
@ -9,8 +10,9 @@
<h2 class="card-title">Paywall!</h2> <h2 class="card-title">Paywall!</h2>
<p>Oof. You hit a paywall.</p> <p>Oof. You hit a paywall.</p>
<p class="text-error"> <p class="text-error">
You're only allowed {MAX_INSTANCE_COUNTS[$userSubscriptionType]} projects on You're only allowed {maxInstances} projects on the {PLAN_NAMES[
the {PLAN_NAMES[$userSubscriptionType]} plan. $userSubscriptionType
]} plan.
</p> </p>
<p> <p>
But that's okay, we know you want to support PocketHost if you love it But that's okay, we know you want to support PocketHost if you love it