diff --git a/package.json b/package.json
index f39a885a1..e9c68e6fc 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,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.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c",
+ "@appwrite.io/pink-svelte": "https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7",
"@popperjs/core": "^2.11.8",
"@sentry/sveltekit": "^8.38.0",
"@stripe/stripe-js": "^3.5.0",
@@ -79,6 +79,7 @@
"svelte-check": "^4.1.5",
"svelte-preprocess": "^6.0.3",
"svelte-sequential-preprocessor": "^2.0.2",
+ "tldts": "^7.0.7",
"tslib": "^2.8.1",
"typescript": "^5.8.2",
"typescript-eslint": "^8.30.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 220db5e4e..0fbc84b2c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,13 +22,13 @@ importers:
version: 0.25.0
'@appwrite.io/pink-icons-svelte':
specifier: ^2.0.0-RC.1
- version: 2.0.0-RC.1(svelte@5.25.3)
+ version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-icons-svelte@12707b9(svelte@5.25.3)
'@appwrite.io/pink-legacy':
specifier: ^1.0.3
version: 1.0.3
'@appwrite.io/pink-svelte':
- specifier: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c
- version: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c(svelte@5.25.3)
+ specifier: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7
+ version: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3)
'@popperjs/core':
specifier: ^2.11.8
version: 2.11.8
@@ -177,6 +177,9 @@ importers:
svelte-sequential-preprocessor:
specifier: ^2.0.2
version: 2.0.2
+ tldts:
+ specifier: ^7.0.7
+ version: 7.0.7
tslib:
specifier: ^2.8.1
version: 2.8.1
@@ -262,8 +265,8 @@ packages:
peerDependencies:
svelte: ^4.0.0
- '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@67c988c04de3464a9c39630fd798e2316d157fea':
- resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@67c988c04de3464a9c39630fd798e2316d157fea}
+ '@appwrite.io/pink-icons-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-icons-svelte@12707b9':
+ resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-icons-svelte@12707b9}
version: 2.0.0-RC.1
peerDependencies:
svelte: ^4.0.0
@@ -277,8 +280,8 @@ packages:
'@appwrite.io/pink-legacy@1.0.3':
resolution: {integrity: sha512-GGde5fmPhs+s6/3aFeMPc/kKADG/gTFkYQSy6oBN8pK0y0XNCLrZZgBv+EBbdhwdtqVEWXa0X85Mv9w7jcIlwQ==}
- '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c':
- resolution: {tarball: https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c}
+ '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7':
+ resolution: {tarball: https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7}
version: 2.0.0-RC.2
peerDependencies:
svelte: ^4.0.0
@@ -1339,8 +1342,8 @@ packages:
'@types/prop-types@15.7.14':
resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
- '@types/react@18.3.20':
- resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==}
+ '@types/react@18.3.22':
+ resolution: {integrity: sha512-vUhG0YmQZ7kL/tmKLrD3g5zXbXXreZXB3pmROW8bg3CnLnpjkRVwUlLne7Ufa2r9yJ8+/6B73RzhAek5TBKh2Q==}
'@types/remarkable@2.0.8':
resolution: {integrity: sha512-eKXqPZfpQl1kOADjdKchHrp2gwn9qMnGXhH/AtZe0UrklzhGJkawJo/Y/D0AlWcdWoWamFNIum8+/nkAISQVGg==}
@@ -2851,8 +2854,8 @@ packages:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
- property-information@7.0.0:
- resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -3238,10 +3241,17 @@ packages:
tldts-core@6.1.85:
resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==}
+ tldts-core@7.0.7:
+ resolution: {integrity: sha512-ECqb8imSroX1UmUuhRBNPkkmtZ8mHEenieim80UVxG0M5wXVjY2Fp2tYXCPvk+nLy1geOhFpeD5YQhM/gF63Jg==}
+
tldts@6.1.85:
resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==}
hasBin: true
+ tldts@7.0.7:
+ resolution: {integrity: sha512-ETNXj36ql5BXDa4VVJk3wgqansg8TI1Yqo217twSAPjyDnh/b2T+XzrI0ftn6EnzVPbXpMTZHOWj5s3a8/uGPA==}
+ hasBin: true
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -3620,7 +3630,7 @@ snapshots:
dependencies:
svelte: 5.25.3
- '@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@67c988c04de3464a9c39630fd798e2316d157fea(svelte@5.25.3)':
+ '@appwrite.io/pink-icons-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-icons-svelte@12707b9(svelte@5.25.3)':
dependencies:
svelte: 5.25.3
@@ -3633,9 +3643,9 @@ snapshots:
'@appwrite.io/pink-icons': 1.0.0
the-new-css-reset: 1.11.3
- '@appwrite.io/pink-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-svelte@67c988c(svelte@5.25.3)':
+ '@appwrite.io/pink-svelte@https://try-module.cloud/module/@appwrite/%40appwrite.io%2Fpink-svelte@510c1a7(svelte@5.25.3)':
dependencies:
- '@appwrite.io/pink-icons-svelte': https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@67c988c04de3464a9c39630fd798e2316d157fea(svelte@5.25.3)
+ '@appwrite.io/pink-icons-svelte': 2.0.0-RC.1(svelte@5.25.3)
'@floating-ui/dom': 1.6.13
'@melt-ui/pp': 0.3.2(@melt-ui/svelte@0.86.6(svelte@5.25.3))(svelte@5.25.3)
'@melt-ui/svelte': 0.86.6(svelte@5.25.3)
@@ -4776,7 +4786,7 @@ snapshots:
'@types/prop-types@15.7.14': {}
- '@types/react@18.3.20':
+ '@types/react@18.3.22':
dependencies:
'@types/prop-types': 15.7.14
csstype: 3.1.3
@@ -5878,7 +5888,7 @@ snapshots:
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
mdast-util-to-hast: 13.2.0
- property-information: 7.0.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
zwitch: 2.0.4
@@ -6411,7 +6421,7 @@ snapshots:
progress@2.0.3: {}
- property-information@7.0.0: {}
+ property-information@7.1.0: {}
proxy-from-env@1.1.0: {}
@@ -6724,7 +6734,7 @@ snapshots:
svelte-motion@0.12.2(svelte@5.25.3):
dependencies:
- '@types/react': 18.3.20
+ '@types/react': 18.3.22
framesync: 6.1.2
popmotion: 11.0.5
style-value-types: 5.1.2
@@ -6833,10 +6843,16 @@ snapshots:
tldts-core@6.1.85: {}
+ tldts-core@7.0.7: {}
+
tldts@6.1.85:
dependencies:
tldts-core: 6.1.85
+ tldts@7.0.7:
+ dependencies:
+ tldts-core: 7.0.7
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
diff --git a/src/lib/components/domains/nameserverTable.svelte b/src/lib/components/domains/nameserverTable.svelte
index da5375bce..f9cbcecfc 100644
--- a/src/lib/components/domains/nameserverTable.svelte
+++ b/src/lib/components/domains/nameserverTable.svelte
@@ -17,7 +17,7 @@
{domain}
{#if verified}
-
+
{:else if verified === false}
{/if}
diff --git a/src/lib/components/domains/recordTable.svelte b/src/lib/components/domains/recordTable.svelte
index 6dc6e6724..f099fa003 100644
--- a/src/lib/components/domains/recordTable.svelte
+++ b/src/lib/components/domains/recordTable.svelte
@@ -38,9 +38,9 @@
{domain}
{#if verified}
-
+
{:else if verified === false}
-
+
{:else}
{
try {
@@ -121,8 +132,8 @@
- Missing headers? Check the docs to
- see the supported data and how to log it.
+ Missing headers? Check the docs to see
+ the supported data and how to log it.
{:else}
diff --git a/src/lib/components/logs/logsResponse.svelte b/src/lib/components/logs/logsResponse.svelte
index 227efc636..a1361af54 100644
--- a/src/lib/components/logs/logsResponse.svelte
+++ b/src/lib/components/logs/logsResponse.svelte
@@ -28,11 +28,10 @@
let responseTab: 'logs' | 'errors' | 'headers' | 'body' = $state('logs');
- let href = $derived(
+ const href =
product === 'site'
? 'https://appwrite.io/docs/products/sites/logs#log-details'
- : 'https://appwrite.io/docs/products/functions/develop#logging'
- );
+ : 'https://appwrite.io/docs/products/functions/develop#logging';
onMount(() => {
if (selectedLog?.errors) {
diff --git a/src/lib/elements/forms/inputCron.svelte b/src/lib/elements/forms/inputCron.svelte
index 7e2a2ef53..7f31312f4 100644
--- a/src/lib/elements/forms/inputCron.svelte
+++ b/src/lib/elements/forms/inputCron.svelte
@@ -49,7 +49,7 @@
{pattern}
on:input
on:invalid={handleInvalid}
- type="email"
+ type="text"
helper={error}
state={error ? 'error' : 'default'}
autofocus={autofocus || undefined}
diff --git a/src/lib/helpers/tlds.ts b/src/lib/helpers/tlds.ts
new file mode 100644
index 000000000..23adffb4c
--- /dev/null
+++ b/src/lib/helpers/tlds.ts
@@ -0,0 +1,21 @@
+import { parse } from 'tldts';
+
+/**
+ * Returns the apex/root domain from a full domain string.
+ */
+export function getApexDomain(domain: string): string | null {
+ return parse(domain).domain;
+}
+
+/**
+ * Checks whether the given domain is a subdomain.
+ */
+export function isASubdomain(domain: string | null): boolean {
+ if (!domain) return false;
+
+ const { domain: apex, subdomain } = parse(domain);
+ if (!apex) return false;
+ if (subdomain === 'www') return false;
+
+ return !!subdomain;
+}
diff --git a/src/lib/sdk/billing.ts b/src/lib/sdk/billing.ts
index bf34a3611..48fb62882 100644
--- a/src/lib/sdk/billing.ts
+++ b/src/lib/sdk/billing.ts
@@ -339,6 +339,8 @@ export type Plan = {
emailBranding: boolean;
supportsCredits: boolean;
databasesAllowEncrypt: boolean;
+ buildSize: number; // in MB
+ deploymentSize: number; // in MB
};
export type PlanList = {
diff --git a/src/lib/stores/domains.ts b/src/lib/stores/domains.ts
index ea339f83d..348e10c9b 100644
--- a/src/lib/stores/domains.ts
+++ b/src/lib/stores/domains.ts
@@ -1,23 +1,21 @@
+import { StatusCode } from '@appwrite.io/console';
+
export const statusCodeOptions = [
{
label: '301 Moved permanently',
- value: 301
+ value: StatusCode.MovedPermanently301
},
{
label: '302 Found',
- value: 302
- },
- {
- label: '303 See other',
- value: 303
+ value: StatusCode.Found302
},
{
label: '307 Temporary redirect',
- value: 307
+ value: StatusCode.TemporaryRedirect307
},
{
label: '308 Permanent redirect',
- value: 308
+ value: StatusCode.PermanentRedirect308
}
];
diff --git a/src/routes/(console)/organization-[organization]/domains/deleteDomainModal.svelte b/src/routes/(console)/organization-[organization]/domains/deleteDomainModal.svelte
index cdbb00b8c..b30ec8bf1 100644
--- a/src/routes/(console)/organization-[organization]/domains/deleteDomainModal.svelte
+++ b/src/routes/(console)/organization-[organization]/domains/deleteDomainModal.svelte
@@ -1,27 +1,31 @@
@@ -179,13 +187,13 @@
- {
branch = event.detail.value;
}}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte
index d77741486..5c8056398 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(modals)/createManual.svelte
@@ -11,12 +11,22 @@
import { Icon, Layout, Tooltip, Typography, Upload } from '@appwrite.io/pink-svelte';
import { func } from '../store';
import { page } from '$app/state';
+ import { consoleVariables } from '$routes/(console)/store';
+ import { currentPlan } from '$lib/stores/organization';
+ import { isCloud } from '$lib/system';
export let show = false;
let files: FileList;
let error: string = '';
+ $: maxSize =
+ isCloud && $currentPlan
+ ? $currentPlan?.deploymentSize === 0
+ ? 0
+ : $currentPlan?.deploymentSize * 1000000
+ : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB
+
async function create() {
try {
await sdk
@@ -69,7 +79,7 @@
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte
index e1ab5a837..3e30d3a86 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.svelte
@@ -18,7 +18,7 @@
let showDelete = $state(false);
let showRetry = $state(false);
- let selectedDomain: Models.ProxyRule = null;
+ let selectedProxyRule: Models.ProxyRule = null;
@@ -35,14 +35,14 @@
Add domain
- {#if data.domains.total}
-
+ {#if data.proxyRules.total}
+
+ total={data.proxyRules.total} />
{:else if data?.search}
@@ -83,9 +83,9 @@
{#if showDelete}
-
+
{/if}
{#if showRetry}
-
+
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts
index 8e96e426a..50397306c 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/+page.ts
@@ -26,7 +26,7 @@ export const load: PageLoad = async ({ depends, params, url, route }) => {
limit,
query,
search,
- domains: await sdk
+ proxyRules: await sdk
.forProject(params.region, params.project)
.proxy.listRules(
[
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 dd26bd21f..e7a55a956 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
@@ -20,6 +20,7 @@
import { isValueOfStringEnum } from '$lib/helpers/types.js';
import { isCloud } from '$lib/system';
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`;
@@ -47,14 +48,12 @@
});
async function addDomain() {
- let domain = data.domains?.domains.find((d) => d.domain === domainName);
+ const apexDomain = getApexDomain(domainName);
+ let domain = data.domains?.domains.find((d) => d.domain === apexDomain);
- if (!domain && isCloud) {
+ if (apexDomain && !domain && isCloud) {
try {
- domain = await sdk.forConsole.domains.create(
- $project.teamId,
- domainName.toLocaleLowerCase()
- );
+ domain = await sdk.forConsole.domains.create($project.teamId, apexDomain);
} catch (error) {
addNotification({
type: 'error',
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
index f8b03eb86..0ca8e0f52 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.svelte
@@ -20,6 +20,7 @@
import Wizard from '$lib/layout/wizard.svelte';
import { base } from '$app/paths';
import { writable } from 'svelte/store';
+ import { isASubdomain } from '$lib/helpers/tlds';
import { consoleVariables } from '$routes/(console)/store';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -27,7 +28,7 @@
let { data } = $props();
const ruleId = page.url.searchParams.get('rule');
- let isSubDomain = $derived(page.params.domain?.split('.')?.length >= 3);
+ const isSubDomain = $derived.by(() => isASubdomain(page.params.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {
@@ -126,7 +127,7 @@
Nameservers
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -134,7 +135,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
index 5fbb56d85..a5f6b1910 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/add-domain/verify-[domain]/+page.ts
@@ -1,23 +1,17 @@
import { sdk } from '$lib/stores/sdk';
-import { Dependencies } from '$lib/constants.js';
import { isCloud } from '$lib/system';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import { Dependencies } from '$lib/constants.js';
+import type { DomainsList } from '$lib/sdk/domains.js';
-export const load = async ({ depends, params }) => {
+export const load = async ({ depends }) => {
depends(Dependencies.DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte
index 1882bc282..c5ce1db80 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/deleteDomainModal.svelte
@@ -11,15 +11,16 @@
import { page } from '$app/state';
export let show = false;
- export let selectedDomain: Models.ProxyRule;
- let confirm = false;
+ export let selectedProxyRule: Models.ProxyRule;
+
let error = '';
+ let confirm = false;
async function deleteDomain() {
try {
await sdk
.forProject(page.params.region, page.params.project)
- .proxy.deleteRule(selectedDomain.$id);
+ .proxy.deleteRule(selectedProxyRule.$id);
await invalidate(Dependencies.FUNCTION_DOMAINS);
show = false;
addNotification({
@@ -35,13 +36,13 @@
- {#if selectedDomain}
+ {#if selectedProxyRule}
Are you sure you want to delete this domain? You will no longer be able to execute your
function by visiting:
- {selectedDomain.domain}
+ {selectedProxyRule.domain}
{/if}
import { Link } from '$lib/elements';
- import type { Domain } from '$lib/sdk/domains';
import { IconInfo } from '@appwrite.io/pink-icons-svelte';
import {
Badge,
@@ -14,7 +13,7 @@
import type { Models } from '@appwrite.io/console';
import { consoleVariables } from '$routes/(console)/store';
- export let domain: Domain | Models.ProxyRule;
+ export let proxyRule: Models.ProxyRule;
CNAME
- {domain?.domain}
+ {proxyRule?.domain}
-
- {#if selectedDomain}
-
+
+ {#if selectedProxyRule}
+
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte
index 65813ed6a..1c9df426f 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/table.svelte
@@ -19,14 +19,22 @@
import { columns } from './store';
let {
- domains
+ proxyRules
}: {
- domains: Models.ProxyRuleList;
+ proxyRules: Models.ProxyRuleList;
} = $props();
let showDelete = $state(false);
let showRetry = $state(false);
- let selectedDomain: Models.ProxyRule = $state(null);
+ let selectedProxyRule: Models.ProxyRule = $state(null);
+
+ const proxyTarget = (proxy: Models.ProxyRule) => {
+ return proxy?.redirectUrl
+ ? 'Redirect to ' + proxy.redirectUrl
+ : proxy?.deploymentVcsProviderBranch
+ ? 'Deployed from' + proxy.deploymentVcsProviderBranch
+ : 'Active deployment';
+ };
@@ -38,24 +46,24 @@
{/each}
- {#each domains.rules as domain}
+ {#each proxyRules.rules as proxyRule}
{#each $columns as column}
{#if column.id === 'domain'}
-
+
- {domain.domain}
+ {proxyRule.domain}
- {#if domain.status === 'verifying'}
+ {#if proxyRule.status === 'verifying'}
- {:else if domain.status !== 'verified'}
+ {:else if proxyRule.status !== 'verified'}
{:else if column.id === 'target'}
- {domain?.redirectUrl
- ? 'Redirect to ' + domain.redirectUrl
- : domain?.deploymentVcsProviderBranch
- ? 'Deployed from' + domain.deploymentVcsProviderBranch
- : '-'}
+ {proxyTarget(proxyRule)}
{/if}
{/each}
@@ -87,11 +91,11 @@
- {#if domain.status !== 'verified'}
+ {#if proxyRule.status !== 'verified'}
{
- selectedDomain = domain;
+ selectedProxyRule = proxyRule;
showRetry = true;
toggle(e);
}}>
@@ -102,7 +106,7 @@
status="danger"
leadingIcon={IconTrash}
on:click={(e) => {
- selectedDomain = domain;
+ selectedProxyRule = proxyRule;
showDelete = true;
toggle(e);
trackEvent(Click.DomainDeleteClick, {
@@ -121,9 +125,9 @@
{#if showDelete}
-
+
{/if}
{#if showRetry}
-
+
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
index fd6e2bee1..e31caff20 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
@@ -167,7 +167,7 @@
-
+
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 09ff91999..781c68bb2 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
@@ -11,6 +11,7 @@
import { onMount } from 'svelte';
import { isCloud } from '$lib/system';
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}/settings/domains`;
@@ -27,14 +28,12 @@
});
async function addDomain() {
- let domain = data.domains?.domains.find((d) => d.domain === domainName);
+ const apexDomain = getApexDomain(domainName);
+ let domain = data.domains?.domains.find((d) => d.domain === apexDomain);
- if (!domain && isCloud) {
+ if (apexDomain && !domain && isCloud) {
try {
- domain = await sdk.forConsole.domains.create(
- $project.teamId,
- domainName.toLocaleLowerCase()
- );
+ domain = await sdk.forConsole.domains.create($project.teamId, apexDomain);
} catch (error) {
addNotification({
type: 'error',
@@ -48,7 +47,7 @@
try {
const rule = await sdk
.forProject(page.params.region, page.params.project)
- .proxy.createAPIRule(domainName);
+ .proxy.createAPIRule(domainName.toLocaleLowerCase());
if (rule?.status === 'verified') {
await goto(routeBase);
await invalidate(Dependencies.DOMAINS);
diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
index ac027c30b..dc9946534 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.svelte
@@ -20,6 +20,7 @@
import Wizard from '$lib/layout/wizard.svelte';
import { base } from '$app/paths';
import { writable } from 'svelte/store';
+ import { isASubdomain } from '$lib/helpers/tlds';
import { consoleVariables } from '$routes/(console)/store';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
@@ -27,7 +28,7 @@
let { data } = $props();
const ruleId = page.url.searchParams.get('rule');
- let isSubDomain = $derived(page.params.domain?.split('.')?.length >= 3);
+ const isSubDomain = $derived.by(() => isASubdomain(page.params.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {
@@ -125,7 +126,7 @@
Nameservers
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -133,7 +134,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
index 5fbb56d85..a5f6b1910 100644
--- a/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/settings/domains/add-domain/verify-[domain]/+page.ts
@@ -1,23 +1,17 @@
import { sdk } from '$lib/stores/sdk';
-import { Dependencies } from '$lib/constants.js';
import { isCloud } from '$lib/system';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import { Dependencies } from '$lib/constants.js';
+import type { DomainsList } from '$lib/sdk/domains.js';
-export const load = async ({ depends, params }) => {
+export const load = async ({ depends }) => {
depends(Dependencies.DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
index 836628f5c..98984359a 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
@@ -5,7 +5,7 @@
import { Repositories } from '$lib/components/git';
import { Dependencies } from '$lib/constants';
import { Link } from '$lib/elements';
- import { Button, InputCheckbox, InputSelect } from '$lib/elements/forms';
+ import { Button, InputCheckbox } from '$lib/elements/forms';
import { timeFromNow } from '$lib/helpers/date';
import { addNotification } from '$lib/stores/notifications';
import { sdk } from '$lib/stores/sdk';
@@ -18,7 +18,7 @@
type Models
} from '@appwrite.io/console';
import { IconGithub } from '@appwrite.io/pink-icons-svelte';
- import { Icon, Layout, Skeleton, Typography } from '@appwrite.io/pink-svelte';
+ import { Icon, Input, Layout, Skeleton, Typography } from '@appwrite.io/pink-svelte';
export let show = false;
export let site: Models.Site;
@@ -125,6 +125,14 @@
error = e.message;
}
}
+
+ $: if (!show) {
+ error = '';
+ branch = null;
+ commit = null;
+ activate = true;
+ hasRepository = !!site?.providerRepositoryId;
+ }
@@ -184,13 +192,13 @@
- {
branch = event.detail.value;
}}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte
index cf45a69a6..cd4c9f434 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/createManualDeploymentModal.svelte
@@ -9,6 +9,9 @@
import type { Models } from '@appwrite.io/console';
import { IconInfo } from '@appwrite.io/pink-icons-svelte';
import { Icon, Layout, Tooltip, Typography, Upload } from '@appwrite.io/pink-svelte';
+ import { isCloud } from '$lib/system';
+ import { currentPlan } from '$lib/stores/organization';
+ import { consoleVariables } from '$routes/(console)/store';
export let show = false;
export let site: Models.Site;
@@ -16,6 +19,13 @@
let files: FileList;
let error: string = '';
+ $: maxSize =
+ isCloud && $currentPlan
+ ? $currentPlan?.deploymentSize === 0
+ ? 0
+ : $currentPlan?.deploymentSize * 1000000
+ : $consoleVariables._APP_COMPUTE_SIZE_LIMIT; // already in MB
+
async function createDeployment() {
try {
uploader.uploadSiteDeployment(site.$id, files[0]);
@@ -63,7 +73,7 @@
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deploymentsOverview.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deploymentsOverview.svelte
index 68f9fc9d9..96a5091eb 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deploymentsOverview.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deploymentsOverview.svelte
@@ -43,12 +43,16 @@
{#if deploymentList?.total}
+ {@const hasAuthor = deploymentList.deployments.some((d) => d?.providerCommitAuthor)}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte
index 23537ff99..8e4d4c3e7 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/+page.svelte
@@ -29,14 +29,14 @@
- {#if data.domains.total}
-
+ {#if data.proxyRules.total}
+
+ total={data.proxyRules.total} />
{:else if data?.search}
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_A && $consoleVariables._APP_DOMAIN_TARGET_A !== '127.0.0.1'}
(selectedTab = 'a')}
@@ -135,7 +137,7 @@
A
{/if}
- {#if !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
+ {#if !isCloud && !!$consoleVariables._APP_DOMAIN_TARGET_AAAA && $consoleVariables._APP_DOMAIN_TARGET_AAAA !== '::1'}
(selectedTab = 'aaaa')}
@@ -150,10 +152,10 @@
{:else}
+ domain={page.params.domain} />
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
index 9a5223cb8..cea7e4b71 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.ts
@@ -1,26 +1,20 @@
import { sdk } from '$lib/stores/sdk';
import { isCloud } from '$lib/system';
import { Dependencies } from '$lib/constants.js';
-import type { Domain, DomainsList } from '$lib/sdk/domains.js';
+import type { DomainsList } from '$lib/sdk/domains';
-export const load = async ({ parent, depends, params }) => {
+export const load = async ({ parent, depends }) => {
const { site } = await parent();
depends(Dependencies.SITES_DOMAINS);
- let domain: Domain;
let domainsList: DomainsList;
if (isCloud) {
domainsList = await sdk.forConsole.domains.list();
- const domainId = domainsList.domains.find(
- (domain: Domain) => domain.domain === params.domain
- ).$id;
- domain = await sdk.forConsole.domains.get(domainId);
}
return {
site,
- domain,
domainsList
};
};
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/deleteDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/deleteDomainModal.svelte
index 4e6dba7c6..dcb2fdeac 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/deleteDomainModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/deleteDomainModal.svelte
@@ -11,10 +11,10 @@
let {
show = $bindable(),
- selectedDomain
+ selectedProxyRule
}: {
show: boolean;
- selectedDomain: Models.ProxyRule;
+ selectedProxyRule: Models.ProxyRule;
} = $props();
let error: string = $state(null);
@@ -23,7 +23,7 @@
try {
await sdk
.forProject(page.params.region, page.params.project)
- .proxy.deleteRule(selectedDomain.$id);
+ .proxy.deleteRule(selectedProxyRule.$id);
await invalidate(Dependencies.SITES_DOMAINS);
show = false;
addNotification({
@@ -39,13 +39,13 @@
- {#if selectedDomain}
+ {#if selectedProxyRule}
Are you sure you want to delete this domain? You will no longer be able to view your
site by visiting:
- {selectedDomain.domain}
+ {selectedProxyRule.domain}
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
index f18c1b664..9c0191b22 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/retryDomainModal.svelte
@@ -11,20 +11,19 @@
import { consoleVariables } from '$routes/(console)/store';
import { isCloud } from '$lib/system';
import { page } from '$app/state';
+ import { isASubdomain } from '$lib/helpers/tlds';
import NameserverTable from '$lib/components/domains/nameserverTable.svelte';
import RecordTable from '$lib/components/domains/recordTable.svelte';
let {
show = $bindable(false),
- selectedDomain
+ selectedProxyRule
}: {
show: boolean;
- selectedDomain: Models.ProxyRule;
+ selectedProxyRule: Models.ProxyRule;
} = $props();
- let isSubDomain = $derived.by(() =>
- selectedDomain?.domain?.length ? selectedDomain?.domain?.split('.')?.length >= 3 : false
- );
+ const isSubDomain = $derived.by(() => isASubdomain(selectedProxyRule?.domain));
let selectedTab = $state<'cname' | 'nameserver' | 'a' | 'aaaa'>('nameserver');
$effect(() => {
@@ -44,13 +43,13 @@
try {
const domain = await sdk
.forProject(page.params.region, page.params.project)
- .proxy.updateRuleVerification(selectedDomain.$id);
+ .proxy.updateRuleVerification(selectedProxyRule.$id);
await invalidate(Dependencies.SITES_DOMAINS);
verified = domain.status === 'verified';
show = false;
addNotification({
type: 'success',
- message: `${selectedDomain.domain} has been verified`
+ message: `${selectedProxyRule.domain} has been verified`
});
trackEvent(Submit.DomainUpdateVerification);
} catch (e) {
@@ -105,13 +104,13 @@
{#if selectedTab === 'nameserver'}
-
+
{:else}
+ domain={selectedProxyRule.domain} />
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte
index 020947970..e8dde4d2d 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/table.svelte
@@ -19,14 +19,22 @@
import { columns } from './store';
let {
- domains
+ proxyRules
}: {
- domains: Models.ProxyRuleList;
+ proxyRules: Models.ProxyRuleList;
} = $props();
let showDelete = $state(false);
let showRetry = $state(false);
- let selectedDomain: Models.ProxyRule = $state(null);
+ let selectedProxyRule: Models.ProxyRule = $state(null);
+
+ const proxyTarget = (proxy: Models.ProxyRule) => {
+ return proxy?.redirectUrl
+ ? 'Redirect to ' + proxy.redirectUrl
+ : proxy?.deploymentVcsProviderBranch
+ ? 'Deployed from' + proxy.deploymentVcsProviderBranch
+ : 'Active deployment';
+ };
@@ -38,25 +46,25 @@
{/each}
- {#each domains.rules as domain}
+ {#each proxyRules.rules as rule}
{#each $columns as column}
{#if column.id === 'domain'}
-
+
- {domain.domain}
+ {rule.domain}
- {#if domain.status === 'verifying'}
+ {#if rule.status === 'verifying'}
- {:else if domain.status !== 'verified'}
+ {:else if rule.status !== 'verified'}
{:else if column.id === 'target'}
- {domain?.redirectUrl
- ? 'Redirect to ' + domain.redirectUrl
- : domain?.deploymentVcsProviderBranch
- ? 'Deployed from' + domain.deploymentVcsProviderBranch
- : '-'}
+ {proxyTarget(rule)}
{/if}
{/each}
@@ -88,11 +92,11 @@
- {#if domain.status !== 'verified'}
+ {#if rule.status !== 'verified'}
{
- selectedDomain = domain;
+ selectedProxyRule = rule;
showRetry = true;
toggle(e);
}}>
@@ -103,7 +107,7 @@
status="danger"
leadingIcon={IconTrash}
on:click={(e) => {
- selectedDomain = domain;
+ selectedProxyRule = rule;
showDelete = true;
toggle(e);
trackEvent(Click.DomainDeleteClick, {
@@ -122,9 +126,9 @@
{#if showDelete}
-
+
{/if}
{#if showRetry}
-
+
{/if}
diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte
index 881e4e3d2..184406e24 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/logs/sheet.svelte
@@ -141,7 +141,7 @@
-
+