diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte index e24c069054..284afdd20c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.svelte @@ -18,6 +18,8 @@ import { onMount } from 'svelte'; import { ConnectRepoModal } from '$lib/components/git/index.js'; import { isValueOfStringEnum } from '$lib/helpers/types.js'; + import { isCloud } from '$lib/system'; + import { project } from '$routes/(console)/project-[region]-[project]/store'; const routeBase = `${base}/project-${page.params.region}-${page.params.project}/functions/function-${page.params.function}/domains`; @@ -29,8 +31,8 @@ let behaviour: 'REDIRECT' | 'BRANCH' | 'ACTIVE' = $state('ACTIVE'); let domainName = $state(''); let redirect: string = $state(null); - let statusCode = $state(307); let branch: string = $state(null); + let statusCode = $state(StatusCode.TemporaryRedirect307); onMount(() => { if ( @@ -45,6 +47,21 @@ }); async function addDomain() { + let domain = data.domains?.domains.find((d) => d.domain === domainName); + + if (!domain && isCloud) { + try { + domain = await sdk.forConsole.domains.create($project.teamId, domainName); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + + return; + } + } + try { let rule: Models.ProxyRule; if (behaviour === 'BRANCH') { @@ -52,10 +69,9 @@ .forProject(page.params.region, page.params.project) .proxy.createFunctionRule(domainName, page.params.function, branch); } else if (behaviour === 'REDIRECT') { - const sc = Object.values(StatusCode).find((code) => parseInt(code) === statusCode); rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, $protocol + redirect, sc); + .proxy.createRedirectRule(domainName, $protocol + redirect, statusCode); } else if (behaviour === 'ACTIVE') { rule = await sdk .forProject(page.params.region, page.params.project) diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.ts index 773724c3c3..d623504b3a 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/+page.ts @@ -2,23 +2,26 @@ import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { RuleTrigger, RuleType } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; +import { isCloud } from '$lib/system'; export const load = async ({ parent, depends, params }) => { const { function: func } = await parent(); depends(Dependencies.DOMAINS, Dependencies.FUNCTION_DOMAINS); - const [domains, installations] = await Promise.all([ + const [rules, installations, domains] = await Promise.all([ sdk .forProject(params.region, params.project) .proxy.listRules([ Query.equal('type', RuleType.DEPLOYMENT), Query.equal('trigger', RuleTrigger.MANUAL) ]), - sdk.forProject(params.region, params.project).vcs.listInstallations() + sdk.forProject(params.region, params.project).vcs.listInstallations(), + isCloud ? sdk.forConsole.domains.list() : Promise.resolve(null) ]); return { func, + rules, domains, installations, branches: diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts index 6e84864d17..5fbb56d854 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts @@ -9,10 +9,11 @@ export const load = async ({ depends, params }) => { let domain: Domain; let domainsList: DomainsList; if (isCloud) { - [domain, domainsList] = await Promise.all([ - sdk.forConsole.domains.get(params.domain), - sdk.forConsole.domains.list() - ]); + domainsList = await sdk.forConsole.domains.list(); + const domainId = domainsList.domains.find( + (domain: Domain) => domain.domain === params.domain + ).$id; + domain = await sdk.forConsole.domains.get(domainId); } return { diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte index dbaeb62442..6267fa40b0 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.svelte @@ -9,10 +9,12 @@ import { Dependencies } from '$lib/constants'; import { writable } from 'svelte/store'; import { onMount } from 'svelte'; + import { isCloud } from '$lib/system'; + import { project } from '$routes/(console)/project-[region]-[project]/store'; const routeBase = `${base}/project-${page.params.region}-${page.params.project}/settings/domains`; - // let { data } = $props(); + let { data } = $props(); let formComponent: Form; let isSubmitting = $state(writable(false)); @@ -25,6 +27,21 @@ }); async function addDomain() { + let domain = data.domains?.domains.find((d) => d.domain === domainName); + + if (!domain && isCloud) { + try { + domain = await sdk.forConsole.domains.create($project.teamId, domainName); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + + return; + } + } + try { const rule = await sdk .forProject(page.params.region, page.params.project) diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.ts index d4e21a9177..a5408d22d3 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/+page.ts @@ -2,20 +2,23 @@ import { Query } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { RuleTrigger, RuleType } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants.js'; +import { isCloud } from '$lib/system'; export const load = async ({ depends, params }) => { depends(Dependencies.DOMAINS); - const [rules] = await Promise.all([ + const [rules, domains] = await Promise.all([ sdk .forProject(params.region, params.project) .proxy.listRules([ Query.equal('type', RuleType.API), Query.equal('trigger', RuleTrigger.MANUAL) - ]) + ]), + isCloud ? sdk.forConsole.domains.list() : Promise.resolve(null) ]); return { - rules + rules, + domains }; }; diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts index 6e84864d17..5fbb56d854 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts @@ -9,10 +9,11 @@ export const load = async ({ depends, params }) => { let domain: Domain; let domainsList: DomainsList; if (isCloud) { - [domain, domainsList] = await Promise.all([ - sdk.forConsole.domains.get(params.domain), - sdk.forConsole.domains.list() - ]); + domainsList = await sdk.forConsole.domains.list(); + const domainId = domainsList.domains.find( + (domain: Domain) => domain.domain === params.domain + ).$id; + domain = await sdk.forConsole.domains.get(domainId); } return { diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte index 2fd0adecde..582e6fe1d0 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte @@ -16,13 +16,15 @@ Adapter, BuildRuntime, Framework, - StatusCode, - type Models + type Models, + StatusCode } from '@appwrite.io/console'; import { statusCodeOptions } from '$lib/stores/domains'; import { writable } from 'svelte/store'; import { onMount } from 'svelte'; import { ConnectRepoModal } from '$lib/components/git/index.js'; + import { project } from '$routes/(console)/project-[region]-[project]/store'; + import { isCloud } from '$lib/system'; const routeBase = `${base}/project-${page.params.region}-${page.params.project}/sites/site-${page.params.site}/domains`; @@ -34,8 +36,8 @@ let behaviour: 'REDIRECT' | 'BRANCH' | 'ACTIVE' = $state('ACTIVE'); let domainName = $state(''); let redirect: string = $state(null); - let statusCode = $state(307); let branch: string = $state(null); + let statusCode = $state(StatusCode.TemporaryRedirect307); onMount(() => { if ( @@ -50,6 +52,21 @@ }); async function addDomain() { + let domain = data.domains?.domains.find((d) => d.domain === domainName); + + if (!domain && isCloud) { + try { + domain = await sdk.forConsole.domains.create($project.teamId, domainName); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + + return; + } + } + try { let rule: Models.ProxyRule; if (behaviour === 'BRANCH') { @@ -57,10 +74,9 @@ .forProject(page.params.region, page.params.project) .proxy.createSiteRule(domainName, page.params.site, branch); } else if (behaviour === 'REDIRECT') { - const sc = Object.values(StatusCode).find((code) => parseInt(code) === statusCode); rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, $protocol + redirect, sc); + .proxy.createRedirectRule(domainName, $protocol + redirect, statusCode); } else if (behaviour === 'ACTIVE') { rule = await sdk .forProject(page.params.region, page.params.project) diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.ts index 86f69c2f42..d49b1c7372 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.ts @@ -2,24 +2,27 @@ import { Query } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { RuleTrigger, RuleType } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants.js'; +import { isCloud } from '$lib/system'; export const load = async ({ parent, depends, params }) => { const { site } = await parent(); depends(Dependencies.DOMAINS, Dependencies.SITES_DOMAINS); - const [rules, installations] = await Promise.all([ + const [rules, installations, domains] = await Promise.all([ sdk .forProject(params.region, params.project) .proxy.listRules([ Query.equal('type', RuleType.DEPLOYMENT), Query.equal('trigger', RuleTrigger.MANUAL) ]), - sdk.forProject(params.region, params.project).vcs.listInstallations() + sdk.forProject(params.region, params.project).vcs.listInstallations(), + isCloud ? sdk.forConsole.domains.list() : Promise.resolve(null) ]); return { site, rules, + domains, installations, branches: site?.installationId && site?.providerRepositoryId diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts index db8caef3a7..9a5223cb8b 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts @@ -1,19 +1,21 @@ import { sdk } from '$lib/stores/sdk'; -import { Dependencies } from '$lib/constants.js'; import { isCloud } from '$lib/system'; +import { Dependencies } from '$lib/constants.js'; import type { Domain, DomainsList } from '$lib/sdk/domains.js'; export const load = async ({ parent, depends, params }) => { const { site } = await parent(); - depends(Dependencies.DOMAINS); + depends(Dependencies.SITES_DOMAINS); let domain: Domain; let domainsList: DomainsList; + if (isCloud) { - [domain, domainsList] = await Promise.all([ - sdk.forConsole.domains.get(params.domain), - sdk.forConsole.domains.list() - ]); + domainsList = await sdk.forConsole.domains.list(); + const domainId = domainsList.domains.find( + (domain: Domain) => domain.domain === params.domain + ).$id; + domain = await sdk.forConsole.domains.get(domainId); } return {