{#if $page.data?.header} From 98502a85c5cd8c90d0c8fab9b0674ded3c0bfe85 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Mon, 2 Jun 2025 08:19:57 +0200 Subject: [PATCH 156/226] Update to route.id --- src/lib/layout/shell.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index be7c289f4..9544d0555 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -113,7 +113,7 @@ $: state = $isSidebarOpen ? 'open' : 'closed'; let isProjectPage; - $: isProjectPage = $page.url.pathname.includes('project-'); + $: isProjectPage = $page.route.id.includes('project-'); function handleResize() { $isSidebarOpen = false; From 44701389bce673a93973d59766c723fb40636e06 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Mon, 2 Jun 2025 08:26:14 +0200 Subject: [PATCH 157/226] Nullable --- src/lib/layout/shell.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 9544d0555..012670367 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -113,7 +113,7 @@ $: state = $isSidebarOpen ? 'open' : 'closed'; let isProjectPage; - $: isProjectPage = $page.route.id.includes('project-'); + $: isProjectPage = $page.route?.id.includes('project-'); function handleResize() { $isSidebarOpen = false; From 7646605d8987eb2f1757d9d2fd83e900d2d94e01 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Mon, 2 Jun 2025 10:29:24 +0200 Subject: [PATCH 158/226] Nullable --- src/lib/layout/shell.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/layout/shell.svelte b/src/lib/layout/shell.svelte index 012670367..9c6b2ec1e 100644 --- a/src/lib/layout/shell.svelte +++ b/src/lib/layout/shell.svelte @@ -113,7 +113,7 @@ $: state = $isSidebarOpen ? 'open' : 'closed'; let isProjectPage; - $: isProjectPage = $page.route?.id.includes('project-'); + $: isProjectPage = $page.route?.id?.includes('project-'); function handleResize() { $isSidebarOpen = false; From 727a6f3ac9c5256f7d27eb035a8b495eb3e0bb9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 13:13:02 +0200 Subject: [PATCH 159/226] Fix missing rules (redirect); remove double protocol; improve placeholders for dns records; fix www subdomain rules --- src/lib/helpers/tlds.ts | 1 - .../domain-[domain]/createRecordModal.svelte | 16 +++++++++++++++- .../domain-[domain]/updateRecordModal.svelte | 17 ++++++++++++++++- .../domains/add-domain/+page.svelte | 2 +- .../sites/site-[site]/domains/+page.ts | 15 ++++++++++----- .../site-[site]/domains/add-domain/+page.svelte | 2 +- 6 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/lib/helpers/tlds.ts b/src/lib/helpers/tlds.ts index 23adffb4c..6de3c3888 100644 --- a/src/lib/helpers/tlds.ts +++ b/src/lib/helpers/tlds.ts @@ -15,7 +15,6 @@ export function isASubdomain(domain: string | null): boolean { const { domain: apex, subdomain } = parse(domain); if (!apex) return false; - if (subdomain === 'www') return false; return !!subdomain; } diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte index 644732c58..e1f1205d6 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte @@ -30,6 +30,20 @@ let weight: number; let port: number; + const placeholders: Record = { + 'A': '76.75.21.21', + 'AAAA': '2001:0db8:85a3:0000:0000:8a2e:0370:7334', + 'CNAME': 'stage.example.com', + 'MX': 'mail.example.com', + 'TXT': 'v=spf1 include:_spf.example.com ~all', + 'NS': 'ns1.example.com', + 'SRV': '10 5 8080 example.com', + 'CAA': '0 issue "letsencrypt.org"', + 'HTTPS': 'https://example.com', + 'ALIAS': 'www.example.com' + }; + $: placeholder = placeholders[type] ?? 'Enter value'; + async function handleSubmit() { const record = { name, @@ -77,7 +91,7 @@ - + diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte index 9155339ca..0102fb376 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte @@ -19,12 +19,27 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import type { Models } from '@appwrite.io/console'; + import type { RecordType } from '$lib/stores/domains'; export let show = false; export let selectedRecord: Models.DnsRecord; let record = deepClone(selectedRecord); let error = ''; + + const placeholders: Record = { + 'A': '76.75.21.21', + 'AAAA': '2001:0db8:85a3:0000:0000:8a2e:0370:7334', + 'CNAME': 'stage.example.com', + 'MX': 'mail.example.com', + 'TXT': 'v=spf1 include:_spf.example.com ~all', + 'NS': 'ns1.example.com', + 'SRV': '10 5 8080 example.com', + 'CAA': '0 issue "letsencrypt.org"', + 'HTTPS': 'https://example.com', + 'ALIAS': 'www.example.com' + }; + $: placeholder = placeholders[record.type] ?? 'Enter value'; async function handleSubmit() { try { @@ -173,7 +188,7 @@ - + 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 2c931b0a9..a303f4477 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 @@ -72,7 +72,7 @@ } else if (behaviour === 'REDIRECT') { rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, $regionalProtocol + redirect, statusCode); + .proxy.createRedirectRule(domainName, 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/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts index 88ec63f09..126e1ced7 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts @@ -27,12 +27,17 @@ export const load = async ({ params, depends, url, route }) => { .proxy.listRules( [ Query.or([ - Query.equal('type', RuleType.DEPLOYMENT), - Query.equal('type', RuleType.REDIRECT) + Query.and([ + Query.equal('type', RuleType.REDIRECT), + Query.equal('trigger', RuleTrigger.MANUAL), + ]), + Query.and([ + Query.equal('type', RuleType.DEPLOYMENT), + Query.equal('trigger', RuleTrigger.MANUAL), + Query.equal('deploymentResourceType', DeploymentResourceType.SITE), + Query.equal('deploymentResourceId', params.site), + ]), ]), - Query.equal('deploymentResourceType', DeploymentResourceType.SITE), - Query.equal('deploymentResourceId', params.site), - Query.equal('trigger', RuleTrigger.MANUAL), Query.limit(limit), Query.offset(offset), Query.orderDesc(''), 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 0bb99fee4..cc1a89b99 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 @@ -76,7 +76,7 @@ } else if (behaviour === 'REDIRECT') { rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, $regionalProtocol + redirect, statusCode); + .proxy.createRedirectRule(domainName, redirect, statusCode); } else if (behaviour === 'ACTIVE') { rule = await sdk .forProject(page.params.region, page.params.project) From 277f96b0b7a6f8d4f5f861615ec145553faa9132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 13:13:18 +0200 Subject: [PATCH 160/226] Formatting fix --- .../domain-[domain]/createRecordModal.svelte | 22 ++++++++--------- .../domain-[domain]/updateRecordModal.svelte | 24 +++++++++---------- .../sites/site-[site]/domains/+page.ts | 14 +++++------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte index e1f1205d6..14f0adc61 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte @@ -31,16 +31,16 @@ let port: number; const placeholders: Record = { - 'A': '76.75.21.21', - 'AAAA': '2001:0db8:85a3:0000:0000:8a2e:0370:7334', - 'CNAME': 'stage.example.com', - 'MX': 'mail.example.com', - 'TXT': 'v=spf1 include:_spf.example.com ~all', - 'NS': 'ns1.example.com', - 'SRV': '10 5 8080 example.com', - 'CAA': '0 issue "letsencrypt.org"', - 'HTTPS': 'https://example.com', - 'ALIAS': 'www.example.com' + A: '76.75.21.21', + AAAA: '2001:0db8:85a3:0000:0000:8a2e:0370:7334', + CNAME: 'stage.example.com', + MX: 'mail.example.com', + TXT: 'v=spf1 include:_spf.example.com ~all', + NS: 'ns1.example.com', + SRV: '10 5 8080 example.com', + CAA: '0 issue "letsencrypt.org"', + HTTPS: 'https://example.com', + ALIAS: 'www.example.com' }; $: placeholder = placeholders[type] ?? 'Enter value'; @@ -91,7 +91,7 @@ - + diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte index 0102fb376..c72ca86bd 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte @@ -26,18 +26,18 @@ let record = deepClone(selectedRecord); let error = ''; - + const placeholders: Record = { - 'A': '76.75.21.21', - 'AAAA': '2001:0db8:85a3:0000:0000:8a2e:0370:7334', - 'CNAME': 'stage.example.com', - 'MX': 'mail.example.com', - 'TXT': 'v=spf1 include:_spf.example.com ~all', - 'NS': 'ns1.example.com', - 'SRV': '10 5 8080 example.com', - 'CAA': '0 issue "letsencrypt.org"', - 'HTTPS': 'https://example.com', - 'ALIAS': 'www.example.com' + A: '76.75.21.21', + AAAA: '2001:0db8:85a3:0000:0000:8a2e:0370:7334', + CNAME: 'stage.example.com', + MX: 'mail.example.com', + TXT: 'v=spf1 include:_spf.example.com ~all', + NS: 'ns1.example.com', + SRV: '10 5 8080 example.com', + CAA: '0 issue "letsencrypt.org"', + HTTPS: 'https://example.com', + ALIAS: 'www.example.com' }; $: placeholder = placeholders[record.type] ?? 'Enter value'; @@ -188,7 +188,7 @@ - + diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts index 126e1ced7..ebe497444 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts @@ -28,15 +28,15 @@ export const load = async ({ params, depends, url, route }) => { [ Query.or([ Query.and([ - Query.equal('type', RuleType.REDIRECT), - Query.equal('trigger', RuleTrigger.MANUAL), + Query.equal('type', RuleType.REDIRECT), + Query.equal('trigger', RuleTrigger.MANUAL) ]), Query.and([ - Query.equal('type', RuleType.DEPLOYMENT), - Query.equal('trigger', RuleTrigger.MANUAL), - Query.equal('deploymentResourceType', DeploymentResourceType.SITE), - Query.equal('deploymentResourceId', params.site), - ]), + Query.equal('type', RuleType.DEPLOYMENT), + Query.equal('trigger', RuleTrigger.MANUAL), + Query.equal('deploymentResourceType', DeploymentResourceType.SITE), + Query.equal('deploymentResourceId', params.site) + ]) ]), Query.limit(limit), Query.offset(offset), From a1d1045e87c6d0b7ffe64af02f55beaef76c47d1 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Mon, 2 Jun 2025 13:26:38 +0200 Subject: [PATCH 161/226] Only untrack when no installation is set --- src/lib/components/git/repositories.svelte | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/components/git/repositories.svelte b/src/lib/components/git/repositories.svelte index c1c3eefca..a9b94904f 100644 --- a/src/lib/components/git/repositories.svelte +++ b/src/lib/components/git/repositories.svelte @@ -49,7 +49,9 @@ async function loadInstallations() { if (installationList) { if (installationList.installations.length) { - untrack(() => (selectedInstallation = installationList.installations[0].$id)); + if (!selectedInstallation) { + untrack(() => (selectedInstallation = installationList.installations[0].$id)); + } installation.set( installationList.installations.find( (entry) => entry.$id === selectedInstallation @@ -62,7 +64,9 @@ .forProject(page.params.region, page.params.project) .vcs.listInstallations(); if (installations.length) { - untrack(() => (selectedInstallation = installations[0].$id)); + if (!selectedInstallation) { + untrack(() => (selectedInstallation = installationList.installations[0].$id)); + } installation.set(installations.find((entry) => entry.$id === selectedInstallation)); } return installations; From 14d21912ad8edffc87522486470c3f1c438c4339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 13:40:17 +0200 Subject: [PATCH 162/226] Fix SRV record update; fix priority input; fix linter --- src/lib/helpers/domains.ts | 99 ++++++++++++++++ .../domain-[domain]/updateRecordModal.svelte | 108 +----------------- .../domains/add-domain/+page.svelte | 2 +- .../domains/add-domain/+page.svelte | 2 +- 4 files changed, 103 insertions(+), 108 deletions(-) diff --git a/src/lib/helpers/domains.ts b/src/lib/helpers/domains.ts index 7d11aa59d..d8a65c745 100644 --- a/src/lib/helpers/domains.ts +++ b/src/lib/helpers/domains.ts @@ -90,6 +90,105 @@ export async function createRecord(record: Partial, domainId: } } +export async function updateRecord(record: Partial, domainId: string) { + switch (record.type) { + case 'A': + return await sdk.forConsole.domains.updateRecordA( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'AAAA': + return await sdk.forConsole.domains.updateRecordAAAA( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'CNAME': + return await sdk.forConsole.domains.updateRecordCNAME( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'MX': + return await sdk.forConsole.domains.updateRecordMX( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.priority, + record.comment + ); + case 'TXT': + return await sdk.forConsole.domains.updateRecordTXT( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'NS': + return await sdk.forConsole.domains.updateRecordNS( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'SRV': + return await sdk.forConsole.domains.updateRecordSRV( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.priority, + record.weight, + record.port, + record?.comment || undefined + ); + case 'CAA': + return await sdk.forConsole.domains.updateRecordCAA( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'HTTPS': + return await sdk.forConsole.domains.updateRecordHTTPS( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + case 'ALIAS': + return await sdk.forConsole.domains.updateRecordAlias( + domainId, + record.$id, + record.name, + record.value, + record.ttl, + record.comment + ); + } +} + export type ParsedRecords = { A: Partial[]; AAAA: Partial[]; diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte index c72ca86bd..d46e31aa3 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte @@ -20,6 +20,7 @@ import { Dependencies } from '$lib/constants'; import type { Models } from '@appwrite.io/console'; import type { RecordType } from '$lib/stores/domains'; + import { updateRecord } from '$lib/helpers/domains'; export let show = false; export let selectedRecord: Models.DnsRecord; @@ -43,112 +44,7 @@ async function handleSubmit() { try { - switch (record.type) { - case 'A': - await sdk.forConsole.domains.updateRecordA( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'AAAA': - await sdk.forConsole.domains.updateRecordAAAA( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'CNAME': - await sdk.forConsole.domains.updateRecordCNAME( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'MX': - await sdk.forConsole.domains.updateRecordMX( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.priority, - record.comment - ); - - break; - case 'TXT': - await sdk.forConsole.domains.updateRecordTXT( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'NS': - await sdk.forConsole.domains.updateRecordNS( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - - case 'CAA': - await sdk.forConsole.domains.updateRecordCAA( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'HTTPS': - await sdk.forConsole.domains.updateRecordHTTPS( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - case 'ALIAS': - await sdk.forConsole.domains.updateRecordAlias( - page.params.domain, - record.$id, - record.name, - record.value, - record.ttl, - record.comment - ); - - break; - - default: - break; - } + await updateRecord(record, page.params.domain); show = false; invalidate(Dependencies.DOMAINS); addNotification({ 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 a303f4477..3af8bb2e4 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,7 +18,7 @@ import { ConnectRepoModal } from '$lib/components/git/index.js'; import { isValueOfStringEnum } from '$lib/helpers/types.js'; import { isCloud } from '$lib/system'; - import { project, regionalProtocol } from '$routes/(console)/project-[region]-[project]/store'; + import { project } from '$routes/(console)/project-[region]-[project]/store'; import { getApexDomain } from '$lib/helpers/tlds'; const routeBase = `${base}/project-${page.params.region}-${page.params.project}/functions/function-${page.params.function}/domains`; 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 cc1a89b99..ea8388747 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 @@ -22,7 +22,7 @@ import { writable } from 'svelte/store'; import { onMount } from 'svelte'; import { ConnectRepoModal } from '$lib/components/git/index.js'; - import { project, regionalProtocol } from '$routes/(console)/project-[region]-[project]/store'; + import { project } from '$routes/(console)/project-[region]-[project]/store'; import { isCloud } from '$lib/system'; import { getApexDomain } from '$lib/helpers/tlds'; From 4947a84f19cb9dfb69c49ee8983405f6e243dba1 Mon Sep 17 00:00:00 2001 From: ernstmul Date: Mon, 2 Jun 2025 13:40:21 +0200 Subject: [PATCH 163/226] Fix responsiveness --- src/lib/components/git/repositories.svelte | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lib/components/git/repositories.svelte b/src/lib/components/git/repositories.svelte index a9b94904f..1688d5f87 100644 --- a/src/lib/components/git/repositories.svelte +++ b/src/lib/components/git/repositories.svelte @@ -5,6 +5,7 @@ import { sdk } from '$lib/stores/sdk'; import { repositories } from '$routes/(console)/project-[region]-[project]/functions/function-[function]/store'; import { installation, installations, repository } from '$lib/stores/vcs'; + import { isSmallViewport } from '$lib/stores/viewport'; import { Layout, Table, @@ -137,7 +138,7 @@ {:then installations} - + + alignItems="center" + justifyContent="space-between"> @@ -249,27 +251,25 @@ icon={IconLockClosed} color="--fgcolor-neutral-tertiary" /> {/if} - - - {#if action === 'button'} - + {#if !$isSmallViewport} + + {/if} + {#if action === 'button'} connect(repo)}> Connect - - {/if} + {/if} + From 12b0fc9247e8d38c8b080317cf1d00b2093a0e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 14:27:14 +0200 Subject: [PATCH 164/226] linter fix --- .../domains/domain-[domain]/updateRecordModal.svelte | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte index d46e31aa3..379bac0ba 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte @@ -13,7 +13,6 @@ import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { symmetricDifference } from '$lib/helpers/array'; import { deepClone } from '$lib/helpers/object'; - import { sdk } from '$lib/stores/sdk'; import { page } from '$app/state'; import { recordTypes } from './store'; import { invalidate } from '$app/navigation'; From c2d727efe30f4417260c99ec49b4f4b92c9fa100 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 2 Jun 2025 19:51:53 +0530 Subject: [PATCH 165/226] remove: sites waitlist; fix: domains table. --- src/lib/helpers/waitlist.ts | 30 -- .../domains/domain-[domain]/store.ts | 2 +- .../domains/domain-[domain]/table.svelte | 24 +- .../domain-[domain]/updateRecordModal.svelte | 31 +- .../(images)/empty-sites-dark-mobile.svg | 119 ------- .../sites/(images)/empty-sites-dark.svg | 239 ------------- .../(images)/empty-sites-light-mobile.svg | 157 --------- .../sites/(images)/empty-sites-light.svg | 321 ------------------ .../sites/+page.svelte | 151 ++------ 9 files changed, 72 insertions(+), 1002 deletions(-) delete mode 100644 src/lib/helpers/waitlist.ts delete mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg delete mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg delete mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg delete mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg diff --git a/src/lib/helpers/waitlist.ts b/src/lib/helpers/waitlist.ts deleted file mode 100644 index 773b04a24..000000000 --- a/src/lib/helpers/waitlist.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { get } from 'svelte/store'; -import { user } from '$lib/stores/user'; -import { sdk } from '$lib/stores/sdk'; -const userPreferences = () => get(user)?.prefs; - -export const joinWaitlistSites = () => { - const prefs = userPreferences(); - const newPrefs = { - ...prefs, - joinWaitlistSites: true - }; - - sdk.forConsole.account.updatePrefs(newPrefs); - - if (sessionStorage) { - sessionStorage.setItem('joinWaitlistSites', 'true'); - } -}; - -export const isOnWaitlistSites = (): boolean => { - const prefs = userPreferences(); - const joinedInPrefs = 'joinWaitlistSites' in prefs; - - let joinedInSession = false; - if (sessionStorage) { - joinedInSession = sessionStorage.getItem('joinWaitlistSites') === 'true'; - } - - return joinedInSession || joinedInPrefs; -}; 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 b3a5d2b2c..a8c38a8b9 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/store.ts @@ -5,7 +5,7 @@ import { derived, writable } from 'svelte/store'; export const domain = derived(page, ($page) => $page.data.domain as Models.Domain); export const columns = writable([ - { id: 'name', title: 'Name', type: 'string', width: { min: 150 } }, + { id: 'name', title: 'Name', type: 'string', width: { min: 200 } }, { id: 'type', title: 'Type', type: 'string', width: 125 }, { id: 'value', title: 'Value', type: 'string', width: 250 }, { id: 'ttl', title: 'TTL', type: 'integer', width: 100 }, diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte index 4b8c1e958..f25e433d7 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte @@ -29,6 +29,15 @@ let showEdit = false; let showDelete = false; let selectedRecord: Models.DnsRecord = null; + + function formatRecordName(name: string) { + const limit = 30; + return { + value: name.length > limit ? `${name.slice(0, limit)}...` : name, + truncated: name.length > limit, + whole: name + }; + } @@ -47,9 +56,16 @@ {#each $columns as column} {#if column.id === 'name'} - - {record.name} - + {@const formatted = formatRecordName(record.name)} + + {formatted.value} + + {formatted.whole} + + {:else if column.id === 'type'} {record.type} @@ -70,7 +86,7 @@ {:else if column.id === 'priority'} - {record?.priority ?? '-'} + {record?.priority || '-'} {:else if column.id === 'comment'} diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte index 379bac0ba..c22d18a00 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/updateRecordModal.svelte @@ -63,6 +63,9 @@ $: isDisabled = !symmetricDifference(Object.values(record), Object.values(selectedRecord)) ?.length; + + $: showPriority = + record.name.toLocaleLowerCase() === 'mx' || record.name.toLocaleLowerCase() === 'srv'; @@ -101,19 +104,21 @@ - - - - - Sets the priority for this DNS record. Lower numbers indicate higher - priority (e.g., 10 is higher than 20). - - - + {#if showPriority} + + + + + Sets the priority for this DNS record. Lower numbers indicate higher + priority (e.g., 10 is higher than 20). + + + + {/if} - -
- - - -
- - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg deleted file mode 100644 index b64811a48..000000000 --- a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg deleted file mode 100644 index 8bd4b239e..000000000 --- a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg +++ /dev/null @@ -1,157 +0,0 @@ - - -
- - - - -
-
- - - - -
-
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg deleted file mode 100644 index a0314acfc..000000000 --- a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index a933b669f..be8278543 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -11,14 +11,12 @@ import { isServiceLimited } from '$lib/stores/billing'; import { organization } from '$lib/stores/organization'; import { canWriteSites } from '$lib/stores/roles.js'; - import { Card, Icon, Layout, Typography } from '@appwrite.io/pink-svelte'; + import { Icon, Layout } from '@appwrite.io/pink-svelte'; import { Button } from '$lib/elements/forms'; import { app } from '$lib/stores/app'; import CreateSiteModal from './createSiteModal.svelte'; import EmptyLight from './(images)/empty-sites-light.svg'; import EmptyDark from './(images)/empty-sites-dark.svg'; - import EmptyLightMobile from './(images)/empty-sites-light-mobile.svg'; - import EmptyDarkMobile from './(images)/empty-sites-dark-mobile.svg'; import Grid from './grid.svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import { columns } from './store'; @@ -28,15 +26,10 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; - import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; - import { addNotification } from '$lib/stores/notifications'; - import { isOnWaitlistSites, joinWaitlistSites } from '$lib/helpers/waitlist'; - import { isSmallViewport } from '$lib/stores/viewport'; export let data; let show = false; - let isOnWaitlist = isOnWaitlistSites(); $: $registerCommands([ { @@ -46,7 +39,6 @@ }, keys: ['c'], disabled: - !showSites || isServiceLimited('sites', $organization?.billingPlan, data.siteList?.total) || !$canWriteSites, icon: IconPlus, @@ -63,123 +55,46 @@ } }); }); - - /** - * Controls visibility of Sites feature: - * - Shown if running on self-hosted - * - Shown on cloud only if the organization is Appwrite's. - * - Hidden on cloud for any non-Appwrite organization. - */ - $: showSites = !isCloud || $organization.$id === APPWRITE_OFFICIALS_ORG; - - $: isDark = $app.themeInUse === 'dark'; - - $: imgSrc = isDark - ? $isSmallViewport - ? EmptyDarkMobile - : EmptyDark - : $isSmallViewport - ? EmptyLightMobile - : EmptyLight; - - $: imgClass = $isSmallViewport ? 'mobile' : 'desktop'; - - function addToWaitlist() { - joinWaitlistSites(); - addNotification({ - type: 'success', - title: 'Waitlist joined', - message: "We'll let you know as soon as Appwrite Sites is ready for you." - }); - - isOnWaitlist = true; - } - {#if showSites} - - - - - - - {#if $canWriteSites} - - {/if} - + + + - {#if data.siteList.total} - {#if data.view === View.Grid} - - {:else} - + + + {#if $canWriteSites} + {/if} - - {:else if data.search} - + + + {#if data.siteList.total} + {#if data.view === View.Grid} + {:else} - (show = true)}> - +
{/if} + + {:else if data.search} + {:else} - - - - - - {#if isOnWaitlist} - - You've successfully joined the Sites waitlist - - - - We can't wait for you to try out Sites on Cloud. You will get access - soon. - - {:else} - - - Appwrite Sites is in high demand - - -
- - To ensure a smooth experience for everyone, we’re rolling out - access gradually. Join the waitlist and be one of the first to - deploy with Sites. - -
- -
- -
-
- {/if} -
-
-
+ (show = true)}> + {/if} From 7353396c38939ecaa5f9b3f6c357300c6ef2e5fe Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 2 Jun 2025 20:03:13 +0530 Subject: [PATCH 166/226] fix: priority checks. --- .../domains/domain-[domain]/createRecordModal.svelte | 3 ++- .../domains/domain-[domain]/table.svelte | 11 ++++++++++- .../domains/domain-[domain]/updateRecordModal.svelte | 6 ++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte index 14f0adc61..1ddcdb4e6 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/createRecordModal.svelte @@ -17,6 +17,7 @@ import { invalidate } from '$app/navigation'; import type { RecordType } from '$lib/stores/domains'; import { createRecord } from '$lib/helpers/domains'; + import { showPriority } from './table.svelte'; export let show = false; @@ -110,7 +111,7 @@ - {#if type === 'MX'} + {#if showPriority(type)} + import type { RecordType } from '$lib/stores/domains'; + + export function showPriority(record: Models.DnsRecord | RecordType): boolean { + const type = typeof record === 'string' ? record : record.type; + return type.toLowerCase() === 'mx' || type.toLowerCase() === 'srv'; + } + + @@ -104,7 +102,7 @@ - {#if showPriority} + {#if showPriority(record)} Date: Mon, 2 Jun 2025 16:37:53 +0200 Subject: [PATCH 167/226] PR review changes --- .../domains/domain-[domain]/table.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte index f7f6d76ee..006738f20 100644 --- a/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte +++ b/src/routes/(console)/organization-[organization]/domains/domain-[domain]/table.svelte @@ -95,7 +95,7 @@ {:else if column.id === 'priority'} - {showPriority(record) ? record?.priority || '-' : '-'} + {showPriority(record) ? (record?.priority ?? '0') : '-'} {:else if column.id === 'comment'} From a2fd05b50c2d8c2bc8b77e040bbc4830fe784224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 16:38:44 +0200 Subject: [PATCH 168/226] Add missing images --- .../(images)/empty-sites-dark-mobile.svg | 119 +++++++ .../sites/(images)/empty-sites-dark.svg | 239 +++++++++++++ .../(images)/empty-sites-light-mobile.svg | 157 +++++++++ .../sites/(images)/empty-sites-light.svg | 321 ++++++++++++++++++ 4 files changed, 836 insertions(+) create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg create mode 100644 src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg new file mode 100644 index 000000000..39c7917cf --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark-mobile.svg @@ -0,0 +1,119 @@ + + +
+ + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg new file mode 100644 index 000000000..b64811a48 --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-dark.svg @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg new file mode 100644 index 000000000..8bd4b239e --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light-mobile.svg @@ -0,0 +1,157 @@ + + +
+ + + + +
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg new file mode 100644 index 000000000..a0314acfc --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/sites/(images)/empty-sites-light.svg @@ -0,0 +1,321 @@ + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
From 92308b6c63aae48178a61026a3599ffdff3d9c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 2 Jun 2025 18:32:36 +0200 Subject: [PATCH 169/226] Fix sites to be public --- .../project-[region]-[project]/sites/+page.ts | 9 +-------- .../sites/site-[site]/+layout.ts | 12 ++---------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index afaf7b02d..62eeb026a 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -2,15 +2,8 @@ import { Query } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; -import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; - -export const load = async ({ url, depends, route, params, parent }) => { - // don't load anything on cloud unless org is appwrite atm! - const { organization } = await parent(); - if (isCloud && organization?.$id !== APPWRITE_OFFICIALS_ORG) { - return; - } +export const load = async ({ url, depends, route, params }) => { depends(Dependencies.SITES); const page = getPage(url); diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts index 5ac8edfa3..491697969 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts @@ -2,17 +2,9 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { error, redirect } from '@sveltejs/kit'; -import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; -import { base } from '$app/paths'; - -export const load = async ({ depends, params, parent }) => { - // don't load anything on cloud unless org is appwrite atm! - const { organization } = await parent(); - if (isCloud && organization?.$id !== APPWRITE_OFFICIALS_ORG) { - redirect(307, `${base}/project-${params.region}-${params.project}/sites`); - } +import { error } from '@sveltejs/kit'; +export const load = async ({ depends, params }) => { depends(Dependencies.SITE); try { const [site] = await Promise.all([ From 7569ec6aca717a34804bdc6f7141242892de3aad Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 2 Jun 2025 12:12:33 -0700 Subject: [PATCH 170/226] fix: 404 error fetching countries --- src/routes/(console)/account/payments/addressModal.svelte | 7 ++----- .../(console)/account/payments/billingAddress.svelte | 5 +---- .../(console)/account/payments/editAddressModal.svelte | 4 +--- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/routes/(console)/account/payments/addressModal.svelte b/src/routes/(console)/account/payments/addressModal.svelte index 55405deb1..5e9a827bc 100644 --- a/src/routes/(console)/account/payments/addressModal.svelte +++ b/src/routes/(console)/account/payments/addressModal.svelte @@ -1,6 +1,5 @@ From 16b2278bab073d9ba5724d0e6f64655212604497 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Mon, 2 Jun 2025 16:56:32 -0700 Subject: [PATCH 173/226] fix: update EstimatedTotalBox to display data from estimation --- .../billing/discountsApplied.svelte | 37 +++++++++++++++++++ .../billing/estimatedTotalBox.svelte | 23 ++++++------ 2 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 src/lib/components/billing/discountsApplied.svelte diff --git a/src/lib/components/billing/discountsApplied.svelte b/src/lib/components/billing/discountsApplied.svelte new file mode 100644 index 000000000..eed7a2bc7 --- /dev/null +++ b/src/lib/components/billing/discountsApplied.svelte @@ -0,0 +1,37 @@ + + +{#if adjustedValue > 0} + +
+

+ + + {label} + +

+
+ {#if value >= 100} +

Credits applied

+ {:else} + -{formatCurrency(adjustedValue)} + {/if} +
+{/if} diff --git a/src/lib/components/billing/estimatedTotalBox.svelte b/src/lib/components/billing/estimatedTotalBox.svelte index 438120824..dd7878890 100644 --- a/src/lib/components/billing/estimatedTotalBox.svelte +++ b/src/lib/components/billing/estimatedTotalBox.svelte @@ -7,6 +7,7 @@ import { CreditsApplied } from '.'; import { sdk } from '$lib/stores/sdk'; import { AppwriteException } from '@appwrite.io/console'; + import DiscountsApplied from './discountsApplied.svelte'; export let billingPlan: Tier; export let collaborators: string[]; @@ -35,7 +36,8 @@ if ( e.type === 'billing_coupon_not_found' || e.type === 'billing_coupon_already_used' || - e.type === 'billing_credit_unsupported' + e.type === 'billing_credit_unsupported' || + e.type === 'billing_coupon_not_eligible' ) { couponData = { code: null, @@ -65,7 +67,8 @@ if ( e.type === 'billing_coupon_not_found' || e.type === 'billing_coupon_already_used' || - e.type === 'billing_credit_unsupported' + e.type === 'billing_credit_unsupported' || + e.type === 'billing_coupon_not_eligible' ) { couponData = { code: null, @@ -80,13 +83,6 @@ $: organizationId ? getUpdatePlanEstimate(organizationId, billingPlan, collaborators, couponData?.code) : getEstimate(billingPlan, collaborators, couponData?.code); - - $: estimatedTotal = - couponData?.status === 'active' - ? estimation?.grossAmount - couponData.credits >= 0 - ? estimation?.grossAmount - couponData.credits - : 0 - : estimation?.grossAmount; {#if estimation} @@ -102,6 +98,9 @@ >{formatCurrency(item.value)}
{/each} + {#each estimation.discounts ?? [] as item} + + {/each} {#if couponData?.status === 'active'} @@ -110,15 +109,15 @@ Total due - {formatCurrency(estimatedTotal)} + {formatCurrency(estimation.grossAmount)} - You'll pay {formatCurrency(estimatedTotal)} + You'll pay {formatCurrency(estimation.grossAmount)} now. {#if couponData?.code}Once your credits run out,{:else}Then{/if} you'll be charged - {formatCurrency(estimation.grossAmount)} every 30 days. + {formatCurrency(estimation.amount)} every 30 days. Date: Mon, 2 Jun 2025 17:07:38 -0700 Subject: [PATCH 174/226] fix: update Change plan to show Payment box when upgrading This will allow adding credits when upgrading. --- .../organization-[organization]/change-plan/+page.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index efe13f1a3..b96c875c8 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -302,8 +302,7 @@ - - {#if selectedPlan !== BillingPlan.FREE && data.organization.billingPlan === BillingPlan.FREE} + {#if isUpgrade}
Date: Tue, 3 Jun 2025 05:33:56 +0200 Subject: [PATCH 175/226] Fix responsiveness --- src/lib/components/git/repositories.svelte | 47 ++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/lib/components/git/repositories.svelte b/src/lib/components/git/repositories.svelte index 1688d5f87..b82781169 100644 --- a/src/lib/components/git/repositories.svelte +++ b/src/lib/components/git/repositories.svelte @@ -240,27 +240,32 @@ direction="row" alignItems="center" justifyContent="space-between"> - - {repo.name} - - {#if repo.private} - - {/if} - {#if !$isSmallViewport} - - {/if} + + + {repo.name} + + {#if repo.private} + + {/if} + {#if !$isSmallViewport} + + {/if} + {#if action === 'button'} Date: Tue, 3 Jun 2025 06:00:04 +0200 Subject: [PATCH 176/226] Bump pink-svelte --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 47f174dec..a0c0c7833 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@d74b893", + "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8275a29b..6107139fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@d74b893 - version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d74b893(svelte@5.25.3) + specifier: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86 + version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d74b893': - resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d74b893} + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86': + resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3654,7 +3654,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d74b893(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From d70488d1082991eca689345ec660957f90985e8a Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 09:50:09 +0530 Subject: [PATCH 177/226] fix: use pink2 components. --- .../billing/discountsApplied.svelte | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lib/components/billing/discountsApplied.svelte b/src/lib/components/billing/discountsApplied.svelte index eed7a2bc7..3ff2d7add 100644 --- a/src/lib/components/billing/discountsApplied.svelte +++ b/src/lib/components/billing/discountsApplied.svelte @@ -1,6 +1,9 @@ {#if adjustedValue > 0} - -
-

- - - {label} - -

-
+ + + + {label} + {#if value >= 100} -

Credits applied

+ {:else} - -{formatCurrency(adjustedValue)} + -{formatCurrency(adjustedValue)} {/if} -
+ {/if} From 8305330ad3f641a9ac755af7d61ff44746b80bbd Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 3 Jun 2025 11:10:39 +0545 Subject: [PATCH 178/226] Fix: typography color --- src/lib/components/billing/discountsApplied.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/billing/discountsApplied.svelte b/src/lib/components/billing/discountsApplied.svelte index 3ff2d7add..d32f67a8f 100644 --- a/src/lib/components/billing/discountsApplied.svelte +++ b/src/lib/components/billing/discountsApplied.svelte @@ -25,7 +25,7 @@ - {label} + {label} {#if value >= 100} From 9936bf98698db9934bf0a2ab1e78674ab0659d46 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 11:30:35 +0530 Subject: [PATCH 179/226] update: migrate component to pink2. --- .../components/billing/creditsApplied.svelte | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/lib/components/billing/creditsApplied.svelte b/src/lib/components/billing/creditsApplied.svelte index 61386b9f0..a02fa7d4b 100644 --- a/src/lib/components/billing/creditsApplied.svelte +++ b/src/lib/components/billing/creditsApplied.svelte @@ -1,53 +1,61 @@ {#if couponData?.credits} - -
-

- + + + + {#if couponData.credits >= 100} {couponData?.code?.toUpperCase()} {:else} - Credits applied {couponData?.code?.toUpperCase()} + + Credits applied + {couponData?.code?.toUpperCase()} + {/if} -

+ + {#if !fixedCoupon} - + }; + }}> + + {/if} -
+
+ {#if couponData.credits >= 100} -

Credits applied

+ {:else} - -{formatCurrency(couponData.credits)} + -{formatCurrency(couponData.credits)} {/if} - + {/if} From 8d0c866b68c9098cf6fe23626d96657560e03040 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 14:09:34 +0530 Subject: [PATCH 180/226] ci: empty commit From 57cdcb5551b446c43d32c78d26f4377bbbd8d5e4 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 15:55:38 +0530 Subject: [PATCH 181/226] fix: reload regions on plan upgrades. --- .../organization-[organization]/change-plan/+page.svelte | 7 +++++++ src/routes/(console)/regions.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index b96c875c8..c35ee6882 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -30,6 +30,7 @@ } from '@appwrite.io/pink-svelte'; import { writable } from 'svelte/store'; import { onMount } from 'svelte'; + import { loadAvailableRegions } from '$routes/(console)/regions'; import EstimatedTotalBox from '$lib/components/billing/estimatedTotalBox.svelte'; export let data; @@ -58,6 +59,7 @@ afterNavigate(({ from }) => { previousPage = from?.url?.pathname || previousPage; }); + onMount(async () => { if (page.url.searchParams.has('code')) { const coupon = page.url.searchParams.get('code'); @@ -218,6 +220,11 @@ } if (isOrganization(org)) { + /** + * Reload on upgrade (e.g. Free → Paid) + */ + loadAvailableRegions(org.$id, true); + await invalidate(Dependencies.ACCOUNT); await invalidate(Dependencies.ORGANIZATION); diff --git a/src/routes/(console)/regions.ts b/src/routes/(console)/regions.ts index 9f84dd430..32dbd0308 100644 --- a/src/routes/(console)/regions.ts +++ b/src/routes/(console)/regions.ts @@ -10,13 +10,13 @@ let lastLoadedOrganization = null; * * Prevents unnecessary API calls if the regions are already loaded for the same organization. */ -export async function loadAvailableRegions(orgId: string): Promise { +export async function loadAvailableRegions(orgId: string, force: boolean = false): Promise { if (!isCloud || !orgId) return; try { const storedRegions = get(regions); - if (storedRegions.regions && lastLoadedOrganization === orgId) { + if (storedRegions.regions && lastLoadedOrganization === orgId && !force) { // already loaded for this organization, fast path return. return; } From 8fd8aa530815e0c957c0d8819dddb4eb1f55482b Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 17:10:55 +0530 Subject: [PATCH 182/226] lint. --- src/lib/stores/preferences.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/stores/preferences.ts b/src/lib/stores/preferences.ts index 375e85ce9..b75208949 100644 --- a/src/lib/stores/preferences.ts +++ b/src/lib/stores/preferences.ts @@ -153,7 +153,6 @@ function createPreferences() { }), setCustomCollectionColumns: (columns: Preferences['columns']) => updateAndSync((n) => { - const collection = page.params.collection; if (!n?.collections?.[collection]) { n ??= {}; From 7eb70d6a6a9707a19edd36212019ed7d33391bee Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 3 Jun 2025 14:02:17 +0200 Subject: [PATCH 183/226] Optimize table rendering with truncation and keying fixes - Add keys to table columns to improve Svelte rendering performance - Limit tooltip content to 100 characters to prevent performance issues - Only render tooltip when actually showing to reduce DOM overhead - Show plain text for non-truncated content without tooltip wrapper --- .../collection-[collection]/table.svelte | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte index 6b9c32b08..7b59321fd 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/table.svelte @@ -90,7 +90,7 @@ ? `${formattedColumn.slice(0, 20)}...` : formattedColumn, truncated: formattedColumn.length > 20, - whole: formattedColumn + whole: `${formattedColumn.slice(0, 100)}...` }; } @@ -196,7 +196,7 @@ {/key} - {#each $columns as { id }} + {#each $columns as { id } (id)} {@const attr = $attributes.find((n) => n.key === id)} {#if isRelationship(attr)} @@ -251,16 +251,21 @@ Timestamp {toLocaleDateTime(formatted.whole, true, 'UTC')} - {:else} + {:else if formatted.truncated} {formatted.value} - {formatted.whole} + {#if showing} + {formatted.whole} + {/if} + {:else} + {formatted.value} {/if} {/if} From 8271c90054c14becf376a32914668dcaf9220bc8 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 3 Jun 2025 14:28:35 +0200 Subject: [PATCH 184/226] Update @appwrite.io/pink-svelte to commit 4e03f34 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index a0c0c7833..1462d9839 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86", + "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@4e03f34", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6107139fe..f0c7936b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86 - version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86(svelte@5.25.3) + specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@4e03f34 + version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86': - resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86} + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34': + resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3654,7 +3654,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@d7e3b86(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 From 15078626bab6bab09aed12f95dd68d5a0a971025 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 18:55:12 +0530 Subject: [PATCH 185/226] address comments. --- src/lib/stores/preferences.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lib/stores/preferences.ts b/src/lib/stores/preferences.ts index b75208949..c144c24bc 100644 --- a/src/lib/stores/preferences.ts +++ b/src/lib/stores/preferences.ts @@ -7,6 +7,7 @@ import type { Models } from '@appwrite.io/console'; import { organization } from './organization'; import { page } from '$app/state'; import { user } from '$lib/stores/user'; +import deepEqual from 'deep-equal'; type Preferences = { limit?: number; @@ -74,19 +75,17 @@ function createPreferences() { * Update the local store and then synchronizes them on user prefs. */ function updateAndSync(callback: (prefs: PreferencesStore) => void) { - let oldPrefsSnapshot: string; + let oldPrefsSnapshot: PreferencesStore; let newPrefsSnapshot: PreferencesStore; update((currentPrefs) => { - oldPrefsSnapshot = JSON.stringify(currentPrefs); + oldPrefsSnapshot = currentPrefs; callback(currentPrefs); newPrefsSnapshot = currentPrefs; return currentPrefs; }); - // Skip API if no changes (sufficient for simple objects). - // The key order seemed to be maintained during local tests. - if (oldPrefsSnapshot === JSON.stringify(newPrefsSnapshot)) { + if (deepEqual(oldPrefsSnapshot, newPrefsSnapshot)) { return; } From c6bd014f560262ced1fda5c5edb17699b2056555 Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 3 Jun 2025 18:57:08 +0530 Subject: [PATCH 186/226] add: return, to feel better about the linter. --- src/lib/stores/preferences.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/stores/preferences.ts b/src/lib/stores/preferences.ts index c144c24bc..0dd009cd7 100644 --- a/src/lib/stores/preferences.ts +++ b/src/lib/stores/preferences.ts @@ -74,7 +74,7 @@ function createPreferences() { /** * Update the local store and then synchronizes them on user prefs. */ - function updateAndSync(callback: (prefs: PreferencesStore) => void) { + function updateAndSync(callback: (prefs: PreferencesStore) => void): Promise { let oldPrefsSnapshot: PreferencesStore; let newPrefsSnapshot: PreferencesStore; @@ -90,7 +90,7 @@ function createPreferences() { } // sync the preferences. - updateConsolePreferences(newPrefsSnapshot); + return updateConsolePreferences(newPrefsSnapshot); } return { From 4a36260152511b2dd439a02b22c291c346fe48b2 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 3 Jun 2025 17:17:20 +0200 Subject: [PATCH 187/226] Add Sites feature flag and unavailable state Display waitlist message when Sites feature is disabled. The feature can be toggled via the sitesLive flag and includes responsive mobile images for the unavailable state. --- .../sites/+page.svelte | 90 ++++++++++++------- .../project-[region]-[project]/sites/+page.ts | 13 ++- 2 files changed, 68 insertions(+), 35 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index be8278543..b13c125df 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -11,12 +11,14 @@ import { isServiceLimited } from '$lib/stores/billing'; import { organization } from '$lib/stores/organization'; import { canWriteSites } from '$lib/stores/roles.js'; - import { Icon, Layout } from '@appwrite.io/pink-svelte'; + import { Card, Icon, Layout, Typography } from '@appwrite.io/pink-svelte'; import { Button } from '$lib/elements/forms'; import { app } from '$lib/stores/app'; import CreateSiteModal from './createSiteModal.svelte'; import EmptyLight from './(images)/empty-sites-light.svg'; import EmptyDark from './(images)/empty-sites-dark.svg'; + import EmptyLightMobile from './(images)/empty-sites-light-mobile.svg'; + import EmptyDarkMobile from './(images)/empty-sites-dark-mobile.svg'; import Grid from './grid.svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import { columns } from './store'; @@ -26,6 +28,7 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; + import { isSmallViewport } from '$lib/stores/viewport'; export let data; @@ -55,46 +58,65 @@ } }); }); + + $: isDark = $app.themeInUse === 'dark'; + $: imgSrc = isDark + ? $isSmallViewport + ? EmptyDarkMobile + : EmptyDark + : $isSmallViewport + ? EmptyLightMobile + : EmptyLight; + $: imgClass = $isSmallViewport ? 'mobile' : 'desktop'; - - - - - - - {#if $canWriteSites} - + {#if data.sitesLive} + {#if data.siteList.total} + {#if data.view === View.Grid} + + {:else} +
{/if} - - - {#if data.siteList.total} - {#if data.view === View.Grid} - + + {:else if data.search} + {:else} -
+ (show = true)}> + {/if} - - {:else if data.search} - {:else} - (show = true)}> - + + + + + + + + Appwrite Sites is in high demand + + +
+ + To ensure a smooth experience for everyone, we’re rolling out access + gradually. + +
+
+
+
+
{/if} diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index 62eeb026a..b041a903f 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -5,13 +5,23 @@ import { CARD_LIMIT, Dependencies } from '$lib/constants'; export const load = async ({ url, depends, route, params }) => { depends(Dependencies.SITES); - const page = getPage(url); const search = getSearch(url); const limit = getLimit(url, route, CARD_LIMIT); const offset = pageToOffset(page, limit); const view = getView(url, route, View.Grid, View.Grid); + const sitesLive = false; + + if (!sitesLive) + return { + sitesLive, + offset, + limit, + search, + view + }; + const siteList = await sdk .forProject(params.region, params.project) .sites.list( @@ -20,6 +30,7 @@ export const load = async ({ url, depends, route, params }) => { ); return { + sitesLive, offset, limit, search, From 745a5964c47e8d54c418448fbdec567dffef9fa9 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 3 Jun 2025 17:20:56 +0200 Subject: [PATCH 188/226] Add search and view controls to sites page Adds SearchQuery input and ViewSelector components with create site button to provide filtering and display options for the sites list. --- .../sites/+page.svelte | 18 ++++++++++++++++++ .../project-[region]-[project]/sites/+page.ts | 8 ++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte index b13c125df..2f2069920 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.svelte @@ -72,6 +72,24 @@ {#if data.sitesLive} + + + + + + + {#if $canWriteSites} + + {/if} + + {#if data.siteList.total} {#if data.view === View.Grid} diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index b041a903f..b76ee678e 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -1,4 +1,4 @@ -import { Query } from '@appwrite.io/console'; +import { Query, type Models } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; @@ -19,7 +19,11 @@ export const load = async ({ url, depends, route, params }) => { offset, limit, search, - view + view, + siteList: { + total: 0, + sites: [] + } as Models.SiteList }; const siteList = await sdk From 334f89aa4ee9ec7531e2d34d027ea8ac4e63f37f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 4 Jun 2025 10:19:32 +0200 Subject: [PATCH 189/226] Simple implementation of feature flags --- .env.example | 2 +- .github/workflows/publish.yml | 1 + Dockerfile | 2 ++ build.js | 1 + compose.yml | 2 ++ src/lib/flags.ts | 13 +++++++++++++ .../collection-[collection]/+page.svelte | 13 ++----------- .../project-[region]-[project]/sites/+page.ts | 10 +++++----- 8 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 src/lib/flags.ts diff --git a/.env.example b/.env.example index ae9250596..9ba4011c0 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ PUBLIC_CONSOLE_MODE=self-hosted +PUBLIC_CONSOLE_FEATURE_FLAGS= PUBLIC_APPWRITE_MULTI_REGION=false PUBLIC_APPWRITE_ENDPOINT=http://localhost/v1 - PUBLIC_STRIPE_KEY= PUBLIC_GROWTH_ENDPOINT= \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2a37e81d1..40e336f54 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -78,6 +78,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} build-args: | "PUBLIC_CONSOLE_MODE=cloud" + "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" "PUBLIC_APPWRITE_MULTI_REGION=true" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" "PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}" diff --git a/Dockerfile b/Dockerfile index 774fb6903..e172247b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,6 +21,7 @@ ADD ./src /app/src ADD ./static /app/static ARG PUBLIC_CONSOLE_MODE +ARG PUBLIC_CONSOLE_FEATURE_FLAGS ARG PUBLIC_APPWRITE_MULTI_REGION ARG PUBLIC_APPWRITE_ENDPOINT ARG PUBLIC_GROWTH_ENDPOINT @@ -31,6 +32,7 @@ ARG SENTRY_RELEASE ENV PUBLIC_APPWRITE_ENDPOINT=$PUBLIC_APPWRITE_ENDPOINT ENV PUBLIC_GROWTH_ENDPOINT=$PUBLIC_GROWTH_ENDPOINT ENV PUBLIC_CONSOLE_MODE=$PUBLIC_CONSOLE_MODE +ENV PUBLIC_CONSOLE_FEATURE_FLAGS=$PUBLIC_CONSOLE_FEATURE_FLAGS ENV PUBLIC_APPWRITE_MULTI_REGION=$PUBLIC_APPWRITE_MULTI_REGION ENV PUBLIC_STRIPE_KEY=$PUBLIC_STRIPE_KEY ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN diff --git a/build.js b/build.js index f56506dae..affdf3ddd 100644 --- a/build.js +++ b/build.js @@ -24,6 +24,7 @@ async function main() { log(bold().magenta('APPWRITE CONSOLE')); log(); logEnv('CONSOLE MODE', env?.PUBLIC_CONSOLE_MODE); + logEnv('CONSOLE FEATURE FLAGS', env?.PUBLIC_CONSOLE_FEATURE_FLAGS); logEnv('MULTI REGION', env?.PUBLIC_APPWRITE_MULTI_REGION); logEnv('APPWRITE ENDPOINT', env?.PUBLIC_APPWRITE_ENDPOINT, 'relative'); logEnv('GROWTH ENDPOINT', env?.PUBLIC_GROWTH_ENDPOINT); diff --git a/compose.yml b/compose.yml index 6166d3776..587619414 100644 --- a/compose.yml +++ b/compose.yml @@ -5,6 +5,7 @@ services: context: . args: PUBLIC_CONSOLE_MODE: ${PUBLIC_CONSOLE_MODE} + PUBLIC_CONSOLE_FEATURE_FLAGS: ${PUBLIC_CONSOLE_FEATURE_FLAGS} PUBLIC_APPWRITE_MULTI_REGION: ${PUBLIC_APPWRITE_MULTI_REGION} PUBLIC_APPWRITE_ENDPOINT: ${PUBLIC_APPWRITE_ENDPOINT} PUBLIC_GROWTH_ENDPOINT: ${PUBLIC_GROWTH_ENDPOINT} @@ -21,6 +22,7 @@ services: - build/ environment: - PUBLIC_CONSOLE_MODE + - PUBLIC_CONSOLE_FEATURE_FLAGS - PUBLIC_APPWRITE_MULTI_REGION - PUBLIC_APPWRITE_ENDPOINT - PUBLIC_GROWTH_ENDPOINT diff --git a/src/lib/flags.ts b/src/lib/flags.ts new file mode 100644 index 000000000..235eb4657 --- /dev/null +++ b/src/lib/flags.ts @@ -0,0 +1,13 @@ +import { env } from '$env/dynamic/public'; + +export const PUBLIC_CONSOLE_FEATURE_FLAGS = env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? ''; + +function setupFlag(name: string, _description: string) { + // TODO: Use flags library that provides visual component + return PUBLIC_CONSOLE_FEATURE_FLAGS.includes(name); +} + +export const flags = { + showSites: setupFlag('sites', 'When disabled, sites view will show high demand'), + showCsvImport: setupFlag('csv-import', 'When disabled, documents view will hide import button') +}; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte index 98627a228..8f21f8a7c 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte @@ -24,8 +24,7 @@ import { base } from '$app/paths'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import type { Models } from '@appwrite.io/console'; - import { organization } from '$lib/stores/organization'; - import { APPWRITE_OFFICIALS_ORG, isCloud } from '$lib/system'; + import { flags } from '$lib/flags'; export let data: PageData; @@ -88,14 +87,6 @@ $isCsvImportInProgress = false; } } - - /** - * Controls visibility of CSV Imports feature: - * - Shown if running on self-hosted - * - Shown on cloud only if the organization is Appwrite's. - * - Hidden on cloud for any non-Appwrite organization. - */ - $: showCsvImports = !isCloud || $organization.$id === APPWRITE_OFFICIALS_ORG; {#key page.params.collection} @@ -109,7 +100,7 @@ analyticsSource="database_documents" /> - {#if showCsvImports} + {#if flags.showCsvImport} - {/if} - - - - {#if data.databases.total} - {#if data.view === 'grid'} - - {:else} -
- {/if} - - - {:else if data.search} - - - +{#if data.error} + {#if data.error.type === 'general_resource_blocked'} + {:else} - (showCreate = true)} /> + {/if} - +{:else} + + + + + + + + {#if $canWriteDatabases} + + {/if} + + - + {#if data.databases.total} + {#if data.view === 'grid'} + + {:else} +
+ {/if} + + + {:else if data.search} + + + + {:else} + (showCreate = true)} /> + {/if} + + + +{/if} diff --git a/src/routes/(console)/project-[region]-[project]/databases/+page.ts b/src/routes/(console)/project-[region]-[project]/databases/+page.ts index 6abcffdc5..f78a84442 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/+page.ts @@ -21,23 +21,35 @@ export const load: PageLoad = async ({ url, route, depends, params, parent }) => // already loaded by parent. const { currentPlan } = await parent(); - const { databases, policies, lastBackups } = await fetchDatabasesAndBackups( - limit, - offset, - params, - search, - currentPlan - ); + try { + const { databases, policies, lastBackups } = await fetchDatabasesAndBackups( + limit, + offset, + params, + search, + currentPlan + ); + return { + offset, + limit, + view, + search, + policies, + databases, + lastBackups + }; - return { - offset, - limit, - view, - search, - policies, - databases, - lastBackups - }; + } catch (error) { + return { + error: { + type: error.type, + }, + offset, + limit, + view, + search, + }; + } }; async function fetchDatabasesAndBackups( diff --git a/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte b/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte new file mode 100644 index 000000000..2e458f043 --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte @@ -0,0 +1,15 @@ + + + + + Failed to load {resource} +

+ An error occurred while trying to load the {resource.toLowerCase()}. Please try again later or contact support if the issue persists. +

+
+
diff --git a/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte b/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte new file mode 100644 index 000000000..28841852f --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte @@ -0,0 +1,16 @@ + + + + + Your {resource} is paused +

+ We've detected unusual activity and temporarily paused your {resource}. If you believe + this is a mistake or need urgent access, please contact support@appwrite.io. +

+
+
From 8c5129f6f25487d7266269d0ec5303d390648e9e Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Wed, 4 Jun 2025 12:26:09 +0000 Subject: [PATCH 192/226] error handling --- src/global.d.ts | 9 +- .../project-[region]-[project]/+error.svelte | 23 +++- .../databases/+page.svelte | 110 ++++++++---------- .../databases/+page.ts | 17 ++- .../errorFailedToLoad.svelte | 15 --- .../errorResourceBlocked.svelte | 16 --- 6 files changed, 82 insertions(+), 108 deletions(-) delete mode 100644 src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte diff --git a/src/global.d.ts b/src/global.d.ts index db6b03f38..323101468 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,2 +1,9 @@ /// -interface Window {} +interface Window { } + +namespace App { + interface Error { + type: string, + resource: ?string = '', + } +} \ No newline at end of file diff --git a/src/routes/(console)/project-[region]-[project]/+error.svelte b/src/routes/(console)/project-[region]-[project]/+error.svelte index 9ef91393f..b5a41b2ec 100644 --- a/src/routes/(console)/project-[region]-[project]/+error.svelte +++ b/src/routes/(console)/project-[region]-[project]/+error.svelte @@ -1,13 +1,24 @@ - {'status' in page.error - ? page.error.status || 'Invalid Argument' - : 'Invalid Argument'} -

{page.error.message}

+ {#if page.error.type === 'general_resource_blocked'} + {@const resource = page.error.resource || 'project'} + + Your {resource} is paused +

+ We've detected unusual activity and temporarily paused your {resource}. If you + believe this is a mistake or need urgent access, please contact support@appwrite.io. +

+
+ {:else} + {'status' in page.error + ? page.error.status || 'Invalid Argument' + : 'Invalid Argument'} +

{page.error.message}

+ {/if}
diff --git a/src/routes/(console)/project-[region]-[project]/databases/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/+page.svelte index f807e8487..df3e783aa 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/+page.svelte @@ -17,8 +17,6 @@ import { Icon, Layout } from '@appwrite.io/pink-svelte'; import { IconPlus } from '@appwrite.io/pink-icons-svelte'; import EmptySearch from '$lib/components/emptySearch.svelte'; - import ErrorResourceBlocked from '../errorResourceBlocked.svelte'; - import ErrorFailedToLoad from '../errorFailedToLoad.svelte'; export let data: PageData; @@ -48,64 +46,56 @@ ]); -{#if data.error} - {#if data.error.type === 'general_resource_blocked'} - - {:else} - - {/if} -{:else} - - - - - - - - {#if $canWriteDatabases} - - {/if} - + + + + - - {#if data.databases.total} - {#if data.view === 'grid'} - - {:else} -
- {/if} - - - {:else if data.search} - + + + {#if $canWriteDatabases} - - {:else} - (showCreate = true)} /> - {/if} - + on:click={() => (showCreate = true)} + event="create_database" + disabled={isCreationDisabled}> + + Create database + + {/if} + + - -{/if} + {#if data.databases.total} + {#if data.view === 'grid'} + + {:else} +
+ {/if} + + + {:else if data.search} + + + + {:else} + (showCreate = true)} /> + {/if} + + + diff --git a/src/routes/(console)/project-[region]-[project]/databases/+page.ts b/src/routes/(console)/project-[region]-[project]/databases/+page.ts index f78a84442..ba5651226 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/+page.ts @@ -8,6 +8,7 @@ import type { BackupPolicy } from '$lib/sdk/backups'; import { isSelfHosted } from '$lib/system'; import { isCloud } from '$lib/system'; import type { Plan } from '$lib/sdk/billing'; +import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ url, route, depends, params, parent }) => { depends(Dependencies.DATABASES); @@ -39,16 +40,12 @@ export const load: PageLoad = async ({ url, route, depends, params, parent }) => lastBackups }; - } catch (error) { - return { - error: { - type: error.type, - }, - offset, - limit, - view, - search, - }; + } catch (e) { + error(e.status || 500, { + message: e.message, + type: e.type || 'unknown', + resource: 'databases' + }); } }; diff --git a/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte b/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte deleted file mode 100644 index 2e458f043..000000000 --- a/src/routes/(console)/project-[region]-[project]/errorFailedToLoad.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Failed to load {resource} -

- An error occurred while trying to load the {resource.toLowerCase()}. Please try again later or contact support if the issue persists. -

-
-
diff --git a/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte b/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte deleted file mode 100644 index 28841852f..000000000 --- a/src/routes/(console)/project-[region]-[project]/errorResourceBlocked.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Your {resource} is paused -

- We've detected unusual activity and temporarily paused your {resource}. If you believe - this is a mistake or need urgent access, please contact support@appwrite.io. -

-
-
From ac85bfccaa6714cd3c7a4d5b05c3407b3f7e4736 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 01:19:33 +0000 Subject: [PATCH 193/226] handle blocks in other project routes --- .../functions/+layout.ts | 34 +++++++++++------ .../messaging/+page.ts | 38 +++++++++++++------ .../settings/+page.ts | 33 ++++++++++------ .../project-[region]-[project]/sites/+page.ts | 38 ++++++++++++------- .../storage/+page.ts | 29 +++++++++----- 5 files changed, 113 insertions(+), 59 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts index 4cc6fe3d9..fa4a5aa51 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts @@ -4,21 +4,31 @@ import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; +import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ depends, params }) => { depends(Dependencies.FUNCTION_INSTALLATIONS); - const [runtimesList, installations, specificationsList] = await Promise.all([ - sdk.forProject(params.region, params.project).functions.listRuntimes(), - sdk.forProject(params.region, params.project).vcs.listInstallations([Query.limit(100)]), - sdk.forProject(params.region, params.project).functions.listSpecifications() - ]); + try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - runtimesList, - installations, - specificationsList - }; + const [runtimesList, installations, specificationsList] = await Promise.all([ + sdk.forProject(params.region, params.project).functions.listRuntimes(), + sdk.forProject(params.region, params.project).vcs.listInstallations([Query.limit(100)]), + sdk.forProject(params.region, params.project).functions.listSpecifications() + ]); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + runtimesList, + installations, + specificationsList + }; + } catch (e) { + error(e.code || 500, { + message: e.message, + type: e.type || 'unknown', + resource: 'functions' + }); + } }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts index 0436e02e7..7d4397fd2 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts @@ -12,6 +12,7 @@ import { import { sdk } from '$lib/stores/sdk'; import { Query, type Models } from '@appwrite.io/console'; import type { PageLoad } from './$types'; +import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ depends, url, route, params }) => { depends(Dependencies.MESSAGING_MESSAGES); @@ -26,14 +27,8 @@ export const load: PageLoad = async ({ depends, url, route, params }) => { const parsedQueries = queryParamToMap(query || '[]'); queries.set(parsedQueries); - return { - offset, - limit, - search, - query, - page, - view, - messages: (await sdk + try { + const messages = (await sdk .forProject(params.region, params.project) .messaging.listMessages( [ @@ -44,8 +39,27 @@ export const load: PageLoad = async ({ depends, url, route, params }) => { ], search || undefined )) as { - total: number; - messages: (Models.Message & { data: Record })[]; // Add typing for message.data - } - }; + total: number; + messages: (Models.Message & { data: Record })[]; // Add typing for message.data + }; + + return { + messages, + offset, + limit, + search, + query, + page, + view, + }; + } catch (e) { + return error( + e.code || 500, + { + message: e.message, + type: e.type || 'unknown', + resource: 'messaging' + } + ) + } }; diff --git a/src/routes/(console)/project-[region]-[project]/settings/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/+page.ts index e6f31e223..be82f4724 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/+page.ts @@ -2,6 +2,7 @@ import { Dependencies, PAGE_LIMIT } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import type { PageLoad } from './$types'; +import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ depends, url, params }) => { depends(Dependencies.PROJECT_VARIABLES); @@ -9,17 +10,25 @@ export const load: PageLoad = async ({ depends, url, params }) => { const limit = PAGE_LIMIT; const offset = Number(url.searchParams.get('offset') ?? 0); - const [variables, installations] = await Promise.all([ - sdk.forProject(params.region, params.project).projectApi.listVariables(), - sdk - .forProject(params.region, params.project) - .vcs.listInstallations([Query.limit(limit), Query.offset(offset)]) - ]); + try { + const [variables, installations] = await Promise.all([ + sdk.forProject(params.region, params.project).projectApi.listVariables(), + sdk + .forProject(params.region, params.project) + .vcs.listInstallations([Query.limit(limit), Query.offset(offset)]) + ]); - return { - limit, - offset, - variables, - installations - }; + return { + limit, + offset, + variables, + installations + }; + } catch (e) { + error(e.code || 500, { + message: e.message, + type: e.type || 'unknown', + resource: 'project' + }); + } }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index b76ee678e..c32143162 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -2,6 +2,7 @@ import { Query, type Models } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; +import { error } from '@sveltejs/kit'; export const load = async ({ url, depends, route, params }) => { depends(Dependencies.SITES); @@ -26,19 +27,28 @@ export const load = async ({ url, depends, route, params }) => { } as Models.SiteList }; - const siteList = await sdk - .forProject(params.region, params.project) - .sites.list( - [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], - search || undefined - ); + try { + const siteList = await sdk + .forProject(params.region, params.project) + .sites.list( + [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], + search || undefined + ); - return { - sitesLive, - offset, - limit, - search, - siteList, - view - }; + return { + sitesLive, + offset, + limit, + search, + siteList, + view + }; + } catch (e) { + error(e.code || 500, + { + message: e.message, + type: e.type || 'unknown', + resource: 'sites' + }); + } }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/+page.ts b/src/routes/(console)/project-[region]-[project]/storage/+page.ts index 61cb3d856..361dd0548 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/+page.ts @@ -3,6 +3,7 @@ import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT } from '$lib/constants'; import type { PageLoad } from './$types'; +import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ url, route, params }) => { const page = getPage(url); @@ -10,17 +11,27 @@ export const load: PageLoad = async ({ url, route, params }) => { const view = getView(url, route, View.Grid); const limit = getLimit(url, route, CARD_LIMIT); const offset = pageToOffset(page, limit); - - return { - offset, - limit, - view, - search, - buckets: await sdk + try { + const buckets = await sdk .forProject(params.region, params.project) .storage.listBuckets( [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], search || undefined - ) - }; + ); + + return { + offset, + limit, + view, + search, + buckets, + }; + } catch (e) { + error(e.code || 500, { + message: e.message, + type: e.type || 'unknown', + resource: 'storage' + } + ); + } }; From 5a594e083ec6dc2efcb9372cbad719002afa0bec Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 04:12:25 +0000 Subject: [PATCH 194/226] fix default value --- src/global.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index 323101468..5ce13e6be 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -3,7 +3,7 @@ interface Window { } namespace App { interface Error { - type: string, - resource: ?string = '', + type: string = 'unknown', + resource: string = 'project', } } \ No newline at end of file From 9042ca6f0b1a9ccdf9e64702c7be8334c21f1d13 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 05:30:34 +0000 Subject: [PATCH 195/226] refactored error handling and resource blocked message --- src/global.d.ts | 7 +- src/hooks.client.ts | 7 +- .../project-[region]-[project]/+error.svelte | 11 +- .../project-[region]-[project]/+layout.ts | 84 ++++++------- .../auth/teams/team-[team]/+layout.ts | 16 +-- .../auth/usage/[[period]]/+page.ts | 8 +- .../auth/user-[user]/+layout.ts | 25 ++-- .../databases/+page.ts | 42 +++---- .../databases/database-[database]/+layout.ts | 19 ++- .../collection-[collection]/+layout.ts | 36 +++--- .../document-[document]/+layout.ts | 60 +++++---- .../databases/usage/[[period]]/+page.ts | 7 +- .../functions/+layout.ts | 34 ++---- .../functions/function-[function]/+layout.ts | 43 +++---- .../usage/[[period]]/+page.ts | 18 ++- .../functions/usage/[[period]]/+page.ts | 8 +- .../messaging/+page.ts | 32 ++--- .../messaging/message-[message]/+layout.ts | 114 +++++++++--------- .../settings/+page.ts | 34 ++---- .../settings/webhooks/[webhook]/+layout.ts | 15 +-- .../project-[region]-[project]/sites/+page.ts | 33 ++--- .../sites/site-[site]/+layout.ts | 21 ++-- .../deployment-[deployment]/+layout.ts | 14 +-- .../site-[site]/usage/[[period]]/+page.ts | 8 +- .../sites/usage/[[period]]/+page.ts | 7 +- .../storage/+page.ts | 37 +++--- .../storage/bucket-[bucket]/+layout.ts | 19 ++- .../bucket-[bucket]/file-[file]/+layout.ts | 25 ++-- .../storage/usage/[[period]]/+page.ts | 14 +-- 29 files changed, 331 insertions(+), 467 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index 5ce13e6be..b90c917c5 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -4,6 +4,11 @@ interface Window { } namespace App { interface Error { type: string = 'unknown', - resource: string = 'project', + } + + interface HandleClientError { + message: string; + status?: number; + type: string; } } \ No newline at end of file diff --git a/src/hooks.client.ts b/src/hooks.client.ts index 5419792a0..c04dece39 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -13,13 +13,16 @@ Sentry.init({ export const handleError: HandleClientError = ({ error, message, status }) => { console.error(error); + let type = 'unknown'; if (error instanceof AppwriteException) { status = error.code === 0 ? undefined : error.code; message = error.message; + type = error.type } return { message, - status - }; + status, + type + } }; diff --git a/src/routes/(console)/project-[region]-[project]/+error.svelte b/src/routes/(console)/project-[region]-[project]/+error.svelte index b5a41b2ec..9b988b401 100644 --- a/src/routes/(console)/project-[region]-[project]/+error.svelte +++ b/src/routes/(console)/project-[region]-[project]/+error.svelte @@ -1,12 +1,19 @@ - {#if page.error.type === 'general_resource_blocked'} - {@const resource = page.error.resource || 'project'} + {@const resource = getResource(page.route.id)} Your {resource} is paused

diff --git a/src/routes/(console)/project-[region]-[project]/+layout.ts b/src/routes/(console)/project-[region]-[project]/+layout.ts index d9a79cbc1..518d5348a 100644 --- a/src/routes/(console)/project-[region]-[project]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/+layout.ts @@ -1,6 +1,5 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { error } from '@sveltejs/kit'; import type { LayoutLoad } from './$types'; import { preferences } from '$lib/stores/preferences'; import { failedInvoice } from '$lib/stores/billing'; @@ -17,50 +16,47 @@ export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.PROJECT); let currentPlan: Plan = null; - try { - const project = await sdk.forConsole.projects.get(params.project); - const [organization, prefs, regionalConsoleVariables, _] = await Promise.all([ - sdk.forConsole.teams.get(project.teamId) as Promise, - sdk.forConsole.account.getPrefs(), - sdk.forConsoleIn(project.region).console.variables(), - loadAvailableRegions(project.teamId) - ]); - if (prefs?.organization !== project.teamId) { - sdk.forConsole.account.updatePrefs({ - ...prefs, - organization: project.teamId - }); - } - await preferences.loadTeamPrefs(project.teamId); - let roles = isCloud ? [] : defaultRoles; - let scopes = isCloud ? [] : defaultScopes; - if (isCloud) { - currentPlan = await sdk.forConsole.billing.getOrganizationPlan(project.teamId); - const res = await sdk.forConsole.billing.getRoles(project.teamId); - roles = res.roles; - scopes = res.scopes; - if (scopes.includes('billing.read')) { - await failedInvoice.load(project.teamId); - if (get(failedInvoice)) { - headerAlert.add({ - show: true, - component: PaymentFailed, - id: 'paymentFailed', - importance: 1 - }); - } + const project = await sdk.forConsole.projects.get(params.project); + const [organization, prefs, regionalConsoleVariables, _] = await Promise.all([ + sdk.forConsole.teams.get(project.teamId) as Promise, + sdk.forConsole.account.getPrefs(), + sdk.forConsoleIn(project.region).console.variables(), + loadAvailableRegions(project.teamId) + ]); + if (prefs?.organization !== project.teamId) { + sdk.forConsole.account.updatePrefs({ + ...prefs, + organization: project.teamId + }); + } + await preferences.loadTeamPrefs(project.teamId); + let roles = isCloud ? [] : defaultRoles; + let scopes = isCloud ? [] : defaultScopes; + if (isCloud) { + currentPlan = await sdk.forConsole.billing.getOrganizationPlan(project.teamId); + const res = await sdk.forConsole.billing.getRoles(project.teamId); + roles = res.roles; + scopes = res.scopes; + if (scopes.includes('billing.read')) { + await failedInvoice.load(project.teamId); + if (get(failedInvoice)) { + headerAlert.add({ + show: true, + component: PaymentFailed, + id: 'paymentFailed', + importance: 1 + }); } } - - return { - project, - organization, - regionalConsoleVariables, - roles, - scopes, - currentPlan - }; - } catch (e) { - error(e.code, e.message); } + + return { + project, + organization, + regionalConsoleVariables, + roles, + scopes, + currentPlan + }; + }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts index 1134e2cf8..72053f51a 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts @@ -3,17 +3,13 @@ import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import type { LayoutLoad } from './$types'; import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.TEAM); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - team: await sdk.forProject(params.region, params.project).teams.get(params.team) - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + team: await sdk.forProject(params.region, params.project).teams.get(params.team) + }; + }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts index 57ff9ed91..3a6d51d15 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts @@ -2,15 +2,11 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { UserUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(UserUsageRange, params.period) ? params.period : UserUsageRange.ThirtyDays; - try { - return sdk.forProject(params.region, params.project).users.getUsage(period); - } catch (e) { - error(e.code, e.message); - } + return sdk.forProject(params.region, params.project).users.getUsage(period); + }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/+layout.ts b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/+layout.ts index 698ceaab5..4a712271d 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/user-[user]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/user-[user]/+layout.ts @@ -3,24 +3,19 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.USER); - try { - const [user, userFactors] = await Promise.all([ - sdk.forProject(params.region, params.project).users.get(params.user), - sdk.forProject(params.region, params.project).users.listMfaFactors(params.user) - ]); + const [user, userFactors] = await Promise.all([ + sdk.forProject(params.region, params.project).users.get(params.user), + sdk.forProject(params.region, params.project).users.listMfaFactors(params.user) + ]); - return { - header: Header, - breadcrumbs: Breadcrumbs, - user, - userFactors - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + user, + userFactors + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/+page.ts b/src/routes/(console)/project-[region]-[project]/databases/+page.ts index ba5651226..35841ef15 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/+page.ts @@ -8,7 +8,6 @@ import type { BackupPolicy } from '$lib/sdk/backups'; import { isSelfHosted } from '$lib/system'; import { isCloud } from '$lib/system'; import type { Plan } from '$lib/sdk/billing'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ url, route, depends, params, parent }) => { depends(Dependencies.DATABASES); @@ -22,31 +21,22 @@ export const load: PageLoad = async ({ url, route, depends, params, parent }) => // already loaded by parent. const { currentPlan } = await parent(); - try { - const { databases, policies, lastBackups } = await fetchDatabasesAndBackups( - limit, - offset, - params, - search, - currentPlan - ); - return { - offset, - limit, - view, - search, - policies, - databases, - lastBackups - }; - - } catch (e) { - error(e.status || 500, { - message: e.message, - type: e.type || 'unknown', - resource: 'databases' - }); - } + const { databases, policies, lastBackups } = await fetchDatabasesAndBackups( + limit, + offset, + params, + search, + currentPlan + ); + return { + offset, + limit, + view, + search, + policies, + databases, + lastBackups + }; }; async function fetchDatabasesAndBackups( diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts index b8eee5361..52825a46f 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts @@ -1,6 +1,5 @@ import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; import type { LayoutLoad } from './$types'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; @@ -8,15 +7,11 @@ import Header from './header.svelte'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.DATABASE); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - database: await sdk - .forProject(params.region, params.project) - .databases.get(params.database) - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + database: await sdk + .forProject(params.region, params.project) + .databases.get(params.database) + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+layout.ts index fb946c011..01b7a47ca 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+layout.ts @@ -3,30 +3,26 @@ import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; -import { error } from '@sveltejs/kit'; import SubNavigation from './subNavigation.svelte'; import { Query } from '@appwrite.io/console'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.COLLECTION); - try { - const [collection, allCollections] = await Promise.all([ - sdk - .forProject(params.region, params.project) - .databases.getCollection(params.database, params.collection), - sdk - .forProject(params.region, params.project) - .databases.listCollections(params.database, [Query.orderDesc(''), Query.limit(100)]) - ]); - return { - header: Header, - breadcrumbs: Breadcrumbs, - subNavigation: SubNavigation, - collection, - allCollections - }; - } catch (e) { - error(e.code, e.message); - } + const [collection, allCollections] = await Promise.all([ + sdk + .forProject(params.region, params.project) + .databases.getCollection(params.database, params.collection), + sdk + .forProject(params.region, params.project) + .databases.listCollections(params.database, [Query.orderDesc(''), Query.limit(100)]) + ]); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + subNavigation: SubNavigation, + collection, + allCollections + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts index 1642fda56..de89e5593 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts @@ -3,47 +3,43 @@ import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; -import { error } from '@sveltejs/kit'; import type { Attributes } from '../store'; export const load: LayoutLoad = async ({ params, parent, depends }) => { depends(Dependencies.DOCUMENT); const { collection } = await parent(); - try { - const document = await sdk - .forProject(params.region, params.project) - .databases.getDocument(params.database, params.collection, params.document); + const document = await sdk + .forProject(params.region, params.project) + .databases.getDocument(params.database, params.collection, params.document); - /** - * Sanitize DateTime to remove UTC Timezone section. - */ - collection.attributes.forEach((attribute) => { - const { type, key, array } = attribute as unknown as Attributes; - if (type === 'datetime') { - if (array) { - document[key] = document[key].map((n: string) => { - if (!n) { - return null; - } - return new Date(n).toISOString().slice(0, 23); - }); - } else { - if (document[key]) { - document[key] = new Date(document[key]).toISOString().slice(0, 23); - } else { - document[key] = null; + /** + * Sanitize DateTime to remove UTC Timezone section. + */ + collection.attributes.forEach((attribute) => { + const { type, key, array } = attribute as unknown as Attributes; + if (type === 'datetime') { + if (array) { + document[key] = document[key].map((n: string) => { + if (!n) { + return null; } + return new Date(n).toISOString().slice(0, 23); + }); + } else { + if (document[key]) { + document[key] = new Date(document[key]).toISOString().slice(0, 23); + } else { + document[key] = null; } } - }); + } + }); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + document + }; - return { - header: Header, - breadcrumbs: Breadcrumbs, - document - }; - } catch (e) { - error(e.code, e.message); - } }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/databases/usage/[[period]]/+page.ts index d39742634..f9b560e93 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/usage/[[period]]/+page.ts @@ -2,15 +2,10 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { DatabaseUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(DatabaseUsageRange, params.period) ? params.period : DatabaseUsageRange.ThirtyDays; - try { - return sdk.forProject(params.region, params.project).databases.getUsage(period); - } catch (e) { - error(e.code, e.message); - } + return sdk.forProject(params.region, params.project).databases.getUsage(period); }; diff --git a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts index fa4a5aa51..4cc6fe3d9 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts @@ -4,31 +4,21 @@ import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ depends, params }) => { depends(Dependencies.FUNCTION_INSTALLATIONS); - try { + const [runtimesList, installations, specificationsList] = await Promise.all([ + sdk.forProject(params.region, params.project).functions.listRuntimes(), + sdk.forProject(params.region, params.project).vcs.listInstallations([Query.limit(100)]), + sdk.forProject(params.region, params.project).functions.listSpecifications() + ]); - const [runtimesList, installations, specificationsList] = await Promise.all([ - sdk.forProject(params.region, params.project).functions.listRuntimes(), - sdk.forProject(params.region, params.project).vcs.listInstallations([Query.limit(100)]), - sdk.forProject(params.region, params.project).functions.listSpecifications() - ]); - - return { - header: Header, - breadcrumbs: Breadcrumbs, - runtimesList, - installations, - specificationsList - }; - } catch (e) { - error(e.code || 500, { - message: e.message, - type: e.type || 'unknown', - resource: 'functions' - }); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + runtimesList, + installations, + specificationsList + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts index 75207a4cd..4d0fb4d2c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts @@ -3,7 +3,6 @@ import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; -import { error } from '@sveltejs/kit'; import { Query } from '@appwrite.io/console'; import { RuleType } from '$lib/stores/sdk'; @@ -11,29 +10,25 @@ export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.FUNCTION); depends(Dependencies.DEPLOYMENTS); - try { - const func = await sdk - .forProject(params.region, params.project) - .functions.get(params.function); + const func = await sdk + .forProject(params.region, params.project) + .functions.get(params.function); - //TODO remove rule limit of 1 and display extra rules - const proxyRuleList = await sdk - .forProject(params.region, params.project) - .proxy.listRules([ - Query.equal('type', RuleType.DEPLOYMENT), - Query.equal('deploymentResourceType', DeploymentResourceType.FUNCTION), - Query.equal('deploymentResourceId', params.function), - Query.equal('deploymentId', func.deploymentId), - Query.limit(1) - ]); + //TODO remove rule limit of 1 and display extra rules + const proxyRuleList = await sdk + .forProject(params.region, params.project) + .proxy.listRules([ + Query.equal('type', RuleType.DEPLOYMENT), + Query.equal('deploymentResourceType', DeploymentResourceType.FUNCTION), + Query.equal('deploymentResourceId', params.function), + Query.equal('deploymentId', func.deploymentId), + Query.limit(1) + ]); - return { - header: Header, - breadcrumbs: Breadcrumbs, - function: func, - proxyRuleList - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + function: func, + proxyRuleList + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts index 6b93366f8..748ada6a1 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts @@ -1,18 +1,14 @@ import { sdk } from '$lib/stores/sdk'; import { FunctionUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; import { isValueOfStringEnum } from '$lib/helpers/types'; export const load: PageLoad = async ({ params }) => { - try { - const period = isValueOfStringEnum(FunctionUsageRange, params.period) - ? params.period - : FunctionUsageRange.ThirtyDays; - return sdk - .forProject(params.region, params.project) - .functions.getUsage(params.function, period); - } catch (e) { - error(e.code, e.message); - } + const period = isValueOfStringEnum(FunctionUsageRange, params.period) + ? params.period + : FunctionUsageRange.ThirtyDays; + return sdk + .forProject(params.region, params.project) + .functions.getUsage(params.function, period); + }; diff --git a/src/routes/(console)/project-[region]-[project]/functions/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/usage/[[period]]/+page.ts index ced4841d8..ab938908c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/usage/[[period]]/+page.ts @@ -2,15 +2,11 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { FunctionUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(FunctionUsageRange, params.period) ? params.period : FunctionUsageRange.ThirtyDays; - try { - return sdk.forProject(params.region, params.project).functions.listUsage(period); - } catch (e) { - error(e.code, e.message); - } + + return sdk.forProject(params.region, params.project).functions.listUsage(period); }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts index 7d4397fd2..ea054f8a6 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts @@ -12,7 +12,6 @@ import { import { sdk } from '$lib/stores/sdk'; import { Query, type Models } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ depends, url, route, params }) => { depends(Dependencies.MESSAGING_MESSAGES); @@ -27,8 +26,14 @@ export const load: PageLoad = async ({ depends, url, route, params }) => { const parsedQueries = queryParamToMap(query || '[]'); queries.set(parsedQueries); - try { - const messages = (await sdk + return { + offset, + limit, + search, + query, + page, + view, + messages: (await sdk .forProject(params.region, params.project) .messaging.listMessages( [ @@ -41,25 +46,6 @@ export const load: PageLoad = async ({ depends, url, route, params }) => { )) as { total: number; messages: (Models.Message & { data: Record })[]; // Add typing for message.data - }; - - return { - messages, - offset, - limit, - search, - query, - page, - view, - }; - } catch (e) { - return error( - e.code || 500, - { - message: e.message, - type: e.type || 'unknown', - resource: 'messaging' } - ) - } + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts index 904ac32a1..b05e8ba2b 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts @@ -3,77 +3,73 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; import type { Models } from '@appwrite.io/console'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.MESSAGING_MESSAGE); - try { - const message = await sdk - .forProject(params.region, params.project) - .messaging.getMessage(params.message); + const message = await sdk + .forProject(params.region, params.project) + .messaging.getMessage(params.message); - const topicsById: Record = {}; - const topicsPromise = Promise.allSettled( - message.topics.map((topicId) => - sdk.forProject(params.region, params.project).messaging.getTopic(topicId) - ) - ).then((results) => { - results.forEach((result) => { - if (result.status === 'fulfilled') { - topicsById[result.value.$id] = result.value; - } + const topicsById: Record = {}; + const topicsPromise = Promise.allSettled( + message.topics.map((topicId) => + sdk.forProject(params.region, params.project).messaging.getTopic(topicId) + ) + ).then((results) => { + results.forEach((result) => { + if (result.status === 'fulfilled') { + topicsById[result.value.$id] = result.value; + } + }); + }); + + const targetsById: Record = {}; + const targetsPromise = sdk + .forProject(params.region, params.project) + .messaging.listTargets(params.message) + .then((response) => { + response.targets.forEach((target) => { + targetsById[target.$id] = target; }); }); - const targetsById: Record = {}; - const targetsPromise = sdk + await Promise.allSettled([topicsPromise, targetsPromise]); + + const usersById: Record> = {}; + const usersPromise = Object.values(targetsById).map((target) => + sdk .forProject(params.region, params.project) - .messaging.listTargets(params.message) - .then((response) => { - response.targets.forEach((target) => { - targetsById[target.$id] = target; - }); - }); + .users.get(target.userId) + .then((user) => { + usersById[user.$id] = user; + }) + ); - await Promise.allSettled([topicsPromise, targetsPromise]); + const messageRecipients: Record> = {}; + const messageRecipientsPromise = Object.values(message.users).map((userId) => + sdk + .forProject(params.region, params.project) + .users.get(userId) + .then((user) => { + messageRecipients[user.$id] = user; + }) + .catch(() => { + messageRecipients[userId] = null; + }) + ); - const usersById: Record> = {}; - const usersPromise = Object.values(targetsById).map((target) => - sdk - .forProject(params.region, params.project) - .users.get(target.userId) - .then((user) => { - usersById[user.$id] = user; - }) - ); + await Promise.allSettled([usersPromise, messageRecipientsPromise]); - const messageRecipients: Record> = {}; - const messageRecipientsPromise = Object.values(message.users).map((userId) => - sdk - .forProject(params.region, params.project) - .users.get(userId) - .then((user) => { - messageRecipients[user.$id] = user; - }) - .catch(() => { - messageRecipients[userId] = null; - }) - ); + return { + message, + topicsById, + targetsById, + usersById, + messageRecipients, + header: Header, + breadcrumbs: Breadcrumbs + }; - await Promise.allSettled([usersPromise, messageRecipientsPromise]); - - return { - message, - topicsById, - targetsById, - usersById, - messageRecipients, - header: Header, - breadcrumbs: Breadcrumbs - }; - } catch (e) { - throw error(e.code, e.message); - } }; diff --git a/src/routes/(console)/project-[region]-[project]/settings/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/+page.ts index be82f4724..0d9d3dca9 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/+page.ts @@ -2,7 +2,6 @@ import { Dependencies, PAGE_LIMIT } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ depends, url, params }) => { depends(Dependencies.PROJECT_VARIABLES); @@ -10,25 +9,18 @@ export const load: PageLoad = async ({ depends, url, params }) => { const limit = PAGE_LIMIT; const offset = Number(url.searchParams.get('offset') ?? 0); - try { - const [variables, installations] = await Promise.all([ - sdk.forProject(params.region, params.project).projectApi.listVariables(), - sdk - .forProject(params.region, params.project) - .vcs.listInstallations([Query.limit(limit), Query.offset(offset)]) - ]); + const [variables, installations] = await Promise.all([ + sdk.forProject(params.region, params.project).projectApi.listVariables(), + sdk + .forProject(params.region, params.project) + .vcs.listInstallations([Query.limit(limit), Query.offset(offset)]) + ]); + + return { + limit, + offset, + variables, + installations + }; - return { - limit, - offset, - variables, - installations - }; - } catch (e) { - error(e.code || 500, { - message: e.message, - type: e.type || 'unknown', - resource: 'project' - }); - } }; diff --git a/src/routes/(console)/project-[region]-[project]/settings/webhooks/[webhook]/+layout.ts b/src/routes/(console)/project-[region]-[project]/settings/webhooks/[webhook]/+layout.ts index 940fbeef8..a38c24efb 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/webhooks/[webhook]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/webhooks/[webhook]/+layout.ts @@ -3,18 +3,13 @@ import { sdk } from '$lib/stores/sdk'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import type { LayoutLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.WEBHOOK); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - webhook: await sdk.forConsole.projects.getWebhook(params.project, params.webhook) - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + webhook: await sdk.forConsole.projects.getWebhook(params.project, params.webhook) + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index c32143162..c4250e613 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -2,7 +2,6 @@ import { Query, type Models } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT, Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; export const load = async ({ url, depends, route, params }) => { depends(Dependencies.SITES); @@ -27,28 +26,18 @@ export const load = async ({ url, depends, route, params }) => { } as Models.SiteList }; - try { - const siteList = await sdk + + return { + sitesLive, + offset, + limit, + search, + siteList: await sdk .forProject(params.region, params.project) .sites.list( [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], search || undefined - ); - - return { - sitesLive, - offset, - limit, - search, - siteList, - view - }; - } catch (e) { - error(e.code || 500, - { - message: e.message, - type: e.type || 'unknown', - resource: 'sites' - }); - } -}; + ), + view + }; +} diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts index 491697969..b05c763f8 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/+layout.ts @@ -2,21 +2,16 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { error } from '@sveltejs/kit'; export const load = async ({ depends, params }) => { depends(Dependencies.SITE); - try { - const [site] = await Promise.all([ - sdk.forProject(params.region, params.project).sites.get(params.site) - ]); + const [site] = await Promise.all([ + sdk.forProject(params.region, params.project).sites.get(params.site) + ]); - return { - site, - header: Header, - breadcrumbs: Breadcrumbs - }; - } catch (e) { - error(e.code, e.message); - } + return { + site, + header: Header, + breadcrumbs: Breadcrumbs + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+layout.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+layout.ts index 282ea4dc1..f531ddd3b 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+layout.ts @@ -1,16 +1,12 @@ import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; export const load = async ({ depends }) => { depends(Dependencies.SITE); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs - }; - } catch (e) { - error(e.code, e.message); - } + + return { + header: Header, + breadcrumbs: Breadcrumbs + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts index db813ddf3..c9f10e12f 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts @@ -2,15 +2,11 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { SiteUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(SiteUsageRange, params.period) ? params.period : SiteUsageRange.ThirtyDays; - try { - return sdk.forProject(params.region, params.project).sites.getUsage(params.site, period); - } catch (e) { - error(e.code, e.message); - } + + return sdk.forProject(params.region, params.project).sites.getUsage(params.site, period); }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/usage/[[period]]/+page.ts index 1aa27edd8..b38896918 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/usage/[[period]]/+page.ts @@ -2,15 +2,10 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { SiteUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(SiteUsageRange, params.period) ? params.period : SiteUsageRange.ThirtyDays; - try { - return sdk.forProject(params.region, params.project).sites.listUsage(period); - } catch (e) { - error(e.code, e.message); - } + return sdk.forProject(params.region, params.project).sites.listUsage(period); }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/+page.ts b/src/routes/(console)/project-[region]-[project]/storage/+page.ts index 361dd0548..43e7af97b 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/+page.ts @@ -3,7 +3,6 @@ import { sdk } from '$lib/stores/sdk'; import { getLimit, getPage, getSearch, getView, pageToOffset, View } from '$lib/helpers/load'; import { CARD_LIMIT } from '$lib/constants'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ url, route, params }) => { const page = getPage(url); @@ -11,27 +10,19 @@ export const load: PageLoad = async ({ url, route, params }) => { const view = getView(url, route, View.Grid); const limit = getLimit(url, route, CARD_LIMIT); const offset = pageToOffset(page, limit); - try { - const buckets = await sdk - .forProject(params.region, params.project) - .storage.listBuckets( - [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], - search || undefined - ); - - return { - offset, - limit, - view, - search, - buckets, - }; - } catch (e) { - error(e.code || 500, { - message: e.message, - type: e.type || 'unknown', - resource: 'storage' - } + const buckets = await sdk + .forProject(params.region, params.project) + .storage.listBuckets( + [Query.limit(limit), Query.offset(offset), Query.orderDesc('')], + search || undefined ); - } + + return { + offset, + limit, + view, + search, + buckets, + }; + }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts index 3de7dc104..8fe99007f 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts @@ -3,20 +3,15 @@ import Breadcrumbs from './breadcrumbs.svelte'; import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.BUCKET); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - bucket: await sdk - .forProject(params.region, params.project) - .storage.getBucket(params.bucket) - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + bucket: await sdk + .forProject(params.region, params.project) + .storage.getBucket(params.bucket) + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+layout.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+layout.ts index e198256ae..78eb76daf 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+layout.ts @@ -3,24 +3,19 @@ import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; import type { LayoutLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.FILE); depends(Dependencies.FILE_TOKENS); - try { - return { - header: Header, - breadcrumbs: Breadcrumbs, - file: await sdk - .forProject(params.region, params.project) - .storage.getFile(params.bucket, params.file), - tokens: await sdk - .forProject(params.region, params.project) - .tokens.list(params.bucket, params.file) - }; - } catch (e) { - error(e.code, e.message); - } + return { + header: Header, + breadcrumbs: Breadcrumbs, + file: await sdk + .forProject(params.region, params.project) + .storage.getFile(params.bucket, params.file), + tokens: await sdk + .forProject(params.region, params.project) + .tokens.list(params.bucket, params.file) + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts index e51803966..e20787e02 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts @@ -2,15 +2,11 @@ import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; import { StorageUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { - try { - const period = isValueOfStringEnum(StorageUsageRange, params.period) - ? params.period - : StorageUsageRange.ThirtyDays; - return sdk.forProject(params.region, params.project).storage.getUsage(period); - } catch (e) { - error(e.code, e.message); - } + const period = isValueOfStringEnum(StorageUsageRange, params.period) + ? params.period + : StorageUsageRange.ThirtyDays; + return sdk.forProject(params.region, params.project).storage.getUsage(period); + }; From f25bcddcaeb755f4808755977da18e1246c4233e Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 05:44:54 +0000 Subject: [PATCH 196/226] improve typings --- src/global.d.ts | 4 ++-- src/hooks.client.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index b90c917c5..4c3895a50 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -3,12 +3,12 @@ interface Window { } namespace App { interface Error { - type: string = 'unknown', + type?: string, } interface HandleClientError { message: string; status?: number; - type: string; + type?: string; } } \ No newline at end of file diff --git a/src/hooks.client.ts b/src/hooks.client.ts index c04dece39..b3d426ffd 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -13,7 +13,8 @@ Sentry.init({ export const handleError: HandleClientError = ({ error, message, status }) => { console.error(error); - let type = 'unknown'; + + let type; if (error instanceof AppwriteException) { status = error.code === 0 ? undefined : error.code; message = error.message; From 555a8e3630a99f82916c625aedc24a38a38bf1fe Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 05:58:35 +0000 Subject: [PATCH 197/226] improve message --- .../(console)/project-[region]-[project]/+error.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/+error.svelte b/src/routes/(console)/project-[region]-[project]/+error.svelte index 9b988b401..6c8fe7bd0 100644 --- a/src/routes/(console)/project-[region]-[project]/+error.svelte +++ b/src/routes/(console)/project-[region]-[project]/+error.svelte @@ -2,7 +2,8 @@ import { page } from '$app/state'; import { Container } from '$lib/layout'; import { Card, Typography } from '@appwrite.io/pink-svelte'; - function getResource(id: string) { + import { capitalize } from '$lib/helpers/string'; + function getResource(id: string) { id = id.replace('/(console)/project-[region]-[project]/', ''); let parts = id.split('/'); const resource = parts[0]; @@ -15,7 +16,7 @@ {#if page.error.type === 'general_resource_blocked'} {@const resource = getResource(page.route.id)} - Your {resource} is paused + Your {capitalize(resource)} is paused

We've detected unusual activity and temporarily paused your {resource}. If you believe this is a mistake or need urgent access, please contact support@appwrite.io. From 0d94f93f2b8834eaa3bad470beaeb81a943253f0 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 05:59:23 +0000 Subject: [PATCH 198/226] fix linter --- src/global.d.ts | 6 +++--- src/hooks.client.ts | 4 ++-- src/routes/(console)/project-[region]-[project]/+layout.ts | 1 - .../auth/teams/team-[team]/+layout.ts | 1 - .../auth/usage/[[period]]/+page.ts | 1 - .../databases/database-[database]/+layout.ts | 4 +--- .../collection-[collection]/document-[document]/+layout.ts | 1 - .../functions/function-[function]/+layout.ts | 4 +--- .../functions/function-[function]/usage/[[period]]/+page.ts | 1 - .../(console)/project-[region]-[project]/messaging/+page.ts | 6 +++--- .../messaging/message-[message]/+layout.ts | 1 - .../(console)/project-[region]-[project]/settings/+page.ts | 1 - .../(console)/project-[region]-[project]/sites/+page.ts | 3 +-- .../sites/site-[site]/usage/[[period]]/+page.ts | 2 +- .../(console)/project-[region]-[project]/storage/+page.ts | 3 +-- .../storage/bucket-[bucket]/+layout.ts | 4 +--- .../storage/usage/[[period]]/+page.ts | 1 - 17 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index 4c3895a50..104ada708 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,9 +1,9 @@ /// -interface Window { } +interface Window {} namespace App { interface Error { - type?: string, + type?: string; } interface HandleClientError { @@ -11,4 +11,4 @@ namespace App { status?: number; type?: string; } -} \ No newline at end of file +} diff --git a/src/hooks.client.ts b/src/hooks.client.ts index b3d426ffd..4a6565025 100644 --- a/src/hooks.client.ts +++ b/src/hooks.client.ts @@ -18,12 +18,12 @@ export const handleError: HandleClientError = ({ error, message, status }) => { if (error instanceof AppwriteException) { status = error.code === 0 ? undefined : error.code; message = error.message; - type = error.type + type = error.type; } return { message, status, type - } + }; }; diff --git a/src/routes/(console)/project-[region]-[project]/+layout.ts b/src/routes/(console)/project-[region]-[project]/+layout.ts index 518d5348a..31f7331c7 100644 --- a/src/routes/(console)/project-[region]-[project]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/+layout.ts @@ -58,5 +58,4 @@ export const load: LayoutLoad = async ({ params, depends }) => { scopes, currentPlan }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts index 72053f51a..6bd3c93ac 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/teams/team-[team]/+layout.ts @@ -11,5 +11,4 @@ export const load: LayoutLoad = async ({ params, depends }) => { breadcrumbs: Breadcrumbs, team: await sdk.forProject(params.region, params.project).teams.get(params.team) }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts index 3a6d51d15..5c3b01d12 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/usage/[[period]]/+page.ts @@ -8,5 +8,4 @@ export const load: PageLoad = async ({ params }) => { ? params.period : UserUsageRange.ThirtyDays; return sdk.forProject(params.region, params.project).users.getUsage(period); - }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts index 52825a46f..03283b967 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/+layout.ts @@ -10,8 +10,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { header: Header, breadcrumbs: Breadcrumbs, - database: await sdk - .forProject(params.region, params.project) - .databases.get(params.database) + database: await sdk.forProject(params.region, params.project).databases.get(params.database) }; }; diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts index de89e5593..0c83436f4 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/document-[document]/+layout.ts @@ -41,5 +41,4 @@ export const load: LayoutLoad = async ({ params, parent, depends }) => { breadcrumbs: Breadcrumbs, document }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts index 4d0fb4d2c..bf8d68f8c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/+layout.ts @@ -10,9 +10,7 @@ export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.FUNCTION); depends(Dependencies.DEPLOYMENTS); - const func = await sdk - .forProject(params.region, params.project) - .functions.get(params.function); + const func = await sdk.forProject(params.region, params.project).functions.get(params.function); //TODO remove rule limit of 1 and display extra rules const proxyRuleList = await sdk diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts index 748ada6a1..a802c1c30 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/usage/[[period]]/+page.ts @@ -10,5 +10,4 @@ export const load: PageLoad = async ({ params }) => { return sdk .forProject(params.region, params.project) .functions.getUsage(params.function, period); - }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts index ea054f8a6..0436e02e7 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/messaging/+page.ts @@ -44,8 +44,8 @@ export const load: PageLoad = async ({ depends, url, route, params }) => { ], search || undefined )) as { - total: number; - messages: (Models.Message & { data: Record })[]; // Add typing for message.data - } + total: number; + messages: (Models.Message & { data: Record })[]; // Add typing for message.data + } }; }; diff --git a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts index b05e8ba2b..355a93be1 100644 --- a/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/messaging/message-[message]/+layout.ts @@ -71,5 +71,4 @@ export const load: LayoutLoad = async ({ params, depends }) => { header: Header, breadcrumbs: Breadcrumbs }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/settings/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/+page.ts index 0d9d3dca9..e6f31e223 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/+page.ts @@ -22,5 +22,4 @@ export const load: PageLoad = async ({ depends, url, params }) => { variables, installations }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/sites/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/+page.ts index c4250e613..ed74afbfc 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/+page.ts @@ -26,7 +26,6 @@ export const load = async ({ url, depends, route, params }) => { } as Models.SiteList }; - return { sitesLive, offset, @@ -40,4 +39,4 @@ export const load = async ({ url, depends, route, params }) => { ), view }; -} +}; diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts index c9f10e12f..f63696403 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/usage/[[period]]/+page.ts @@ -7,6 +7,6 @@ export const load: PageLoad = async ({ params }) => { const period = isValueOfStringEnum(SiteUsageRange, params.period) ? params.period : SiteUsageRange.ThirtyDays; - + return sdk.forProject(params.region, params.project).sites.getUsage(params.site, period); }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/+page.ts b/src/routes/(console)/project-[region]-[project]/storage/+page.ts index 43e7af97b..b68f763af 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/+page.ts @@ -22,7 +22,6 @@ export const load: PageLoad = async ({ url, route, params }) => { limit, view, search, - buckets, + buckets }; - }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts index 8fe99007f..776b5506f 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/+layout.ts @@ -10,8 +10,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { header: Header, breadcrumbs: Breadcrumbs, - bucket: await sdk - .forProject(params.region, params.project) - .storage.getBucket(params.bucket) + bucket: await sdk.forProject(params.region, params.project).storage.getBucket(params.bucket) }; }; diff --git a/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts b/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts index e20787e02..b54be8165 100644 --- a/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/storage/usage/[[period]]/+page.ts @@ -8,5 +8,4 @@ export const load: PageLoad = async ({ params }) => { ? params.period : StorageUsageRange.ThirtyDays; return sdk.forProject(params.region, params.project).storage.getUsage(period); - }; From 6ae329f7d770f060d3ceaff7f4be70d55fd27e56 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Thu, 5 Jun 2025 06:53:28 +0000 Subject: [PATCH 199/226] Improve error message with support link --- .../project-[region]-[project]/+error.svelte | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/+error.svelte b/src/routes/(console)/project-[region]-[project]/+error.svelte index 6c8fe7bd0..3f5197414 100644 --- a/src/routes/(console)/project-[region]-[project]/+error.svelte +++ b/src/routes/(console)/project-[region]-[project]/+error.svelte @@ -1,8 +1,11 @@ diff --git a/src/routes/(console)/project-[region]-[project]/sites/grid.svelte b/src/routes/(console)/project-[region]-[project]/sites/grid.svelte index 59effbc6d..5873133fc 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/grid.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/grid.svelte @@ -34,7 +34,7 @@ function getFilePreview(fileId: string) { // TODO: @Meldiron use sdk.forConsole.storage.getFilePreview - const endpoint = getApiEndpoint(); + const endpoint = getApiEndpoint(page.params.region); return endpoint + `/storage/buckets/screenshots/files/${fileId}/view?project=console`; } From a83a96b54d4bdffa290034a12afe06243f77d584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Thu, 5 Jun 2025 15:42:03 +0200 Subject: [PATCH 201/226] Update src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte --- .../sites/(components)/siteCard.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte b/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte index a277f375b..2ad1fb86b 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte @@ -20,7 +20,7 @@ import { app } from '$lib/stores/app'; import { base } from '$app/paths'; import { isCloud } from '$lib/system'; - import { getApiEndpoint, sdk } from '$lib/stores/sdk'; + import { getApiEndpoint } from '$lib/stores/sdk'; import { capitalize } from '$lib/helpers/string'; import { page } from '$app/state'; From 3af3c39b2d66bcba150aa0a0391845fd66dd7323 Mon Sep 17 00:00:00 2001 From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com> Date: Thu, 5 Jun 2025 14:56:17 -0700 Subject: [PATCH 202/226] fix(migrations): update link for exporting to self-hosted instance The link should point to the docs for migrating from Cloud. --- .../project-[region]-[project]/settings/migrations/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte index b404c4b3d..1b885de3e 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte @@ -245,7 +245,7 @@ Export data from your project to a self-hosted instance. Learn more From bc0baac9bcbc60e86780b5b8fed904c8b40bba6e Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 5 Jun 2025 17:14:46 -0700 Subject: [PATCH 203/226] fix: update isNewOrg logic on apply-credit page The logic was for an existing org, but the variable name was isNewOrg. This commit updates the logic to match the variable name. --- src/routes/(console)/apply-credit/+page.svelte | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/routes/(console)/apply-credit/+page.svelte b/src/routes/(console)/apply-credit/+page.svelte index 1c86a2c5d..9f18e6cd8 100644 --- a/src/routes/(console)/apply-credit/+page.svelte +++ b/src/routes/(console)/apply-credit/+page.svelte @@ -246,14 +246,12 @@ billingPlan = getBillingPlan(); } - $: isNewOrg = selectedOrgId && selectedOrgId !== newOrgId; + $: isNewOrg = !(selectedOrgId && selectedOrgId !== newOrgId); - $: { - if (isNewOrg) { - (async () => { - currentPlan = await sdk.forConsole.billing.getOrganizationPlan(selectedOrgId); - })(); - } + $: if (!isNewOrg) { + (async () => { + currentPlan = await sdk.forConsole.billing.getOrganizationPlan(selectedOrgId); + })(); } // after adding a payment method, fetch the payment methods again so the input can be updated @@ -371,7 +369,7 @@ {collaborators} bind:couponData bind:billingBudget - organizationId={isNewOrg ? selectedOrgId : null}> + organizationId={!isNewOrg ? selectedOrgId : null}> {#if campaign?.template === 'review' && (campaign?.cta || campaign?.claimed || campaign?.unclaimed)}

{campaign?.cta}

From ea5dc1fae5a23d28f4134c8e76c25a5533329044 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 5 Jun 2025 17:18:45 -0700 Subject: [PATCH 204/226] fix: reload payment methods if organization changes This ensures the payment method input is updated to the newly selected organization's payment method after switching. --- src/routes/(console)/apply-credit/+page.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/(console)/apply-credit/+page.svelte b/src/routes/(console)/apply-credit/+page.svelte index 9f18e6cd8..fe352d4a7 100644 --- a/src/routes/(console)/apply-credit/+page.svelte +++ b/src/routes/(console)/apply-credit/+page.svelte @@ -252,6 +252,7 @@ (async () => { currentPlan = await sdk.forConsole.billing.getOrganizationPlan(selectedOrgId); })(); + loadPaymentMethods(); } // after adding a payment method, fetch the payment methods again so the input can be updated From 6a5363efbf35998e90334b06e1ae0e6581329fc3 Mon Sep 17 00:00:00 2001 From: Steven Nguyen Date: Thu, 5 Jun 2025 17:58:15 -0700 Subject: [PATCH 205/226] fix: prevent updating plan without coupon on apply credits page --- src/routes/(console)/apply-credit/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/apply-credit/+page.svelte b/src/routes/(console)/apply-credit/+page.svelte index fe352d4a7..9076f2824 100644 --- a/src/routes/(console)/apply-credit/+page.svelte +++ b/src/routes/(console)/apply-credit/+page.svelte @@ -396,7 +396,7 @@ handleSubmit(); } }} - disabled={$isSubmitting}> + disabled={!couponData?.code || $isSubmitting}> {#if $isSubmitting} From 1658101fc575cd5dc10ad030680dec96d20b4927 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 6 Jun 2025 14:05:51 +0530 Subject: [PATCH 206/226] fix: alert and alignment issues. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/lib/commandCenter/panels/ai.svelte | 13 +++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 1462d9839..1408c487e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", - "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@4e03f34", + "@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@40bae6b", "@popperjs/core": "^2.11.8", "@sentry/sveltekit": "^8.38.0", "@stripe/stripe-js": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0c7936b0..d45decef9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@appwrite.io/pink-svelte': - specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@4e03f34 - version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34(svelte@5.25.3) + specifier: https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@40bae6b + version: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@40bae6b(svelte@5.25.3) '@popperjs/core': specifier: ^2.11.8 version: 2.11.8 @@ -281,8 +281,8 @@ packages: '@appwrite.io/pink-legacy@1.0.3': resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==} - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34': - resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34} + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@40bae6b': + resolution: {tarball: https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@40bae6b} version: 2.0.0-RC.2 peerDependencies: svelte: ^4.0.0 @@ -3654,7 +3654,7 @@ snapshots: '@appwrite.io/pink-icons': 1.0.0 the-new-css-reset: 1.11.3 - '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@4e03f34(svelte@5.25.3)': + '@appwrite.io/pink-svelte@https://pkg.vc/-/@appwrite/%40appwrite.io%2Fpink-svelte@40bae6b(svelte@5.25.3)': dependencies: '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3) '@floating-ui/dom': 1.6.13 diff --git a/src/lib/commandCenter/panels/ai.svelte b/src/lib/commandCenter/panels/ai.svelte index 9bda77da8..e44d0e28e 100644 --- a/src/lib/commandCenter/panels/ai.svelte +++ b/src/lib/commandCenter/panels/ai.svelte @@ -167,13 +167,10 @@
{ $preferences.hideAiDisclaimer = true; - }}> - - We collect user responses to refine our experimental AI feature. - - + }} />
{/if} @@ -229,8 +226,11 @@ { handleSubmit(e); }}> @@ -238,6 +238,7 @@ Date: Fri, 6 Jun 2025 11:18:15 +0200 Subject: [PATCH 207/226] fix: projects org change button --- .../settings/changeOrganization.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/settings/changeOrganization.svelte b/src/routes/(console)/project-[region]-[project]/settings/changeOrganization.svelte index 848b718db..eb3fb4a20 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/changeOrganization.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/changeOrganization.svelte @@ -30,7 +30,7 @@ From 9280f329a3883d6fc2a7217dfed9717f2a6be36d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Fri, 6 Jun 2025 11:44:35 +0200 Subject: [PATCH 208/226] Implement featuer flags todos --- src/lib/flags.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/flags.ts b/src/lib/flags.ts index 5aa41cdad..5b50b5ba0 100644 --- a/src/lib/flags.ts +++ b/src/lib/flags.ts @@ -1,4 +1,7 @@ import { env } from '$env/dynamic/public'; +import { get } from 'svelte/store'; +import { user } from '$lib/stores/user'; +import { organization } from '$lib/stores/organization'; export const PUBLIC_CONSOLE_FEATURE_FLAGS = env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? ''; @@ -9,9 +12,19 @@ function setupFlag(name: string, _description: string) { return true; } - // TODO: Check team prefs + const userInstance = get(user); + const userPrefs = userInstance?.prefs ?? {}; + const userFlag = userPrefs[`flags-${name}`] ?? null; + if (userFlag) { + return true; + } - // TODO: Check user prefs + const organizationInstance = get(organization); + const organizationPrefs = organizationInstance?.prefs ?? {}; + const organizationFlag = organizationPrefs[`flags-${name}`] ?? null; + if (organizationFlag) { + return true; + } return false; } From a9bc1c9dcc1a2c4ba8677287f336685c055f3f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Fri, 6 Jun 2025 12:40:03 +0200 Subject: [PATCH 209/226] More reliable user fetching --- src/lib/flags.ts | 37 +++++++++---------- .../collection-[collection]/+page.svelte | 2 +- .../project-[region]-[project]/sites/+page.ts | 6 ++- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/lib/flags.ts b/src/lib/flags.ts index 5b50b5ba0..f28581c79 100644 --- a/src/lib/flags.ts +++ b/src/lib/flags.ts @@ -1,32 +1,31 @@ import { env } from '$env/dynamic/public'; -import { get } from 'svelte/store'; -import { user } from '$lib/stores/user'; -import { organization } from '$lib/stores/organization'; +import type { Organization } from './stores/organization'; +import type { Account } from './stores/user'; export const PUBLIC_CONSOLE_FEATURE_FLAGS = env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? ''; function setupFlag(name: string, _description: string) { // TODO: Use flags library that provides visual component during development - if (PUBLIC_CONSOLE_FEATURE_FLAGS.includes(name)) { - return true; - } + return (user: Account, organization: Organization) => { + if (PUBLIC_CONSOLE_FEATURE_FLAGS.includes(name)) { + return true; + } - const userInstance = get(user); - const userPrefs = userInstance?.prefs ?? {}; - const userFlag = userPrefs[`flags-${name}`] ?? null; - if (userFlag) { - return true; - } + const userPrefs = user?.prefs ?? {}; + const userFlag = userPrefs[`flags-${name}`] ?? null; + if (userFlag) { + return true; + } - const organizationInstance = get(organization); - const organizationPrefs = organizationInstance?.prefs ?? {}; - const organizationFlag = organizationPrefs[`flags-${name}`] ?? null; - if (organizationFlag) { - return true; - } + const organizationPrefs = organization?.prefs ?? {}; + const organizationFlag = organizationPrefs[`flags-${name}`] ?? null; + if (organizationFlag) { + return true; + } - return false; + return false; + }; } export const flags = { diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte index 8f21f8a7c..07c8d6ab9 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/collection-[collection]/+page.svelte @@ -100,7 +100,7 @@ analyticsSource="database_documents" /> - {#if flags.showCsvImport} + {#if flags.showCsvImport(data.account, data.organization)}
- + {logo.alt} From 96099f476bf8497dcae61a5dda6792bcd5d1ecbe Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 6 Jun 2025 17:39:27 +0530 Subject: [PATCH 213/226] fix: wrong variable access. --- src/lib/flags.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/flags.ts b/src/lib/flags.ts index 57b3f3952..54d5ba576 100644 --- a/src/lib/flags.ts +++ b/src/lib/flags.ts @@ -7,12 +7,12 @@ const flagsRaw = (env.PUBLIC_CONSOLE_FEATURE_FLAGS ?? '').split(','); function isFlagEnabled(name: string) { // loose generic to allow safe access while retaining type safety - return (data: T) => { - const { user, organization } = data; + return (data: T) => { + const { account, organization } = data; return !!( flagsRaw.includes(name) || - user?.prefs?.[`flags-${name}`] || + account?.prefs?.[`flags-${name}`] || organization?.prefs?.[`flags-${name}`] ); }; From 291dfdcad2a0d99085c2f34cdb44f132f2b0e8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Fri, 6 Jun 2025 14:57:53 +0200 Subject: [PATCH 214/226] Fix build cicd syntax --- .github/workflows/publish.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 998d91f7e..d1c879a6e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -39,6 +39,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} build-args: | "PUBLIC_CONSOLE_MODE=cloud" + "PUBLIC_CONSOLE_FEATURE_FLAGS=" "PUBLIC_APPWRITE_MULTI_REGION=true" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" "PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY }}" @@ -78,7 +79,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} build-args: | "PUBLIC_CONSOLE_MODE=cloud" - "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" + "PUBLIC_CONSOLE_FEATURE_FLAGS=sites,csv-import" "PUBLIC_APPWRITE_MULTI_REGION=true" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" "PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}" @@ -117,7 +118,7 @@ jobs: build-args: | "PUBLIC_CONSOLE_MODE=self-hosted" "PUBLIC_APPWRITE_MULTI_REGION=false" - "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" + "PUBLIC_CONSOLE_FEATURE_FLAGS=sites,csv-import" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" publish-cloud-no-regions: @@ -155,6 +156,6 @@ jobs: build-args: | "PUBLIC_CONSOLE_MODE=cloud" "PUBLIC_APPWRITE_MULTI_REGION=false" - "PUBLIC_CONSOLE_FEATURE_FLAGS="sites,csv-import" + "PUBLIC_CONSOLE_FEATURE_FLAGS=sites,csv-import" "PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}" "PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}" From 822b2feeeddfba42a0c238f724d36961c576855f Mon Sep 17 00:00:00 2001 From: Arman Date: Fri, 6 Jun 2025 16:25:47 +0200 Subject: [PATCH 215/226] fix: project creation error --- .../createProjectCloud.svelte | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/createProjectCloud.svelte b/src/routes/(console)/organization-[organization]/createProjectCloud.svelte index 16f5aa450..fa8dd9975 100644 --- a/src/routes/(console)/organization-[organization]/createProjectCloud.svelte +++ b/src/routes/(console)/organization-[organization]/createProjectCloud.svelte @@ -19,6 +19,7 @@ let id: string = null; let name: string = 'Appwrite project'; let region: string = Region.Fra; + let error: string = null; async function onFinish() { await invalidate(Dependencies.FUNCTIONS); @@ -45,11 +46,8 @@ await onFinish(); await goto(`${base}/project-${project.region}-${project.$id}`); } catch (e) { - addNotification({ - type: 'error', - message: e.message - }); trackError(e, Submit.ProjectCreate); + error = e.message; } } @@ -57,10 +55,11 @@ id = null; name = null; region = 'fra'; + error = null; }); - + From 7f678cf9d070f381ae96f96709bb584d81fd32db Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 7 Jun 2025 15:42:09 +0530 Subject: [PATCH 216/226] fix: unable to add domain if apex already exists! --- .../domains/add-domain/+page.svelte | 17 ++++++++++------- .../settings/domains/add-domain/+page.svelte | 18 +++++++++++------- .../domains/add-domain/+page.svelte | 16 ++++++++++------ 3 files changed, 31 insertions(+), 20 deletions(-) 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 3af8bb2e4..4390e1993 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 @@ -48,18 +48,21 @@ async function addDomain() { const apexDomain = getApexDomain(domainName); - let domain = data.domains?.domains.find((d) => d.domain === apexDomain); + let domain = data.domains?.domains.find((d: Models.Domain) => d.domain === apexDomain); if (apexDomain && !domain && isCloud) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); } catch (error) { - addNotification({ - type: 'error', - message: error.message - }); - - return; + // apex might already be added on organization level, skip. + const alreadyAdded = error?.type === 'domain_already_exists'; + if (!alreadyAdded) { + addNotification({ + type: 'error', + message: error.message + }); + 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 b9e50a3e8..ad574bf26 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 @@ -12,6 +12,7 @@ import { isCloud } from '$lib/system'; import { project } from '$routes/(console)/project-[region]-[project]/store'; import { getApexDomain } from '$lib/helpers/tlds'; + import type { Models } from '@appwrite.io/console'; const routeBase = `${base}/project-${page.params.region}-${page.params.project}/settings/domains`; @@ -29,18 +30,21 @@ async function addDomain() { const apexDomain = getApexDomain(domainName); - let domain = data.domains?.domains.find((d) => d.domain === apexDomain); + let domain = data.domains?.domains.find((d: Models.Domain) => d.domain === apexDomain); if (apexDomain && !domain && isCloud) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); } catch (error) { - addNotification({ - type: 'error', - message: error.message - }); - - return; + // apex might already be added on organization level, skip. + const alreadyAdded = error?.type === 'domain_already_exists'; + if (!alreadyAdded) { + addNotification({ + type: 'error', + message: error.message + }); + 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 ea8388747..fd7e21020 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 @@ -53,17 +53,21 @@ async function addDomain() { const apexDomain = getApexDomain(domainName); - let domain = data.domains?.domains.find((d) => d.domain === apexDomain); + let domain = data.domains?.domains.find((d: Models.Domain) => d.domain === apexDomain); if (apexDomain && !domain && isCloud) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); } catch (error) { - addNotification({ - type: 'error', - message: error.message - }); - return; + // apex might already be added on organization level, skip. + const alreadyAdded = error?.type === 'domain_already_exists'; + if (!alreadyAdded) { + addNotification({ + type: 'error', + message: error.message + }); + return; + } } } From 8f0c9027b3f4d15f6d5a084acc6196e7f700d138 Mon Sep 17 00:00:00 2001 From: ChiragAgg5k Date: Mon, 9 Jun 2025 10:38:52 +0530 Subject: [PATCH 217/226] fix: add optional chaining for organization ID --- .../(console)/organization-[organization]/header.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/header.svelte b/src/routes/(console)/organization-[organization]/header.svelte index 86fe4a0c9..c9185b305 100644 --- a/src/routes/(console)/organization-[organization]/header.svelte +++ b/src/routes/(console)/organization-[organization]/header.svelte @@ -18,7 +18,7 @@ } from '$lib/stores/roles'; import { GRACE_PERIOD_OVERRIDE, isCloud } from '$lib/system'; import { IconGithub, IconPlus } from '@appwrite.io/pink-icons-svelte'; - import { Icon, Tooltip, Typography, Layout, Badge } from '@appwrite.io/pink-svelte'; + import { Badge, Icon, Layout, Tooltip, Typography } from '@appwrite.io/pink-svelte'; let areMembersLimited: boolean; $: organization.subscribe(() => { @@ -75,7 +75,7 @@ ].filter((tab) => !tab.disabled); -{#if $organization.$id} +{#if $organization?.$id} From a51ff50bd86e8a2ab3826afbd48ac5ce24cc44a9 Mon Sep 17 00:00:00 2001 From: ChiragAgg5k Date: Mon, 9 Jun 2025 11:13:54 +0530 Subject: [PATCH 218/226] fix: update organization store usage to improve type safety --- .../organization-[organization]/header.svelte | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/header.svelte b/src/routes/(console)/organization-[organization]/header.svelte index c9185b305..126503c56 100644 --- a/src/routes/(console)/organization-[organization]/header.svelte +++ b/src/routes/(console)/organization-[organization]/header.svelte @@ -8,7 +8,7 @@ import { isTabSelected } from '$lib/helpers/load'; import { Cover } from '$lib/layout'; import { daysLeftInTrial, getServiceLimit, plansInfo, readOnly } from '$lib/stores/billing'; - import { members, newMemberModal, organization } from '$lib/stores/organization'; + import { members, newMemberModal, type Organization } from '$lib/stores/organization'; import { canSeeBilling, canSeeProjects, @@ -21,16 +21,18 @@ import { Badge, Icon, Layout, Tooltip, Typography } from '@appwrite.io/pink-svelte'; let areMembersLimited: boolean; - $: organization.subscribe(() => { + + $: { const limit = getServiceLimit('members') || Infinity; const isLimited = limit !== 0 && limit < Infinity; areMembersLimited = isCloud && (($readOnly && !GRACE_PERIOD_OVERRIDE) || (isLimited && $members?.total >= limit)); - }); + } + $: organization = page.data.organization as Organization; $: avatars = $members.memberships?.map((m) => m.userName || m.userEmail) ?? []; - $: organizationId = $organization?.$id ?? page.params.organization; + $: organizationId = organization?.$id ?? page.params.organization; $: path = `${base}/organization-${organizationId}`; $: tabs = [ { @@ -75,26 +77,26 @@ ].filter((tab) => !tab.disabled); -{#if $organization?.$id} +{#if organization?.$id} - {$organization.name} + {organization.name} - {#if isCloud && $organization?.billingPlan === BillingPlan.GITHUB_EDUCATION} + {#if isCloud && organization?.billingPlan === BillingPlan.GITHUB_EDUCATION} - {:else if isCloud && $organization?.billingPlan === BillingPlan.FREE} + {:else if isCloud && organization?.billingPlan === BillingPlan.FREE} {/if} - {#if isCloud && $organization?.billingTrialStartDate && $daysLeftInTrial > 0 && $organization.billingPlan !== BillingPlan.FREE && $plansInfo.get($organization.billingPlan)?.trialDays} + {#if isCloud && organization?.billingTrialStartDate && $daysLeftInTrial > 0 && organization.billingPlan !== BillingPlan.FREE && $plansInfo.get(organization.billingPlan)?.trialDays} {`Your trial ends on ${toLocaleDate( - $organization.billingStartDate + organization.billingStartDate )}. ${$daysLeftInTrial} days remaining.`} From ae1f4b0f744295f53a96ad7cd4dca49d1d90777f Mon Sep 17 00:00:00 2001 From: ChiragAgg5k Date: Mon, 9 Jun 2025 11:15:35 +0530 Subject: [PATCH 219/226] fix: simplify organization ID retrieval in header component --- src/routes/(console)/organization-[organization]/header.svelte | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/header.svelte b/src/routes/(console)/organization-[organization]/header.svelte index 126503c56..d4b2d16c9 100644 --- a/src/routes/(console)/organization-[organization]/header.svelte +++ b/src/routes/(console)/organization-[organization]/header.svelte @@ -32,8 +32,7 @@ $: organization = page.data.organization as Organization; $: avatars = $members.memberships?.map((m) => m.userName || m.userEmail) ?? []; - $: organizationId = organization?.$id ?? page.params.organization; - $: path = `${base}/organization-${organizationId}`; + $: path = `${base}/organization-${organization.$id}`; $: tabs = [ { href: path, From 4829547017c2326a0b2c7687d79a21692063f7ae Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 9 Jun 2025 16:27:11 +0530 Subject: [PATCH 220/226] fix: disable until accepted. --- src/routes/(public)/(guest)/register/+page.svelte | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/routes/(public)/(guest)/register/+page.svelte b/src/routes/(public)/(guest)/register/+page.svelte index 494918d8c..e166d5ffd 100644 --- a/src/routes/(public)/(guest)/register/+page.svelte +++ b/src/routes/(public)/(guest)/register/+page.svelte @@ -107,7 +107,7 @@ helper="Password must be at least 8 characters long" required bind:value={pass} /> - + By registering, you agree that you have read, understand, and acknowledge our General Terms of Use. - + + + {#if isCloud} or - From bbd235b7911fdd0e7cb420b0f63abeae51569f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Jun 2025 13:06:38 +0200 Subject: [PATCH 221/226] Fix network subdomains --- .../sites/site-[site]/domains/add-domain/+page.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 ea8388747..3d8e175b6 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 @@ -22,7 +22,7 @@ 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 { project, regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store'; import { isCloud } from '$lib/system'; import { getApexDomain } from '$lib/helpers/tlds'; @@ -55,7 +55,9 @@ const apexDomain = getApexDomain(domainName); let domain = data.domains?.domains.find((d) => d.domain === apexDomain); - if (apexDomain && !domain && isCloud) { + const isSiteDomain = domain.endsWith($regionalConsoleVariables._APP_DOMAIN_SITES); + + if (apexDomain && !domain && isCloud && !isSiteDomain) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); } catch (error) { From c789904bcbed2d5c0e630d5ad0daea922a6f2d77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Jun 2025 13:18:15 +0200 Subject: [PATCH 222/226] QA fixes --- .../sites/site-[site]/domains/add-domain/+page.svelte | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 3d8e175b6..320455a87 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 @@ -22,7 +22,10 @@ import { writable } from 'svelte/store'; import { onMount } from 'svelte'; import { ConnectRepoModal } from '$lib/components/git/index.js'; - import { project, regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store'; + import { + project, + regionalConsoleVariables + } from '$routes/(console)/project-[region]-[project]/store'; import { isCloud } from '$lib/system'; import { getApexDomain } from '$lib/helpers/tlds'; @@ -55,8 +58,8 @@ const apexDomain = getApexDomain(domainName); let domain = data.domains?.domains.find((d) => d.domain === apexDomain); - const isSiteDomain = domain.endsWith($regionalConsoleVariables._APP_DOMAIN_SITES); - + const isSiteDomain = domainName.endsWith($regionalConsoleVariables._APP_DOMAIN_SITES); + if (apexDomain && !domain && isCloud && !isSiteDomain) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); From 4dc904d115dd836b6d1264f8cccc1160ef2e3eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Jun 2025 13:33:30 +0200 Subject: [PATCH 223/226] Update src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte --- .../sites/site-[site]/domains/add-domain/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 320455a87..84c7ebacc 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 @@ -60,7 +60,7 @@ const isSiteDomain = domainName.endsWith($regionalConsoleVariables._APP_DOMAIN_SITES); - if (apexDomain && !domain && isCloud && !isSiteDomain) { + if (isCloud && apexDomain && !domain && !isSiteDomain) { try { domain = await sdk.forConsole.domains.create($project.teamId, apexDomain); } catch (error) { From e0745b920bab164ff9f5b51f3572fe7e7f6878da Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 9 Jun 2025 18:13:00 +0530 Subject: [PATCH 224/226] fix: domains showing on unrelated resources. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- .../domains/add-domain/+page.svelte | 12 +++++++++--- .../site-[site]/domains/add-domain/+page.svelte | 11 +++++++++-- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 1408c487e..0fe8f5a25 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19", + "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "^2.0.0-RC.1", "@appwrite.io/pink-legacy": "^1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d45decef9..cac4e0adc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.25.3)(zod@3.24.3) '@appwrite.io/console': - specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 - version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19 + specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564 + version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564 '@appwrite.io/pink-icons': specifier: 0.25.0 version: 0.25.0 @@ -257,8 +257,8 @@ packages: '@analytics/type-utils@0.6.2': resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==} - '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19': - resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19} + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564': + resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564} version: 1.8.0 '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': @@ -3635,7 +3635,7 @@ snapshots: '@analytics/type-utils@0.6.2': {} - '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@e190a19': {} + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@a5e5564': {} '@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)': dependencies: 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 4390e1993..d2ded628f 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 @@ -5,13 +5,13 @@ import { Wizard } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { Fieldset, Layout, Tooltip, Icon, Input, Alert } from '@appwrite.io/pink-svelte'; + import { Fieldset, Icon, Tooltip } from '@appwrite.io/pink-svelte'; import { goto, invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sortBranches } from '$lib/stores/vcs'; import { IconInfo } from '@appwrite.io/pink-icons-svelte'; import { LabelCard } from '$lib/components'; - import { Runtime, StatusCode, type Models } from '@appwrite.io/console'; + import { type Models, ProxyResourceType, Runtime, StatusCode } from '@appwrite.io/console'; import { statusCodeOptions } from '$lib/stores/domains'; import { writable } from 'svelte/store'; import { onMount } from 'svelte'; @@ -75,7 +75,13 @@ } else if (behaviour === 'REDIRECT') { rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, redirect, statusCode); + .proxy.createRedirectRule( + domainName, + redirect, + statusCode, + page.params.function, + ProxyResourceType.Function + ); } 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.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/+page.svelte index 5ee280984..6152f2718 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 @@ -5,7 +5,7 @@ import { Wizard } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { Fieldset, Layout, Tooltip, Icon, Input, Alert } from '@appwrite.io/pink-svelte'; + import { Fieldset, Icon, Tooltip } from '@appwrite.io/pink-svelte'; import { goto, invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sortBranches } from '$lib/stores/vcs'; @@ -16,6 +16,7 @@ BuildRuntime, Framework, type Models, + ProxyResourceType, StatusCode } from '@appwrite.io/console'; import { statusCodeOptions } from '$lib/stores/domains'; @@ -85,7 +86,13 @@ } else if (behaviour === 'REDIRECT') { rule = await sdk .forProject(page.params.region, page.params.project) - .proxy.createRedirectRule(domainName, redirect, statusCode); + .proxy.createRedirectRule( + domainName, + redirect, + statusCode, + page.params.site, + ProxyResourceType.Site + ); } else if (behaviour === 'ACTIVE') { rule = await sdk .forProject(page.params.region, page.params.project) From ca526b6cf842317a4538db0eb26561dfc11a7969 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 9 Jun 2025 18:17:18 +0530 Subject: [PATCH 225/226] fix: the dumb IDE removed the imports! --- .../function-[function]/domains/add-domain/+page.svelte | 2 +- .../sites/site-[site]/domains/add-domain/+page.svelte | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 d2ded628f..66faf1e8d 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 @@ -5,7 +5,7 @@ import { Wizard } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { Fieldset, Icon, Tooltip } from '@appwrite.io/pink-svelte'; + import { Fieldset, Layout, Tooltip, Icon, Input, Alert } from '@appwrite.io/pink-svelte'; import { goto, invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sortBranches } from '$lib/stores/vcs'; 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 6152f2718..af66889d3 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 @@ -5,7 +5,7 @@ import { Wizard } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { Fieldset, Icon, Tooltip } from '@appwrite.io/pink-svelte'; + import { Fieldset, Layout, Tooltip, Icon, Input, Alert } from '@appwrite.io/pink-svelte'; import { goto, invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { sortBranches } from '$lib/stores/vcs'; From 4bb3d282f0f1b947a0fdb060bb7be9d0f419eb2a Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 9 Jun 2025 18:31:44 +0530 Subject: [PATCH 226/226] fix: queries. --- .../sites/site-[site]/domains/+page.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts index ebe497444..a00f0c4b8 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.ts @@ -26,18 +26,10 @@ export const load = async ({ params, depends, url, route }) => { .forProject(params.region, params.project) .proxy.listRules( [ - Query.or([ - Query.and([ - Query.equal('type', RuleType.REDIRECT), - Query.equal('trigger', RuleTrigger.MANUAL) - ]), - Query.and([ - Query.equal('type', RuleType.DEPLOYMENT), - Query.equal('trigger', RuleTrigger.MANUAL), - Query.equal('deploymentResourceType', DeploymentResourceType.SITE), - Query.equal('deploymentResourceId', params.site) - ]) - ]), + Query.equal('type', [RuleType.DEPLOYMENT, RuleType.REDIRECT]), + Query.equal('deploymentResourceType', DeploymentResourceType.SITE), + Query.equal('deploymentResourceId', params.site), + Query.equal('trigger', RuleTrigger.MANUAL), Query.limit(limit), Query.offset(offset), Query.orderDesc(''),