2026-07-15 16:30:17 +00:00
|
|
|
<script lang="ts">
|
2026-07-28 16:16:26 +00:00
|
|
|
import {publish} from "@welshman/app"
|
2026-07-15 16:30:17 +00:00
|
|
|
import RelayForm, {type RelayFormValues} from "@app/components/hosting/RelayForm.svelte"
|
|
|
|
|
import PaymentDialog from "@app/components/hosting/PaymentDialog.svelte"
|
|
|
|
|
import PaymentSetup from "@app/components/hosting/PaymentSetup.svelte"
|
2026-07-28 16:16:26 +00:00
|
|
|
import {roomLists, user} from "@app/core"
|
2026-09-08 17:23:22 +00:00
|
|
|
import {navigate, pushModal} from "@app/modal"
|
2026-07-15 16:30:17 +00:00
|
|
|
import {makeSpacePath} from "@app/routes"
|
|
|
|
|
import {HOSTING_RELAY_DOMAIN} from "@app/env"
|
|
|
|
|
import {
|
|
|
|
|
autopayConfigured,
|
|
|
|
|
createRelay,
|
|
|
|
|
ensureSessionTenant,
|
|
|
|
|
getHostedRelayUrl,
|
|
|
|
|
getTenant,
|
|
|
|
|
listTenantInvoices,
|
|
|
|
|
reconcileTenant,
|
|
|
|
|
selectPayableInvoice,
|
|
|
|
|
} from "@app/hosting"
|
|
|
|
|
|
|
|
|
|
const createRelayForActiveTenant = (values: RelayFormValues) => {
|
|
|
|
|
const defaults = {
|
|
|
|
|
info_name: "",
|
|
|
|
|
info_icon: "",
|
|
|
|
|
info_description: "",
|
|
|
|
|
policy_public_read: 0,
|
|
|
|
|
policy_public_write: 0,
|
|
|
|
|
policy_public_join: 0,
|
|
|
|
|
policy_strip_signatures: 0,
|
|
|
|
|
groups_enabled: 1,
|
|
|
|
|
management_enabled: 1,
|
2026-09-17 16:16:52 +00:00
|
|
|
members_can_invite: 1,
|
2026-07-15 16:30:17 +00:00
|
|
|
push_enabled: 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const overrides = {
|
2026-07-28 16:16:26 +00:00
|
|
|
tenant_pubkey: $user.pubkey,
|
2026-07-15 16:30:17 +00:00
|
|
|
zooid_domain: HOSTING_RELAY_DOMAIN,
|
|
|
|
|
blossom_enabled: values.plan_id === "free" ? 0 : 1,
|
|
|
|
|
livekit_enabled: values.plan_id === "free" ? 0 : 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return createRelay({...defaults, ...values, ...overrides})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleSubmit = async (values: RelayFormValues) => {
|
|
|
|
|
await ensureSessionTenant()
|
|
|
|
|
|
|
|
|
|
const relay = await createRelayForActiveTenant(values)
|
|
|
|
|
const url = getHostedRelayUrl(relay)
|
|
|
|
|
|
|
|
|
|
// Join the space we just made, otherwise the space layout prompts us to join
|
|
|
|
|
// it, displacing the payment modals below.
|
2026-07-28 16:16:26 +00:00
|
|
|
await $roomLists.addRelay(url).then(publish)
|
|
|
|
|
await reconcileTenant($user.pubkey)
|
2026-07-15 16:30:17 +00:00
|
|
|
|
2026-07-28 16:16:26 +00:00
|
|
|
const tenant = await getTenant($user.pubkey)
|
2026-07-15 16:30:17 +00:00
|
|
|
|
2026-09-08 17:23:22 +00:00
|
|
|
await navigate(makeSpacePath(url, "admin"), {replaceState: true})
|
2026-07-15 16:30:17 +00:00
|
|
|
|
|
|
|
|
if (values.plan_id !== "free" && !autopayConfigured(tenant)) {
|
2026-07-28 16:16:26 +00:00
|
|
|
const invoice = selectPayableInvoice(await listTenantInvoices($user.pubkey))
|
2026-07-15 16:30:17 +00:00
|
|
|
|
|
|
|
|
if (invoice) {
|
|
|
|
|
pushModal(PaymentDialog, {invoice})
|
|
|
|
|
} else {
|
|
|
|
|
pushModal(PaymentSetup, {})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<RelayForm mode="create" submitLabel="Create Space" onSubmit={handleSubmit} />
|