Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions src/lib/components/domains/nameserverTable.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script lang="ts">
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { getProxyRuleStatusBadge } from './status';

import { Badge, Layout, Typography, Table, InteractiveText } from '@appwrite.io/pink-svelte';

Expand All @@ -24,16 +25,13 @@
{domain}
</Typography.Text>
{#if verified !== undefined}
{#if ruleStatus === 'created'}
<Badge variant="secondary" type="error" size="xs" content="Verification failed" />
{:else if ruleStatus === 'verifying'}
<Badge variant="secondary" size="xs" content="Generating certificate" />
{:else if ruleStatus === 'unverified'}
{@const statusBadge = getProxyRuleStatusBadge(ruleStatus)}
{#if statusBadge}
<Badge
variant="secondary"
type="error"
type={statusBadge.type}
size="xs"
content="Certificate generation failed" />
content={statusBadge.content} />
{:else if verified === true}
<Badge variant="secondary" type="success" size="xs" content="Verified" />
{/if}
Expand Down
16 changes: 5 additions & 11 deletions src/lib/components/domains/recordTable.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
import { getSubdomain } from '$lib/helpers/tlds';
import { isCloud } from '$lib/system';
import { getProxyRuleStatusBadge } from './status';

let {
domain,
Expand Down Expand Up @@ -72,20 +73,13 @@
{domain}
</Typography.Text>
{#if verified !== undefined}
{#if ruleStatus === 'created'}
{@const statusBadge = getProxyRuleStatusBadge(ruleStatus)}
{#if statusBadge}
<Badge
variant="secondary"
type="error"
type={statusBadge.type}
size="xs"
content="Verification failed" />
{:else if ruleStatus === 'verifying'}
<Badge variant="secondary" size="xs" content="Generating certificate" />
{:else if ruleStatus === 'unverified'}
<Badge
variant="secondary"
type="error"
size="xs"
content="Certificate generation failed" />
content={statusBadge.content} />
{:else if verified === true}
<Badge variant="secondary" type="success" size="xs" content="Verified" />
{/if}
Expand Down
70 changes: 70 additions & 0 deletions src/lib/components/domains/status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { ProxyRuleStatus, type Models } from '@appwrite.io/console';

export type ProxyRuleStatusValue =
| 'created'
| 'verified'
| 'verifying'
| 'unverified'
| ProxyRuleStatus
| undefined;

export function isProxyRuleVerified(status: ProxyRuleStatusValue): boolean {
return status === ProxyRuleStatus.Verified;
}

export function normalizeProxyRuleStatus(status: ProxyRuleStatusValue): ProxyRuleStatusValue {
if (status === ProxyRuleStatus.Created) {
return ProxyRuleStatus.Unverified;
}

return status;
}

export function isProxyRuleRetryable(status: ProxyRuleStatusValue): boolean {
const normalizedStatus = normalizeProxyRuleStatus(status);

return normalizedStatus === ProxyRuleStatus.Unverified;
}

export function isProxyRuleLogsViewable(proxyRule: Models.ProxyRule): boolean {
return (
Boolean(proxyRule.logs?.length) &&
normalizeProxyRuleStatus(proxyRule.status) !== ProxyRuleStatus.Verified
);
Comment on lines +29 to +33
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Broadened log visibility for created status

The old code whitelisted only 'verifying' and 'unverified' for log viewing. The new normalizedStatus !== Verified predicate also includes created (before normalization) and any unrecognized future statuses. Since the PR intentionally treats created as a failure state equivalent to unverified, this is probably correct — but worth confirming that exposing logs on a freshly-created (never-attempted) rule is the desired UX, in case the API returns created for brand-new rules that have no meaningful logs yet.

}

export function getProxyRuleUpdatedPrefix(status: ProxyRuleStatusValue): string {
const normalizedStatus = normalizeProxyRuleStatus(status);

if (normalizedStatus === ProxyRuleStatus.Verifying) {
return 'Updated';
}

if (normalizedStatus === ProxyRuleStatus.Unverified) {
return 'Failed';
}

return '';
Comment on lines +36 to +47
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 created timestamp label changed from 'Checked' to 'Failed'

The old updatedLabel emitted 'Checked <time>' for created status. After normalization, created maps to unverified which now returns 'Failed', so the label becomes 'Failed <time>'. This is arguably more accurate, but it's a visible user-facing string change. If "Checked" had a distinct meaning (e.g., "DNS was checked but certificate generation hasn't started"), dropping it may remove useful context for users diagnosing their setup.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

}

export function getProxyRuleStatusBadge(status: ProxyRuleStatusValue): {
content: string;
type?: 'error';
} | null {
const normalizedStatus = normalizeProxyRuleStatus(status);

if (normalizedStatus === ProxyRuleStatus.Verifying) {
return {
content: 'Generating certificate'
};
}

if (normalizedStatus === ProxyRuleStatus.Unverified) {
return {
content: 'Certificate generation failed',
type: 'error'
};
}

return null;
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import { isCloud } from '$lib/system';
import { getApexDomain } from '$lib/helpers/tlds';
import { resolveRoute } from '$lib/stores/navigation';
import { isProxyRuleVerified } from '$lib/components/domains/status';

let { data } = $props();

Expand Down Expand Up @@ -108,7 +109,7 @@

await invalidate(Dependencies.FUNCTION_DOMAINS);

const verified = rule?.status !== 'created';
const verified = isProxyRuleVerified(rule?.status);
if (verified) {
addNotification({
type: 'success',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@
import { columns } from './store';
import { regionalProtocol } from '$routes/(console)/project-[region]-[project]/store';
import DnsRecordsAction from '$lib/components/domains/dnsRecordsAction.svelte';
import {
getProxyRuleStatusBadge,
getProxyRuleUpdatedPrefix,
isProxyRuleLogsViewable,
isProxyRuleRetryable,
isProxyRuleVerified
} from '$lib/components/domains/status';
import ViewLogsModal from '$lib/components/domains/viewLogsModal.svelte';
import { timeFromNowShort } from '$lib/helpers/date';

Expand All @@ -49,7 +56,7 @@
};

function updatedLabel(proxyRule: Models.ProxyRule): string {
if (proxyRule.status === 'verified') {
if (isProxyRuleVerified(proxyRule.status)) {
return '';
}

Expand All @@ -58,14 +65,7 @@
return '';
}

const prefix =
proxyRule.status === 'created'
? 'Checked'
: proxyRule.status === 'verifying'
? 'Updated'
: proxyRule.status === 'unverified'
? 'Failed'
: '';
const prefix = getProxyRuleUpdatedPrefix(proxyRule.status);

return prefix + ' ' + timeStr;
}
Expand All @@ -81,10 +81,9 @@
<Table.Header.Cell column="actions" {root} />
</svelte:fragment>
{#each proxyRules.rules as proxyRule (proxyRule.$id)}
{@const isRetryable = proxyRule.status === 'created' || proxyRule.status === 'unverified'}
{@const isLogsViewable =
proxyRule.logs?.length > 0 &&
(proxyRule.status === 'verifying' || proxyRule.status === 'unverified')}
{@const isRetryable = isProxyRuleRetryable(proxyRule.status)}
{@const isLogsViewable = isProxyRuleLogsViewable(proxyRule)}
{@const statusBadge = getProxyRuleStatusBadge(proxyRule.status)}
<Table.Row.Base {root}>
{#each $columns as column}
<Table.Cell column={column.id} {root}>
Expand All @@ -99,17 +98,11 @@
</Typography.Text>
</Link>
<Layout.Stack direction="row" gap="s" alignItems="center">
{#if proxyRule.status !== 'verified'}
{#if statusBadge}
<Badge
variant="secondary"
type={proxyRule.status === 'verifying'
? undefined
: 'error'}
content={proxyRule.status === 'created'
? 'Verification failed'
: proxyRule.status === 'verifying'
? 'Generating certificate'
: 'Certificate generation failed'}
type={statusBadge.type}
content={statusBadge.content}
size="xs" />
{/if}
{#if isRetryable}
Expand Down Expand Up @@ -140,7 +133,7 @@
</Layout.Stack>
{:else if column.id === 'target'}
{proxyTarget(proxyRule)}
{:else if column.id === 'updated' && proxyRule.status !== 'verified'}
{:else if column.id === 'updated' && !isProxyRuleVerified(proxyRule.status)}
<Layout.Stack direction="row" justifyContent="flex-end">
<Typography.Text
variant="m-400"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import { project } from '$routes/(console)/project-[region]-[project]/store';
import { getApexDomain } from '$lib/helpers/tlds';
import type { Models } from '@appwrite.io/console';
import { isProxyRuleVerified } from '$lib/components/domains/status';

const routeBase = `${base}/project-${page.params.region}-${page.params.project}/settings/domains`;

Expand Down Expand Up @@ -58,7 +59,7 @@

await invalidate(Dependencies.DOMAINS);

const verified = rule?.status !== 'created';
const verified = isProxyRuleVerified(rule?.status);
if (verified) {
addNotification({
type: 'success',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@
import RetryDomainModal from './retryDomainModal.svelte';
import { regionalProtocol } from '../../store';
import DnsRecordsAction from '$lib/components/domains/dnsRecordsAction.svelte';
import {
getProxyRuleStatusBadge,
getProxyRuleUpdatedPrefix,
isProxyRuleLogsViewable,
isProxyRuleRetryable,
isProxyRuleVerified
} from '$lib/components/domains/status';
import ViewLogsModal from '$lib/components/domains/viewLogsModal.svelte';
import { timeFromNowShort } from '$lib/helpers/date';

Expand Down Expand Up @@ -56,7 +63,7 @@
];

function updatedLabel(proxyRule: Models.ProxyRule): string {
if (proxyRule.status === 'verified') {
if (isProxyRuleVerified(proxyRule.status)) {
return '';
}

Expand All @@ -65,14 +72,7 @@
return '';
}

const prefix =
proxyRule.status === 'created'
? 'Checked'
: proxyRule.status === 'verifying'
? 'Updated'
: proxyRule.status === 'unverified'
? 'Failed'
: '';
const prefix = getProxyRuleUpdatedPrefix(proxyRule.status);

return prefix + ' ' + timeStr;
}
Expand All @@ -88,10 +88,9 @@
<Table.Header.Cell column="actions" {root} />
</svelte:fragment>
{#each domains.rules as proxyRule (proxyRule.$id)}
{@const isRetryable = proxyRule.status === 'created' || proxyRule.status === 'unverified'}
{@const isLogsViewable =
proxyRule.logs?.length > 0 &&
(proxyRule.status === 'verifying' || proxyRule.status === 'unverified')}
{@const isRetryable = isProxyRuleRetryable(proxyRule.status)}
{@const isLogsViewable = isProxyRuleLogsViewable(proxyRule)}
{@const statusBadge = getProxyRuleStatusBadge(proxyRule.status)}
<Table.Row.Base {root}>
{#each columns as column}
<Table.Cell column={column.id} {root}>
Expand All @@ -106,17 +105,11 @@
</Typography.Text>
</Link>
<Layout.Stack direction="row" gap="s" alignItems="center">
{#if proxyRule.status !== 'verified'}
{#if statusBadge}
<Badge
variant="secondary"
type={proxyRule.status === 'verifying'
? undefined
: 'error'}
content={proxyRule.status === 'created'
? 'Verification failed'
: proxyRule.status === 'verifying'
? 'Generating certificate'
: 'Certificate generation failed'}
type={statusBadge.type}
content={statusBadge.content}
size="xs" />
{/if}
{#if isRetryable}
Expand Down Expand Up @@ -145,7 +138,7 @@
{/if}
</Layout.Stack>
</Layout.Stack>
{:else if column.id === 'updated' && proxyRule.status !== 'verified'}
{:else if column.id === 'updated' && !isProxyRuleVerified(proxyRule.status)}
<Layout.Stack direction="row" justifyContent="flex-end">
<Typography.Text
variant="m-400"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
} from '$routes/(console)/project-[region]-[project]/store';
import { isCloud } from '$lib/system';
import { getApexDomain } from '$lib/helpers/tlds';
import { isProxyRuleVerified } from '$lib/components/domains/status';

const routeBase = `${base}/project-${page.params.region}-${page.params.project}/sites/site-${page.params.site}/domains`;

Expand Down Expand Up @@ -110,7 +111,7 @@

await invalidate(Dependencies.SITES_DOMAINS);

const verified = rule?.status !== 'created';
const verified = isProxyRuleVerified(rule?.status);
if (verified) {
addNotification({
type: 'success',
Expand Down
Loading
Loading