flotilla/src/app/components/hosting/RelayCreate.svelte

73 lines
2.2 KiB
Svelte
Raw Normal View History

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"
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 now, or the space layout prompts for it and displaces the payment modals.
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
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} />