From 87554f86af9bb6b25682646e5a4a798778ef91da Mon Sep 17 00:00:00 2001 From: Prem Palanisamy Date: Wed, 8 Apr 2026 10:34:39 +0100 Subject: [PATCH 1/5] Fix duplicate import and gate overwrite/skip on database selection - Merge duplicate Layout/Typography import in table +page.svelte - Only show overwrite/skip checkboxes in migration wizard when Databases resource is selected --- .../table-[table]/+page.svelte | 64 +++++++++++++++++-- .../migrations/(import)/wizard.svelte | 46 +++++++++++-- 2 files changed, 101 insertions(+), 9 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte index 6467241f2a..71ee820686 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/+page.svelte @@ -8,7 +8,7 @@ import { Container } from '$lib/layout'; import { preferences } from '$lib/stores/preferences'; import { canWriteTables, canWriteRows } from '$lib/stores/roles'; - import { Icon, Layout, Divider, Tooltip, Typography, Link } from '@appwrite.io/pink-svelte'; + import { Dialog, Icon, Layout, Divider, Selector, Tooltip, Typography, Link } from '@appwrite.io/pink-svelte'; import type { PageData } from './$types'; import { tableColumns, @@ -44,6 +44,7 @@ import { EmptySheet, EmptySheetCards, type Field } from '$database/(entity)'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; + import { Empty as SuggestionsEmptySheet, tableColumnSuggestions, @@ -57,6 +58,11 @@ let isRefreshing = false; let showImportCSV = false; + let showImportOptions = false; + let importOverwrite = false; + let importSkip = false; + let pendingFile: Models.File | null = null; + let pendingLocalFile = false; // todo: might need a type fix here. const filterColumns = writable([]); @@ -108,17 +114,30 @@ $: disableButton = canShowSuggestionsSheet; - async function onSelect(file: Models.File, localFile = false) { + function onSelect(file: Models.File, localFile = false) { + pendingFile = file; + pendingLocalFile = localFile; + importOverwrite = false; + importSkip = false; + showImportOptions = true; + } + + async function startImport() { + if (!pendingFile) return; + + showImportOptions = false; $isCsvImportInProgress = true; try { await sdk .forProject(page.params.region, page.params.project) .migrations.createCSVImport({ - bucketId: file.bucketId, - fileId: file.$id, + bucketId: pendingFile.bucketId, + fileId: pendingFile.$id, resourceId: `${page.params.database}:${page.params.table}`, - internalFile: localFile + internalFile: pendingLocalFile, + overwrite: importOverwrite, + skip: importSkip }); addNotification({ @@ -135,6 +154,7 @@ }); } finally { $isCsvImportInProgress = false; + pendingFile = null; } } @@ -424,6 +444,40 @@ }} /> {/if} + + + + Choose how to handle documents that already exist in this table. + + + { + importOverwrite = e.detail; + if (e.detail) importSkip = false; + }} + label="Overwrite existing documents" + description="Documents with matching IDs will be updated with the imported data." /> + { + importSkip = e.detail; + if (e.detail) importOverwrite = false; + }} + label="Skip existing documents" + description="Documents with matching IDs will be silently skipped." /> + + + + + + + + + + { resetImportStores(); }; @@ -46,6 +50,11 @@ try { const resources = migrationFormToResources($formData, $provider.provider); + const importOptions = { + overwrite: importOverwrite, + skip: importSkip + }; + switch ($provider.provider) { case 'appwrite': { await sdk @@ -54,7 +63,8 @@ resources: resources as AppwriteMigrationResource[], endpoint: $provider.endpoint, projectId: $provider.projectID, - apiKey: $provider.apiKey + apiKey: $provider.apiKey, + ...importOptions }); await invalidate(Dependencies.MIGRATIONS); @@ -70,7 +80,8 @@ databaseHost: $provider.host, username: $provider.username || 'postgres', password: $provider.password, - port: $provider.port || 5432 + port: $provider.port || 5432, + ...importOptions }); await invalidate(Dependencies.MIGRATIONS); break; @@ -80,7 +91,8 @@ .forProject(page.params.region, page.params.project) .migrations.createFirebaseMigration({ resources: resources as FirebaseMigrationResource[], - serviceAccount: $provider.serviceAccount + serviceAccount: $provider.serviceAccount, + ...importOptions }); await invalidate(Dependencies.MIGRATIONS); break; @@ -95,7 +107,8 @@ adminSecret: $provider.adminSecret, database: $provider.database || $provider.subdomain, username: $provider.username || 'postgres', - password: $provider.password + password: $provider.password, + ...importOptions }); await invalidate(Dependencies.MIGRATIONS); @@ -196,6 +209,31 @@ projectSdk={sdk.forProject(page.params.region, page.params.project)} /> + + {#if $formData.databases.root} +
+ + { + importOverwrite = e.detail; + if (e.detail) importSkip = false; + }} + label="Overwrite existing documents" + description="Documents with matching IDs will be updated with the imported data." /> + { + importSkip = e.detail; + if (e.detail) importOverwrite = false; + }} + label="Skip existing documents" + description="Documents with matching IDs will be silently skipped." /> + +
+ {/if} {/if} From 8dfd91b7d3b2d8f7f850aa1f0fd7577f22a006ae Mon Sep 17 00:00:00 2001 From: Prem Palanisamy Date: Thu, 7 May 2026 12:15:03 +0100 Subject: [PATCH 2/5] feat(migrations): expose Fail/Skip/Overwrite radios for import flows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reworks the import-options UI in three places to match the new OnDuplicate enum (Fail / Skip / Overwrite) shipped by the cloud worker and migration package: - Settings → Migrations wizard (Appwrite source): three-option radio group with Fail pre-selected. Wording reflects that overwrite/skip apply to the entire resource tree (databases, tables, columns, indexes, rows), not just rows. - Tables (TablesDB) CSV import: same three-option radio replacing the prior two checkboxes. Wording stays document-centric since CSV import is row-only. - Collections (DocumentsDB) JSON import: previously imported with no onDuplicate (silent default to fail). Now opens the same Import options dialog with Fail/Skip/Overwrite radios. Also bumps @appwrite.io/console SDK to https://pkg.vc/-/@appwrite/ @appwrite.io/console@341620a so the OnDuplicate enum exports match the merged backend (post 1.9.x). Renamed OnDuplicate.Upsert -> OnDuplicate.Overwrite throughout the console (the enum was renamed in upstream PR #11910 / migration 1.9.7; the prior reference compiled to undefined and silently defaulted the backend to Fail). --- bun.lock | 4 +- package.json | 2 +- .../collection-[collection]/+page.svelte | 82 +++++++++++++++++-- .../table-[table]/+page.svelte | 66 +++++++++------ .../migrations/(import)/wizard.svelte | 54 +++++++----- 5 files changed, 155 insertions(+), 53 deletions(-) diff --git a/bun.lock b/bun.lock index 05bdf932dd..c2793e6bf5 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "@appwrite/console", "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@8f00f95", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@341620a", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", @@ -124,7 +124,7 @@ "@analytics/type-utils": ["@analytics/type-utils@0.6.4", "", {}, "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw=="], - "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@8f00f95", { "dependencies": { "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@341620a", { "dependencies": { "json-bigint": "1.0.0" } }], "@appwrite.io/pink-icons": ["@appwrite.io/pink-icons@0.25.0", "", {}, "sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q=="], diff --git a/package.json b/package.json index 0eb4abad81..b0fe8b089b 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@8f00f95", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@341620a", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@bfe7ce3", "@appwrite.io/pink-legacy": "^1.0.3", 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 1df280dcef..017e1a03a0 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 @@ -5,7 +5,15 @@ import type { Column, ColumnType } from '$lib/helpers/types'; import { Container } from '$lib/layout'; import { preferences } from '$lib/stores/preferences'; - import { Icon, Layout, Divider, Tooltip } from '@appwrite.io/pink-svelte'; + import { + Icon, + Layout, + Divider, + Tooltip, + Selector, + Typography, + Dialog + } from '@appwrite.io/pink-svelte'; import type { PageProps } from './$types'; import FilePicker from '$lib/components/filePicker.svelte'; import { page } from '$app/state'; @@ -21,7 +29,7 @@ IconUpload, IconDownload } from '@appwrite.io/pink-icons-svelte'; - import { type Models } from '@appwrite.io/console'; + import { OnDuplicate, type Models } from '@appwrite.io/console'; import { sdk } from '$lib/stores/sdk'; import { goto } from '$app/navigation'; import { resolve } from '$app/paths'; @@ -49,7 +57,11 @@ let isRefreshing = $state(false); let showImportJson = $state(false); + let showImportOptions = $state(false); let showCustomColumnsModal = $state(false); + let importOnDuplicate: OnDuplicate = $state(OnDuplicate.Fail); + let pendingFile: Models.File | null = $state(null); + let pendingLocalFile = $state(false); let columnsError: string = $state(null); let spreadsheet: SpreadSheet | null = $state(null); @@ -74,17 +86,28 @@ return queryParam ? `${url}?query=${encodeURIComponent(queryParam)}` : url; } - async function onSelect(file: Models.File, localFile = false) { + function onSelect(file: Models.File, localFile = false) { + pendingFile = file; + pendingLocalFile = localFile; + importOnDuplicate = OnDuplicate.Fail; + showImportOptions = true; + } + + async function startImport() { + if (!pendingFile) return; + + showImportOptions = false; $isCollectionsJsonImportInProgress = true; try { await sdk .forProject(page.params.region, page.params.project) .migrations.createJSONImport({ - bucketId: file.bucketId, - fileId: file.$id, + bucketId: pendingFile.bucketId, + fileId: pendingFile.$id, resourceId: `${page.params.database}:${page.params.collection}`, - internalFile: localFile + internalFile: pendingLocalFile, + onDuplicate: importOnDuplicate }); addNotification({ @@ -101,6 +124,7 @@ }); } finally { $isCollectionsJsonImportInProgress = false; + pendingFile = null; } } @@ -343,6 +367,52 @@ }} /> {/if} + + + + Choose how to handle documents that already exist in this collection. + + + + + Import aborts on the first document with a matching ID. + + + + + Documents with matching IDs will be silently skipped. + + + + + Documents with matching IDs will be updated with the imported data. + + + + + + + + + + + + - + + Migration aborts on the first row with a matching ID. + + + { - importOverwrite = e.detail; - if (e.detail) importSkip = false; - }} - label="Overwrite existing documents" - description="Documents with matching IDs will be updated with the imported data." /> - + + Documents with matching IDs will be silently skipped. + + + { - importSkip = e.detail; - if (e.detail) importOverwrite = false; - }} - label="Skip existing documents" - description="Documents with matching IDs will be silently skipped." /> + bind:group={importOnDuplicate} + name="importOnDuplicate" + value={OnDuplicate.Overwrite} + label="Overwrite existing documents"> + + Documents with matching IDs will be updated with the imported data. + + diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte index 67043f5d66..033332ca4b 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte @@ -11,6 +11,7 @@ AppwriteMigrationResource, FirebaseMigrationResource, NHostMigrationResource, + OnDuplicate, SupabaseMigrationResource } from '@appwrite.io/console'; import { started } from '../stores'; @@ -39,8 +40,7 @@ import { capitalize } from '$lib/helpers/string'; import { page } from '$app/state'; - let importOverwrite = false; - let importSkip = false; + let importOnDuplicate: OnDuplicate = OnDuplicate.Fail; const onExit = () => { resetImportStores(); @@ -51,8 +51,7 @@ const resources = migrationFormToResources($formData, $provider.provider); const importOptions = { - overwrite: importOverwrite, - skip: importSkip + onDuplicate: importOnDuplicate }; switch ($provider.provider) { @@ -213,24 +212,39 @@ {#if $formData.databases.root}
- { - importOverwrite = e.detail; - if (e.detail) importSkip = false; - }} - label="Overwrite existing documents" - description="Documents with matching IDs will be updated with the imported data." /> - + + Migration aborts on the first existing resource (database, + table, column, index, or row). + + + { - importSkip = e.detail; - if (e.detail) importOverwrite = false; - }} - label="Skip existing documents" - description="Documents with matching IDs will be silently skipped." /> + bind:group={importOnDuplicate} + name="importOnDuplicate" + value={OnDuplicate.Skip} + label="Skip existing resources"> + + Existing resources are left untouched. Only resources missing on + the destination are created. + + + + + Existing resources are updated to match the source. Schema drift + and row data are both reconciled. + +
{/if} From b0d92f58b12e9a4aa15df88f3a0c2408a7f45fab Mon Sep 17 00:00:00 2001 From: Prem Palanisamy Date: Thu, 7 May 2026 12:36:09 +0100 Subject: [PATCH 3/5] fix(migrations): gate onDuplicate to Fail when databases not selected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Fail/Skip/Overwrite radios are only rendered when the Databases resource is checked. The local importOnDuplicate value, however, persists across toggles — so unticking Databases after picking Overwrite or Skip would silently apply that mode to the entire migration payload (users, teams, functions, etc.) on submit. Gate the value at submit time: only forward importOnDuplicate when $formData.databases.root is true; otherwise always send Fail. Addresses greptile P1 review on PR #2964. --- .../settings/migrations/(import)/wizard.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte index 033332ca4b..43d5294b46 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte @@ -50,8 +50,13 @@ try { const resources = migrationFormToResources($formData, $provider.provider); + // Gate onDuplicate to Fail when databases isn't selected. The radios + // are only shown when databases.root is checked, but the local value + // persists across toggles — without this gate, deselecting databases + // after picking Overwrite/Skip would silently apply that mode to + // other resource types (users, teams, functions, etc.) on submit. const importOptions = { - onDuplicate: importOnDuplicate + onDuplicate: $formData.databases.root ? importOnDuplicate : OnDuplicate.Fail }; switch ($provider.provider) { From c7687220d7a5aa8102433e1e131bfe0ef85c9325 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 7 May 2026 13:02:36 +0530 Subject: [PATCH 4/5] fix: update proxy rule status handling and improve variable ID generation in function and site creation --- src/lib/components/domains/status.ts | 4 -- .../components/domains/viewLogsModal.svelte | 2 +- .../auth/updateOAuth.ts | 4 +- .../table-[table]/rows/create.svelte | 15 ++++++-- .../table-[table]/rows/store.ts | 38 +++++++++++++++++++ .../create-function/deploy/+page.svelte | 1 + .../create-function/manual/+page.svelte | 1 + .../repository-[repository]/+page.svelte | 1 + .../template-[template]/+page.svelte | 1 + .../function-[function]/domains/+page.ts | 3 +- .../add-domain/verify-[domain]/+page.svelte | 2 +- .../domains/retryDomainModal.svelte | 2 +- .../function-[function]/settings/+page.svelte | 2 + .../settings/domains/+page.ts | 3 +- .../add-domain/verify-[domain]/+page.svelte | 2 +- .../settings/domains/retryDomainModal.svelte | 2 +- .../sites/create-site/deploy/+page.svelte | 1 + .../sites/create-site/manual/+page.svelte | 1 + .../repository-[repository]/+page.svelte | 1 + .../template-[template]/+page.svelte | 1 + .../sites/site-[site]/domains/+page.ts | 3 +- .../add-domain/verify-[domain]/+page.svelte | 2 +- .../domains/retryDomainModal.svelte | 2 +- .../sites/site-[site]/settings/+page.svelte | 2 + 24 files changed, 73 insertions(+), 23 deletions(-) diff --git a/src/lib/components/domains/status.ts b/src/lib/components/domains/status.ts index 89bb1df411..27c696a41c 100644 --- a/src/lib/components/domains/status.ts +++ b/src/lib/components/domains/status.ts @@ -13,10 +13,6 @@ export function isProxyRuleVerified(status: ProxyRuleStatusValue): boolean { } export function normalizeProxyRuleStatus(status: ProxyRuleStatusValue): ProxyRuleStatusValue { - if (status === ProxyRuleStatus.Created) { - return ProxyRuleStatus.Unverified; - } - return status; } diff --git a/src/lib/components/domains/viewLogsModal.svelte b/src/lib/components/domains/viewLogsModal.svelte index 3f558c71a0..9fd5fb366b 100644 --- a/src/lib/components/domains/viewLogsModal.svelte +++ b/src/lib/components/domains/viewLogsModal.svelte @@ -43,7 +43,7 @@ try { selectedProxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId: selectedProxyRule.$id }); + .proxy.updateRuleStatus({ ruleId: selectedProxyRule.$id }); await invalidate(Dependencies.DOMAINS); show = false; diff --git a/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts b/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts index 0c21955027..3931406c3e 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts @@ -218,8 +218,8 @@ async function updateProjectOAuth({ clientSecret: getSecret('clientSecret'), wellKnownURL: getDetail('wellKnownURL'), authorizationURL: getDetail('authorizationURL'), - tokenUrl: getDetail('tokenUrl'), - userInfoUrl: getDetail('userInfoUrl'), + tokenURL: getDetail('tokenUrl'), + userInfoURL: getDetail('userInfoUrl'), enabled }); case OAuthProvider.Okta: diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte index 275698c1e3..3262b1c1a5 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/create.svelte @@ -14,7 +14,8 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { tick } from 'svelte'; - import { isRelationship, isRelationshipToMany } from './store'; + import { isRelationship, isRelationshipToMany, buildPayload } from './store'; + import type { RowValue } from './store'; import { hash } from '$lib/helpers/string'; type CreateRow = { @@ -70,7 +71,7 @@ function prepareRowPayload(createRowObject: CreateRow): object { const { row, columns } = createRowObject; - const payload = structuredClone(row); + const payload = structuredClone(row) as Record; for (const column of columns) { if (isRelationship(column) && !isRelationshipToMany(column)) { @@ -79,7 +80,13 @@ if (value && typeof value === 'object') { if (Array.isArray(value)) { - payload[key] = value.map((item) => item?.$id).filter(Boolean); + payload[key] = value + .map((item) => + item && typeof item === 'object' && '$id' in item + ? (item.$id as string) + : null + ) + .filter(Boolean); } else { payload[key] = (value as { $id: string })['$id']; } @@ -87,7 +94,7 @@ } } - return payload; + return buildPayload(columns, payload); } async function create(): Promise { diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts index 16b04abd27..ee1686c119 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/rows/store.ts @@ -3,6 +3,12 @@ import type { Column } from '$lib/helpers/types'; import { type Models } from '@appwrite.io/console'; import type { Attributes, Columns } from '../../store'; +type RowPrimitive = string | number | bigint | boolean | null | undefined; +interface RowObject { + [key: string]: RowValue; +} +export type RowValue = RowPrimitive | RowValue[] | RowObject; + export function isRelationshipToMany(field: Field) { if (!field) return false; if (!isRelationship(field)) return false; @@ -50,3 +56,35 @@ export function isSpatialType( return spatialTypes.includes(field.type.toLowerCase()); } + +function castBigIntValue(value: RowValue): RowValue { + if (value === null || value === undefined || value === '') { + return value; + } + + return String(value); +} + +export function buildPayload>( + fields: Field[] | undefined, + row: T +): T { + const payload = structuredClone(row) as Record; + + for (const field of fields ?? []) { + if (field.type !== 'bigint') { + continue; + } + + const value = payload[field.key]; + + if (field.array && Array.isArray(value)) { + payload[field.key] = value.map((item) => castBigIntValue(item)); + continue; + } + + payload[field.key] = castBigIntValue(value); + } + + return payload as T; +} diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte index e0e389e912..200e0575d8 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/deploy/+page.svelte @@ -121,6 +121,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).functions.createVariable({ functionId: func.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable.secret diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte index 3e125c978f..1e72962068 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte @@ -90,6 +90,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).functions.createVariable({ functionId: func.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable?.secret ?? false diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte index 7b19202d0f..0e022aabcc 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte @@ -132,6 +132,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).functions.createVariable({ functionId: func.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable?.secret ?? false diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte index cfb1bcd802..4a46da427b 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte @@ -190,6 +190,7 @@ .forProject(page.params.region, page.params.project) .functions.createVariable({ functionId: func.$id, + variableId: ID.unique(), key: variable.name, value: variable.value, secret: variable?.secret ?? false 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 5fdc16ceb7..62b0175d14 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 @@ -31,8 +31,7 @@ export const load: PageLoad = async ({ depends, params, url, route, parent }) => Query.orderDesc(''), Query.orderDesc('$updatedAt'), ...parsedQueries.values() - ], - search: search || undefined + ] }); const organizationDomains = await fetchOrganizationDomainsForRules( 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 7701ebd8d7..a79271ebfc 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 @@ -73,7 +73,7 @@ try { proxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId }); + .proxy.updateRuleStatus({ ruleId }); await Promise.all([ invalidate(Dependencies.DOMAINS), diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/retryDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/retryDomainModal.svelte index 02a09d4c4a..926b77930c 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/retryDomainModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/domains/retryDomainModal.svelte @@ -68,7 +68,7 @@ try { selectedProxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId: selectedProxyRule.$id }); + .proxy.updateRuleStatus({ ruleId: selectedProxyRule.$id }); await invalidate(Dependencies.FUNCTION_DOMAINS); show = false; diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/+page.svelte index cdfb047521..6175d94b92 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/+page.svelte @@ -24,6 +24,7 @@ import UpdateVariables from '$routes/(console)/project-[region]-[project]/updateVariables.svelte'; import { page } from '$app/state'; import { Link } from '$lib/elements'; + import { ID } from '@appwrite.io/console'; export let data; let showAlert = true; @@ -31,6 +32,7 @@ const sdkCreateVariable = async (key: string, value: string, secret?: boolean) => { await sdk.forProject(page.params.region, page.params.project).functions.createVariable({ functionId: data.function.$id, + variableId: ID.unique(), key, value, secret diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/+page.ts b/src/routes/(console)/project-[region]-[project]/settings/domains/+page.ts index bf7570e23f..70d072a648 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/domains/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/settings/domains/+page.ts @@ -25,8 +25,7 @@ export const load: PageLoad = async ({ depends, url, route, params, parent }) => Query.equal('type', RuleType.API), Query.equal('trigger', RuleTrigger.MANUAL), Query.orderDesc('$updatedAt') - ], - search: search || undefined + ] }); const organizationDomains = await fetchOrganizationDomainsForRules(rules, organization.$id); 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 93f725eb0f..b32e4ff1b9 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 @@ -72,7 +72,7 @@ try { proxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId }); + .proxy.updateRuleStatus({ ruleId }); await invalidate(Dependencies.DOMAINS); await goto(routeBase); diff --git a/src/routes/(console)/project-[region]-[project]/settings/domains/retryDomainModal.svelte b/src/routes/(console)/project-[region]-[project]/settings/domains/retryDomainModal.svelte index 1098b8d3fb..20f895674f 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/domains/retryDomainModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/domains/retryDomainModal.svelte @@ -68,7 +68,7 @@ try { selectedProxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId: selectedProxyRule.$id }); + .proxy.updateRuleStatus({ ruleId: selectedProxyRule.$id }); await invalidate(Dependencies.DOMAINS); show = false; diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/deploy/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/deploy/+page.svelte index 97c6506f58..fa75d27942 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/deploy/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/deploy/+page.svelte @@ -171,6 +171,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).sites.createVariable({ siteId: site.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable.secret diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte index 5a313e8f57..f2da210d04 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/manual/+page.svelte @@ -93,6 +93,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).sites.createVariable({ siteId: site.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable?.secret ?? false diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte index f4e18691b6..aca5fe7bb3 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte @@ -143,6 +143,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).sites.createVariable({ siteId: site.$id, + variableId: ID.unique(), key: variable.key, value: variable.value, secret: variable?.secret ?? false diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte index 0e57e223a6..a11121d55c 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/templates/template-[template]/+page.svelte @@ -151,6 +151,7 @@ const promises = variables.map((variable) => sdk.forProject(page.params.region, page.params.project).sites.createVariable({ siteId: site.$id, + variableId: ID.unique(), key: variable.name, value: variable.value, secret: variable?.secret ?? false 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 25c021aa66..b0ba589da9 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 @@ -30,8 +30,7 @@ export const load = async ({ params, depends, url, route, parent }) => { Query.orderDesc(''), Query.orderDesc('$updatedAt'), ...parsedQueries.values() - ], - search: search || undefined + ] }); const organizationDomains = await fetchOrganizationDomainsForRules( diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte index 83eb4f33da..cd0f6f6639 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/domains/add-domain/verify-[domain]/+page.svelte @@ -72,7 +72,7 @@ try { proxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId }); + .proxy.updateRuleStatus({ ruleId }); await Promise.all([ invalidate(Dependencies.DOMAINS), 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 56fa02b6dc..b7b74ae344 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 @@ -68,7 +68,7 @@ try { selectedProxyRule = await sdk .forProject(page.params.region, page.params.project) - .proxy.updateRuleVerification({ ruleId: selectedProxyRule.$id }); + .proxy.updateRuleStatus({ ruleId: selectedProxyRule.$id }); await invalidate(Dependencies.SITES_DOMAINS); show = false; diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.svelte index e91e06eebf..faddf5f366 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.svelte @@ -17,12 +17,14 @@ import UpdateVariables from '$routes/(console)/project-[region]-[project]/updateVariables.svelte'; import UpdateLogging from './updateLogging.svelte'; import UpdateDeploymentRetention from './updateDeploymentRetention.svelte'; + import { ID } from '@appwrite.io/console'; export let data; const sdkCreateVariable = async (key: string, value: string, secret: boolean) => { await sdk.forProject(page.params.region, page.params.project).sites.createVariable({ siteId: page.params.site, + variableId: ID.unique(), key, value, secret From ff360a686ac5880b1290bb4827f06bb5612f2e22 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Thu, 7 May 2026 13:50:54 +0530 Subject: [PATCH 5/5] updated proxy status --- src/lib/components/domains/status.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/components/domains/status.ts b/src/lib/components/domains/status.ts index 27c696a41c..c5f1c41075 100644 --- a/src/lib/components/domains/status.ts +++ b/src/lib/components/domains/status.ts @@ -13,6 +13,9 @@ export function isProxyRuleVerified(status: ProxyRuleStatusValue): boolean { } export function normalizeProxyRuleStatus(status: ProxyRuleStatusValue): ProxyRuleStatusValue { + if (status === 'created') { + return ProxyRuleStatus.Unverified; + } return status; }