Merge pull request #1867 from appwrite/fix-rules-domains

Fix: domains flow on sites
This commit is contained in:
Darshan authored and GitHub committed 2025-05-21 18:31:42 +05:30
commit 259425dd52
9 files changed
+92 -30

No files matched your search

@@ -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)
@@ -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:
@@ -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 {
@@ -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)
@@ -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
};
};
@@ -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 {
@@ -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)
@@ -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
@@ -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 {