From 358b12ada7745a4a4f7d7ede4eff9f08cdfdd80e Mon Sep 17 00:00:00 2001 From: Arman Date: Tue, 18 Mar 2025 17:37:18 +0100 Subject: [PATCH] feat: domains fixes --- .../domains/+page.svelte | 17 +-- .../domains/add-domain/+page.svelte | 11 +- .../domains/domain-[domain]/+page.svelte | 6 +- .../domain-[domain]/addPresetModal.svelte | 45 ++++++- .../domains/domain-[domain]/store.ts | 2 + .../domains/recordsCard.svelte | 119 +++++++++--------- .../domains/retryDomainModal.svelte | 72 ++++++++--- 7 files changed, 170 insertions(+), 102 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/domains/+page.svelte b/src/routes/(console)/organization-[organization]/domains/+page.svelte index 4abfa7f3c..a61988f92 100644 --- a/src/routes/(console)/organization-[organization]/domains/+page.svelte +++ b/src/routes/(console)/organization-[organization]/domains/+page.svelte @@ -97,7 +97,7 @@ - + {/if} {/if} - +{/if} diff --git a/src/routes/(console)/organization-[organization]/domains/add-domain/+page.svelte b/src/routes/(console)/organization-[organization]/domains/add-domain/+page.svelte index 4760dce96..5b823733b 100644 --- a/src/routes/(console)/organization-[organization]/domains/add-domain/+page.svelte +++ b/src/routes/(console)/organization-[organization]/domains/add-domain/+page.svelte @@ -12,7 +12,7 @@ import { Dependencies } from '$lib/constants'; import type { Domain } from '$lib/sdk/domains'; - const backPage = `${base}/project-${$page.params.organization}/domains`; + const backPage = `${base}/organization-${$page.params.organization}/domains`; let domainName = ''; let domain: Domain; @@ -31,7 +31,7 @@ } - + {#if domain} {:else} @@ -54,11 +54,4 @@ {/if} - - - - {#if domain} - - {/if} - diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/+page.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/+page.svelte index cb623b7db..81d43d5d3 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/+page.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/+page.svelte @@ -18,7 +18,7 @@ import { IconDownload, IconPlus, IconUpload } from '@appwrite.io/pink-icons-svelte'; import { ViewSelector } from '$lib/components'; import { View } from '$lib/helpers/load'; - import { columns } from './store'; + import { columns, presets } from './store'; import CreateRecordModal from './createRecordModal.svelte'; import Table from './table.svelte'; import AddPresetModal from './addPresetModal.svelte'; @@ -30,8 +30,6 @@ let showPresetModal = false; let showImportModal = false; let selectedPreset = ''; - - const presets = ['Zoho', 'Mailgun', 'Outlook', 'Proton Mail', 'iCloud', 'Google Workspace']; @@ -54,7 +52,7 @@ - + diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/addPresetModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/addPresetModal.svelte index e9d55fcda..ac8a02d13 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/addPresetModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/addPresetModal.svelte @@ -7,23 +7,57 @@ import { capitalize } from '$lib/helpers/string'; import { sdk } from '$lib/stores/sdk'; import { page } from '$app/stores'; + import type { DnsRecordsList } from '$lib/sdk/domains'; + import { presets } from './store'; + import { invalidate } from '$app/navigation'; + import { Dependencies } from '$lib/constants'; export let show = false; - export let selectedPreset; + export let selectedPreset: (typeof presets)[number]; + let records: DnsRecordsList; let error = ''; - async function fetchPreset() { switch (selectedPreset.toLowerCase()) { //TODO: finish switch statement case 'zoho': - return await sdk.forConsole.domains.getPresetZoho($page.params.domain); + records = await sdk.forConsole.domains.getPresetZoho($page.params.domain); + return records; + case 'google workspace': + records = await sdk.forConsole.domains.getPresetGoogleWorkspace( + $page.params.domain + ); + return records; + case 'outlook': + records = await sdk.forConsole.domains.getPresetOutlook($page.params.domain); + return records; + case 'proton mail': + records = await sdk.forConsole.domains.getPresetProtonMail($page.params.domain); + return records; + case 'mailgun': + records = await sdk.forConsole.domains.getPresetMailgun($page.params.domain); + return records; + case 'icloud': + records = await sdk.forConsole.domains.getPresetICloud($page.params.domain); + return records; } } async function handleSubmit() { try { //TODO: create DNS records - + if (records.total) { + const promises = records.dnsRecords.map((record) => + sdk.forConsole.domains.createRecordMX( + $page.params.domain, + record.name, + record.value, + record.ttl, + record.priority + ) + ); + await Promise.all(promises); + } + invalidate(Dependencies.DOMAIN); show = false; addNotification({ type: 'success', @@ -69,8 +103,7 @@ {/each} {:then presetData} - {JSON.stringify(presetData)} - {#each presetData as record} + {#each presetData.dnsRecords as record} {record.type} {record.name} diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts index 0774cc763..86a2060d8 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts @@ -66,3 +66,5 @@ export const recordTypes = [ helper: 'ALIAS records are similar to CNAMEs but can be used for the root domain, allowing you to point your domain to another domain or server.' } ]; + +export const presets = ['Zoho', 'Mailgun', 'Outlook', 'Proton Mail', 'iCloud', 'Google Workspace']; diff --git a/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte b/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte index 8b6ec2295..56993e08e 100644 --- a/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte +++ b/src/routes/(console)/organization-[organization]/domains/recordsCard.svelte @@ -1,20 +1,20 @@
- - - - {domain.domain} - - {#if verified === false} - - {/if} - - - - Add the following nameservers on your DNS provider. Note that DNS changes may - take time to propagate fully. - - - - - - Type - Value - - - {#each nameservers as nameserver} - - NS - {nameserver} - - - - - - - - - {/each} - +
+ + Nameservers + + +
+ - - - A list of all domain providers and their DNS setting is available here. - + {domain.domain} + + {#if verified === false} + + {:else} + + {/if} + + Add the following nameservers on your DNS provider. Note that DNS changes may take + time to propagate fully. + + + + + Type + Value + + + {#each nameservers as nameserver} + + NS + + + {nameserver} + + + {/each} + + + A list of all domain providers and their DNS setting is available here. + - - +
diff --git a/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte b/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte index 0afc74175..80f9ce0d7 100644 --- a/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/retryDomainModal.svelte @@ -4,28 +4,41 @@ import { sdk } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; import { invalidate } from '$app/navigation'; - import type { Models } from '@appwrite.io/console'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { Dependencies } from '$lib/constants'; - import RecordsCard from './recordsCard.svelte'; + import { Input, InteractiveText, Layout, Table, Typography } from '@appwrite.io/pink-svelte'; + import { Link } from '$lib/elements'; + import { consoleVariables } from '$routes/(console)/store'; + import type { Domain } from '$lib/sdk/domains'; export let show = false; - export let selectedDomain: Models.ProxyRule; + export let selectedDomain: Domain; + let nameservers = $consoleVariables?._APP_DOMAINS_NAMESERVERS.split(',') ?? [ + 'ns1.appwrite.io', + 'ns2.appwrite.io' + ]; let error = null; async function retryDomain() { try { - await sdk.forProject.proxy.updateRuleVerification(selectedDomain.$id); - await invalidate(Dependencies.SITES_DOMAINS); + const domain = await sdk.forConsole.domains.updateNameservers(selectedDomain.$id); show = false; - addNotification({ - type: 'success', - message: `${selectedDomain.domain} has been deleted` - }); - trackEvent(Submit.DomainDelete); + if (domain.nameservers === 'Appwrite') { + addNotification({ + type: 'error', + message: `${selectedDomain.domain} has been verified` + }); + } else { + addNotification({ + type: 'error', + message: `Domain verification failed. Please check your domain settings or try again later` + }); + } + await invalidate(Dependencies.DOMAINS); + trackEvent(Submit.DomainUpdateVerification); } catch (e) { error = e; - trackError(e, Submit.DomainDelete); + trackError(e, Submit.DomainUpdateVerification); } } @@ -35,10 +48,41 @@ - {#if selectedDomain} - - {/if} + + + {selectedDomain.domain} + \ + + + Add the following nameservers on your DNS provider. Note that DNS changes may take time + to propagate fully. + + + + + Type + Value + + + {#each nameservers as nameserver} + + NS + + + {nameserver} + + + {/each} + + + A list of all domain providers and their DNS setting is available here. +