From 380bf73d103af7a88173fcf06d72742a29e9f391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 8 Apr 2026 17:01:28 +0200 Subject: [PATCH 1/4] Upgrade SDK to new platforms API --- package.json | 2 +- pnpm-lock.yaml | 23 ++-- src/lib/helpers/platform.ts | 71 ++++++++--- .../overview/onboard.svelte | 15 ++- .../overview/platforms/+page.svelte | 58 ++++----- .../overview/platforms/[platform]/+page.ts | 3 +- .../+page@project-[region]-[project].svelte | 75 +++++++---- .../platforms/[platform]/android.svelte | 25 ++-- .../platforms/[platform]/appleIOS.svelte | 25 ++-- .../platforms/[platform]/appleMacOS.svelte | 25 ++-- .../platforms/[platform]/appleTvOS.svelte | 25 ++-- .../platforms/[platform]/appleWatchOS.svelte | 25 ++-- .../platforms/[platform]/delete.svelte | 3 +- .../[platform]/flutterAndroid.svelte | 25 ++-- .../platforms/[platform]/flutterIOS.svelte | 25 ++-- .../platforms/[platform]/flutterLinux.svelte | 25 ++-- .../platforms/[platform]/flutterMacOS.svelte | 25 ++-- .../[platform]/flutterWindows.svelte | 26 ++-- .../overview/platforms/[platform]/store.ts | 4 +- .../overview/platforms/[platform]/web.svelte | 11 +- .../overview/platforms/createAndroid.svelte | 15 ++- .../overview/platforms/createApple.svelte | 27 ++-- .../overview/platforms/createFlutter.svelte | 120 +++++++++++------- .../platforms/createReactNative.svelte | 61 +++++---- .../overview/platforms/createWeb.svelte | 18 +-- .../overview/platforms/store.ts | 3 +- .../overview/platforms/wizard/store.ts | 16 ++- 27 files changed, 429 insertions(+), 347 deletions(-) diff --git a/package.json b/package.json index 71f9cb2c1..f3c858030 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@24e07fc", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", "@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/pnpm-lock.yaml b/pnpm-lock.yaml index 12bb24e68..c40bac9d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.55.0)(zod@3.25.76) '@appwrite.io/console': - specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c - version: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c + specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6 + version: https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6 '@appwrite.io/pink-icons': specifier: 0.25.0 version: 0.25.0 @@ -75,8 +75,8 @@ importers: specifier: ^5.1.7 version: 5.1.7 nanotar: - specifier: ^0.1.1 - version: 0.1.1 + specifier: ^0.3.0 + version: 0.3.0 pretty-bytes: specifier: ^6.1.1 version: 6.1.1 @@ -281,9 +281,10 @@ packages: '@analytics/type-utils@0.6.4': resolution: {integrity: sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw==} - '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c': - resolution: {integrity: sha512-Mlq0dfJrcqUNFt+QUmrieHrJSScOUniigt1PL5Xum7QEDgT8Z/mMhG/xUcVfZqXtlF5gS4Sq7n72EB6P/3+kmQ==, tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c} - version: 7.0.0 + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6': + resolution: {integrity: sha512-IV+eVqF6tzL/voA1vqNtn5hL9lgJL78MVZkP4ABYwyaDRaXFyLQbPiRlJJesN4m7PYlCztyfAqcOn3QdCCjwIQ==, tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6} + version: 8.2.0 + engines: {node: '>=18.0.0'} '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': resolution: {integrity: sha512-iLFlV55hj8mGuAbmxJGenxN5RaZMmVT4GJb9dv/MP1xBAtYibFq7JvBcxm18qV2KU8c31Rntf+Ub4GL7HwqTYg==} @@ -2675,8 +2676,8 @@ packages: engines: {node: ^18 || >=20} hasBin: true - nanotar@0.1.1: - resolution: {integrity: sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==} + nanotar@0.3.0: + resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3631,7 +3632,7 @@ snapshots: '@analytics/type-utils@0.6.4': {} - '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@83fd10c': + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6': dependencies: json-bigint: 1.0.0 @@ -6160,7 +6161,7 @@ snapshots: nanoid@5.1.7: {} - nanotar@0.1.1: {} + nanotar@0.3.0: {} natural-compare@1.4.0: {} diff --git a/src/lib/helpers/platform.ts b/src/lib/helpers/platform.ts index 33662adb7..f505d2508 100644 --- a/src/lib/helpers/platform.ts +++ b/src/lib/helpers/platform.ts @@ -1,30 +1,59 @@ +import type { Models } from '@appwrite.io/console'; + +export type AnyPlatform = + | Models.PlatformWeb + | Models.PlatformApple + | Models.PlatformAndroid + | Models.PlatformWindows + | Models.PlatformLinux; + export function isMac(): boolean { return window.navigator.platform.toUpperCase().indexOf('MAC') >= 0; } export const getPlatformInfo = (platform: string) => { let name: string, icon: string; - if (platform.includes('flutter')) { - name = 'Flutter'; - icon = 'flutter'; - } else if (platform.includes('react-native')) { - name = 'React Native'; - icon = 'react-native'; - } else if (platform.includes('apple')) { - name = 'Apple'; - icon = 'apple'; - } else if (platform.includes('android')) { - name = 'Android'; - icon = 'android'; - } else if (platform.includes('unity')) { - name = 'Unity'; - icon = 'unity'; - } else if (platform.includes('web')) { - name = 'Web'; - icon = 'code'; - } else { - name = 'Unknown'; - icon = 'unknown'; + switch (platform) { + case 'apple': + name = 'Apple'; + icon = 'apple'; + break; + case 'android': + name = 'Android'; + icon = 'android'; + break; + case 'web': + name = 'Web'; + icon = 'code'; + break; + case 'windows': + name = 'Windows'; + icon = 'windows'; + break; + case 'linux': + name = 'Linux'; + icon = 'linux'; + break; + default: + name = 'Unknown'; + icon = 'unknown'; } return { name, icon }; }; + +export function getPlatformIdentifier(platform: AnyPlatform): string { + switch (platform.type) { + case 'web': + return (platform as Models.PlatformWeb).hostname; + case 'android': + return (platform as Models.PlatformAndroid).applicationId; + case 'apple': + return (platform as Models.PlatformApple).bundleIdentifier; + case 'windows': + return (platform as Models.PlatformWindows).packageIdentifierName; + case 'linux': + return (platform as Models.PlatformLinux).packageName; + default: + return ''; + } +} diff --git a/src/routes/(console)/project-[region]-[project]/overview/onboard.svelte b/src/routes/(console)/project-[region]-[project]/overview/onboard.svelte index 1ec319022..e90d7e6ec 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/onboard.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/onboard.svelte @@ -30,8 +30,11 @@ import PlatformSdkImgSourceDark from './assets/platform-sdk-dark.png'; import { resolve } from '$app/paths'; import { isSmallViewport } from '$lib/stores/viewport'; - import type { Models } from '@appwrite.io/console'; - import { getPlatformInfo } from '$lib/helpers/platform'; + import { + getPlatformInfo, + getPlatformIdentifier, + type AnyPlatform + } from '$lib/helpers/platform'; import { Click, trackEvent } from '$lib/actions/analytics'; import { goto } from '$app/navigation'; import { page } from '$app/state'; @@ -42,11 +45,11 @@ platforms = [] }: { pingCount: number; - platforms: Array; + platforms: Array; } = $props(); const platformMap = $derived.by(() => { - const map = new Map(); + const map = new Map(); platforms.forEach((platform) => { const platformInfo = getPlatformInfo(platform.type); map.set(platformInfo.name, platform); @@ -68,9 +71,9 @@ goto(`${projectRoute}/overview/api-keys/create`, { replaceState: true }); } - function openPlatformWizard(type: Platform, platform?: Models.Platform) { + function openPlatformWizard(type: Platform, platform?: AnyPlatform) { if (platform) { - continuePlatform(type, platform.name, platform.key, platform.type); + continuePlatform(type, platform.name, getPlatformIdentifier(platform), platform.type); } else { trackEvent(Click.PlatformCreateClick, { source: 'onboarding' }); addPlatform(type); diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte index 9be1a22ba..a857b70d4 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte @@ -8,7 +8,6 @@ import CreateWeb from './createWeb.svelte'; import { createPlatform } from './wizard/store'; import { Click, trackEvent } from '$lib/actions/analytics'; - import type { PlatformType } from '@appwrite.io/console'; export enum Platform { Web, @@ -31,11 +30,12 @@ platform: Platform, name: string, key: string, - type: PlatformType + type: string ) { createPlatform.set({ name: name, key: key, + hostname: null, type: type }); @@ -84,10 +84,10 @@ } from '@appwrite.io/pink-icons-svelte'; import type { ComponentType } from 'svelte'; import DualTimeView from '$lib/components/dualTimeView.svelte'; + import type { AnyPlatform } from '$lib/helpers/platform'; import { page } from '$app/state'; import type { PageProps } from './$types'; - import type { Models } from '@appwrite.io/console'; import { type DeleteOperationState, type DeleteOperation, @@ -97,41 +97,32 @@ import { Submit, trackError } from '$lib/actions/analytics'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; + import { getPlatformIdentifier } from '$lib/helpers/platform'; const { data }: PageProps = $props(); const PlatformTypes = { - 'apple-ios': 'iOS', - 'apple-macos': 'macOS', - 'apple-watchos': 'watchOS', - 'apple-tvos': 'tvOS', android: 'Android', - 'flutter-android': 'Android', - 'flutter-ios': 'iOS', - 'flutter-linux': 'Linux', - 'flutter-macos': 'macOS', - 'flutter-windows': 'Windows', - 'flutter-web': 'Web', - 'react-native-android': 'Android', - 'react-native-ios': 'iOS', - web: 'Web' + apple: 'Apple', + web: 'Web', + windows: 'Windows', + linux: 'Linux' } as const; - function getPlatformInfo(platform: string): ComponentType { - if (platform.includes('flutter')) { - return IconFlutter; - } else if (platform.includes('react-native')) { - return IconReact; - } else if (platform.includes('apple')) { - return IconApple; - } else if (platform.includes('android')) { - return IconAndroid; - } else { - return IconCode; + function getPlatformIcon(platform: string): ComponentType { + switch (platform) { + case 'apple': + return IconApple; + case 'android': + return IconAndroid; + case 'web': + return IconCode; + default: + return IconCode; } } - function getPlatformPath(platform: Models.Platform) { + function getPlatformPath(platform: AnyPlatform) { return resolve('/(console)/project-[region]-[project]/overview/platforms/[platform]', { region: page.params.region, project: page.params.project, @@ -143,8 +134,7 @@ batchDelete: DeleteOperation ): Promise { const result = await batchDelete((platformId) => - sdk.forConsole.projects.deletePlatform({ - projectId: page.params.project, + sdk.forProject(page.params.region, page.params.project).project.deletePlatform({ platformId }) ); @@ -187,16 +177,12 @@ - + {PlatformTypes[platform.type]} - {#if platform.type.includes('web') || platform.type === 'web'} - {platform.hostname || '—'} - {:else} - {platform.key || platform.hostname || '—'} - {/if} + {getPlatformIdentifier(platform) || '—'} {#if platform.$updatedAt} diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page.ts b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page.ts index eaec6e7c5..af03d059f 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page.ts @@ -10,8 +10,7 @@ export const load: PageLoad = async ({ params, depends }) => { return { header: Header, breadcrumbs: Breadcrumbs, - platform: await sdk.forConsole.projects.getPlatform({ - projectId: params.project, + platform: await sdk.forProject(params.region, params.project).project.getPlatform({ platformId: params.platform }) }; diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte index 8cd476ec8..019f78a7a 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte @@ -1,16 +1,11 @@ -
+ Package name Your package name is generally the applicationId in your app-level build.gradle file. - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleIOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleIOS.svelte index c21837ba3..9131fdffc 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleIOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleIOS.svelte @@ -10,25 +10,24 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'apple-ios' + type: 'apple' }); addNotification({ type: 'success', @@ -44,7 +43,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -52,13 +51,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte index 4a9917eaf..9131fdffc 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte @@ -10,25 +10,24 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'apple-macos' + type: 'apple' }); addNotification({ type: 'success', @@ -44,7 +43,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -52,13 +51,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte index c4ba10a68..9131fdffc 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte @@ -10,25 +10,24 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store, - hostname: $platform.hostname + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'apple-tvos' + type: 'apple' }); addNotification({ type: 'success', @@ -44,7 +43,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -52,13 +51,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte index 9c3cbfb61..9131fdffc 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte @@ -10,25 +10,24 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'apple-watchos' + type: 'apple' }); addNotification({ type: 'success', @@ -44,7 +43,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -52,13 +51,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/delete.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/delete.svelte index 163cb4ed9..595e872da 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/delete.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/delete.svelte @@ -13,8 +13,7 @@ let error: string; async function handleDelete() { try { - await sdk.forConsole.projects.deletePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.deletePlatform({ platformId: $platform.$id }); await invalidate(Dependencies.PROJECT); diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte index 4b3ad8682..6c04a3e60 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte @@ -10,26 +10,25 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let applicationId: string = null; onMount(() => { - key ??= $platform.key; + applicationId ??= ($platform as Models.PlatformAndroid).applicationId; }); - const updateHostname = async () => { + const updateApplicationId = async () => { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateAndroidPlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + applicationId }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'flutter-android' + type: 'android' }); addNotification({ type: 'success', @@ -45,7 +44,7 @@ }; -
+ Package name Your package name is generally the applicationId in your app-level build.gradle file. @@ -53,13 +52,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte index a2b4fe7ff..9131fdffc 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte @@ -10,25 +10,24 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'flutter-ios' + type: 'apple' }); addNotification({ type: 'success', @@ -44,7 +43,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -52,13 +51,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterLinux.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterLinux.svelte index df6142f86..97679e130 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterLinux.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterLinux.svelte @@ -10,26 +10,25 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let packageName: string = null; onMount(() => { - key ??= $platform.key; + packageName ??= ($platform as Models.PlatformLinux).packageName; }); - async function updateHostname() { + async function updatePackageName() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateLinuxPlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + packageName }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'flutter-linux' + type: 'linux' }); addNotification({ type: 'success', @@ -45,7 +44,7 @@ } -
+ Package name Your application name. @@ -53,13 +52,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte index b6362067c..290e25ebd 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte @@ -10,26 +10,25 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let bundleIdentifier: string = null; onMount(() => { - key ??= $platform.key; + bundleIdentifier ??= ($platform as Models.PlatformApple).bundleIdentifier; }); - async function updateHostname() { + async function updateBundleIdentifier() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateApplePlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + bundleIdentifier }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'flutter-macos' + type: 'apple' }); addNotification({ type: 'success', @@ -45,7 +44,7 @@ } -
+ Bundle ID You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. @@ -53,13 +52,15 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterWindows.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterWindows.svelte index d5370b66f..d025a5b67 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterWindows.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterWindows.svelte @@ -10,26 +10,25 @@ import { project } from '../../../store'; import { platform } from './store'; - let key: string = null; + import type { Models } from '@appwrite.io/console'; + + let packageIdentifierName: string = null; onMount(() => { - key ??= $platform.key; + packageIdentifierName ??= ($platform as Models.PlatformWindows).packageIdentifierName; }); - async function updateHostname() { + async function updatePackageIdentifierName() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateWindowsPlatform({ platformId: $platform.$id, name: $platform.name, - key, - store: $platform.store || undefined, - hostname: $platform.hostname || undefined + packageIdentifierName }); await invalidate(Dependencies.PLATFORM); trackEvent(Submit.PlatformUpdate, { - type: 'flutter-windows' + type: 'windows' }); addNotification({ type: 'success', @@ -45,7 +44,7 @@ } -
+ Package name Your application name. @@ -53,13 +52,16 @@ - +
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/store.ts b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/store.ts index 6ab5cce41..fda85f3a6 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/store.ts +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/store.ts @@ -1,5 +1,5 @@ import { derived } from 'svelte/store'; import { page } from '$app/stores'; -import type { Models } from '@appwrite.io/console'; +import type { AnyPlatform } from '$lib/helpers/platform'; -export const platform = derived(page, ($page) => $page.data.platform as Models.Platform); +export const platform = derived(page, ($page) => $page.data.platform as AnyPlatform); diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/web.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/web.svelte index 70085e42b..4c1b991cd 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/web.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/web.svelte @@ -9,21 +9,19 @@ import { project } from '../../../store'; import { platform } from './store'; import { extendedHostnameRegex } from '$lib/helpers/string'; + import type { Models } from '@appwrite.io/console'; let hostname: string = null; onMount(() => { - hostname ??= $platform.hostname; + hostname ??= ($platform as Models.PlatformWeb).hostname; }); async function updateHostname() { try { - await sdk.forConsole.projects.updatePlatform({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateWebPlatform({ platformId: $platform.$id, name: $platform.name, - key: $platform.key || undefined, - store: $platform.store || undefined, hostname }); await invalidate(Dependencies.PLATFORM); @@ -56,7 +54,8 @@ - + diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte index 87f37b791..1abb85fee 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createAndroid.svelte @@ -23,7 +23,7 @@ import { fade } from 'svelte/transition'; import ConnectionLine from './components/ConnectionLine.svelte'; import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte'; - import { PlatformType } from '@appwrite.io/console'; + import { ID } from '@appwrite.io/console'; import { project } from '../../store'; import { getCorrectTitle, type PlatformProps } from './store'; import LlmBanner from './llmBanner.svelte'; @@ -117,12 +117,13 @@ const val APPWRITE_PUBLIC_ENDPOINT = "${sdk.forProject(page.params.region, page. async function createAndroidPlatform() { try { isCreatingPlatform = true; - await sdk.forConsole.projects.createPlatform({ - projectId, - type: PlatformType.Android, - name: $createPlatform.name, - key: $createPlatform.key || undefined - }); + await sdk + .forProject(page.params.region, page.params.project) + .project.createAndroidPlatform({ + platformId: ID.unique(), + name: $createPlatform.name, + applicationId: $createPlatform.key + }); isPlatformCreated = true; trackEvent(Submit.PlatformCreate, { diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte index 6148712f0..880c449c3 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createApple.svelte @@ -24,13 +24,13 @@ import { fade } from 'svelte/transition'; import ConnectionLine from './components/ConnectionLine.svelte'; import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte'; - import { PlatformType } from '@appwrite.io/console'; + import { ID } from '@appwrite.io/console'; import { app } from '$lib/stores/app'; import { project } from '../../store'; import { getCorrectTitle, type PlatformProps } from './store'; import LlmBanner from './llmBanner.svelte'; - let { isConnectPlatform = false, platform = PlatformType.Appleios }: PlatformProps = $props(); + let { isConnectPlatform = false, platform = 'apple-ios' }: PlatformProps = $props(); let showExitModal = $state(false); let isCreatingPlatform = $state(false); @@ -70,22 +70,23 @@ client.ping() APPWRITE_PROJECT_NAME: "${$project.name}" APPWRITE_PUBLIC_ENDPOINT: "${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}"`; - const platforms: { [key: string]: PlatformType } = { - iOS: PlatformType.Appleios, - macOS: PlatformType.Applemacos, - watchOS: PlatformType.Applewatchos, - tvOS: PlatformType.Appletvos + const platforms: { [key: string]: string } = { + iOS: 'apple-ios', + macOS: 'apple-macos', + watchOS: 'apple-watchos', + tvOS: 'apple-tvos' }; async function createApplePlatform() { try { isCreatingPlatform = true; - await sdk.forConsole.projects.createPlatform({ - projectId, - type: platform, - name: $createPlatform.name, - key: $createPlatform.key || undefined - }); + await sdk + .forProject(page.params.region, page.params.project) + .project.createApplePlatform({ + platformId: ID.unique(), + name: $createPlatform.name, + bundleIdentifier: $createPlatform.key + }); isPlatformCreated = true; trackEvent(Submit.PlatformCreate, { diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index b18cbaf78..3f6542d86 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -24,13 +24,12 @@ import { fade } from 'svelte/transition'; import ConnectionLine from './components/ConnectionLine.svelte'; import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte'; - import { PlatformType } from '@appwrite.io/console'; + import { ID } from '@appwrite.io/console'; import { project } from '../../store'; import { getCorrectTitle, type PlatformProps } from './store'; import LlmBanner from './llmBanner.svelte'; - let { isConnectPlatform = false, platform = PlatformType.Flutterandroid }: PlatformProps = - $props(); + let { isConnectPlatform = false, platform = 'flutter-android' }: PlatformProps = $props(); let showExitModal = $state(false); let isCreatingPlatform = $state(false); @@ -80,54 +79,52 @@ client.ping(); static const String appwritePublicEndpoint = '${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}'; }`; - let platforms: { [key: string]: PlatformType } = { - Android: PlatformType.Flutterandroid, - iOS: PlatformType.Flutterios, - Linux: PlatformType.Flutterlinux, - macOS: PlatformType.Fluttermacos, - Windows: PlatformType.Flutterwindows, - Web: PlatformType.Flutterweb + let platforms: { [key: string]: string } = { + Android: 'flutter-android', + iOS: 'flutter-ios', + Linux: 'flutter-linux', + macOS: 'flutter-macos', + Windows: 'flutter-windows', + Web: 'flutter-web' }; - const placeholder: Partial< - Record< - PlatformType, - { - name: string; - hostname: string; - tooltip: string; - } - > + const placeholder: Record< + string, + { + name: string; + hostname: string; + tooltip: string; + } > = { - [PlatformType.Flutterandroid]: { + 'flutter-android': { name: 'My Android app', hostname: 'com.company.appname', tooltip: 'Your package name is generally the applicationId in your app-level build.gradle file.' }, - [PlatformType.Flutterios]: { + 'flutter-ios': { name: 'My iOS app', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [PlatformType.Flutterlinux]: { + 'flutter-linux': { name: 'My Linux app', hostname: 'appname', tooltip: 'Your application name' }, - [PlatformType.Fluttermacos]: { + 'flutter-macos': { name: 'My mac OS app', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [PlatformType.Flutterwindows]: { + 'flutter-windows': { name: 'My Windows app', hostname: 'appname', tooltip: 'Your application name' }, - [PlatformType.Flutterweb]: { + 'flutter-web': { name: 'My Web app', hostname: 'localhost', tooltip: @@ -135,13 +132,13 @@ client.ping(); } }; - const hostname: Partial> = { - [PlatformType.Flutterandroid]: 'Package name', - [PlatformType.Flutterios]: 'Bundle ID', - [PlatformType.Flutterlinux]: 'Package name', - [PlatformType.Fluttermacos]: 'Bundle ID', - [PlatformType.Flutterweb]: 'Hostname', - [PlatformType.Flutterwindows]: 'Package name' + const hostnameLabel: Record = { + 'flutter-android': 'Package name', + 'flutter-ios': 'Bundle ID', + 'flutter-linux': 'Package name', + 'flutter-macos': 'Bundle ID', + 'flutter-web': 'Hostname', + 'flutter-windows': 'Package name' }; async function fetchFlutterSdkVersion() { @@ -163,19 +160,46 @@ client.ping(); async function createFlutterPlatform() { try { isCreatingPlatform = true; - await sdk.forConsole.projects.createPlatform({ - projectId, - type: platform, - name: $createPlatform.name, - key: - platform === PlatformType.Flutterweb - ? undefined - : $createPlatform.key || undefined, - hostname: - platform === PlatformType.Flutterweb - ? $createPlatform.hostname || undefined - : undefined - }); + const projectSdk = sdk.forProject(page.params.region, page.params.project).project; + const platformId = ID.unique(); + switch (platform) { + case 'flutter-android': + await projectSdk.createAndroidPlatform({ + platformId, + name: $createPlatform.name, + applicationId: $createPlatform.key + }); + break; + case 'flutter-ios': + case 'flutter-macos': + await projectSdk.createApplePlatform({ + platformId, + name: $createPlatform.name, + bundleIdentifier: $createPlatform.key + }); + break; + case 'flutter-linux': + await projectSdk.createLinuxPlatform({ + platformId, + name: $createPlatform.name, + packageName: $createPlatform.key + }); + break; + case 'flutter-windows': + await projectSdk.createWindowsPlatform({ + platformId, + name: $createPlatform.name, + packageIdentifierName: $createPlatform.key + }); + break; + case 'flutter-web': + await projectSdk.createWebPlatform({ + platformId, + name: $createPlatform.name, + hostname: $createPlatform.hostname || undefined + }); + break; + } isPlatformCreated = true; trackEvent(Submit.PlatformCreate, { @@ -255,10 +279,10 @@ client.ping(); bind:value={$createPlatform.name} /> - {#if platform === PlatformType.Flutterweb} + {#if platform === 'flutter-web'} @@ -272,7 +296,7 @@ client.ping(); {:else} diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte index 7a475290b..2490286aa 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createReactNative.svelte @@ -24,13 +24,12 @@ import { fade } from 'svelte/transition'; import ConnectionLine from './components/ConnectionLine.svelte'; import OnboardingPlatformCard from './components/OnboardingPlatformCard.svelte'; - import { PlatformType } from '@appwrite.io/console'; + import { ID } from '@appwrite.io/console'; import { project } from '../../store'; import { getCorrectTitle, type PlatformProps } from './store'; import LlmBanner from './llmBanner.svelte'; - let { isConnectPlatform = false, platform = PlatformType.Reactnativeandroid }: PlatformProps = - $props(); + let { isConnectPlatform = false, platform = 'react-native-android' }: PlatformProps = $props(); let showExitModal = $state(false); let isCreatingPlatform = $state(false); @@ -74,28 +73,26 @@ EXPO_PUBLIC_APPWRITE_ENDPOINT=${sdk.forProject(page.params.region, page.params.p .setEndpoint("${sdk.forProject(page.params.region, page.params.project).client.config.endpoint}") `; - let platforms: { [key: string]: PlatformType } = { - Android: PlatformType.Reactnativeandroid, - iOS: PlatformType.Reactnativeios + let platforms: { [key: string]: string } = { + Android: 'react-native-android', + iOS: 'react-native-ios' }; - const placeholder: Partial< - Record< - PlatformType, - { - name: string; - hostname: string; - tooltip: string; - } - > + const placeholder: Record< + string, + { + name: string; + hostname: string; + tooltip: string; + } > = { - [PlatformType.Reactnativeandroid]: { + 'react-native-android': { name: 'My Android App', hostname: 'com.company.appname', tooltip: 'Your package name is generally the applicationId in your app-level build.gradle file.' }, - [PlatformType.Reactnativeios]: { + 'react-native-ios': { name: 'My iOS App', hostname: 'com.company.appname', tooltip: @@ -103,20 +100,28 @@ EXPO_PUBLIC_APPWRITE_ENDPOINT=${sdk.forProject(page.params.region, page.params.p } }; - const hostname: Partial> = { - [PlatformType.Reactnativeandroid]: 'Package name', - [PlatformType.Reactnativeios]: 'Bundle ID' + const hostnameLabel: Record = { + 'react-native-android': 'Package name', + 'react-native-ios': 'Bundle ID' }; async function createReactNativePlatform() { try { isCreatingPlatform = true; - await sdk.forConsole.projects.createPlatform({ - projectId, - type: platform, - name: $createPlatform.name, - key: $createPlatform.key || undefined - }); + const projectSdk = sdk.forProject(page.params.region, page.params.project).project; + if (platform === 'react-native-android') { + await projectSdk.createAndroidPlatform({ + platformId: ID.unique(), + name: $createPlatform.name, + applicationId: $createPlatform.key + }); + } else { + await projectSdk.createApplePlatform({ + platformId: ID.unique(), + name: $createPlatform.name, + bundleIdentifier: $createPlatform.key + }); + } isPlatformCreated = true; trackEvent(Submit.PlatformCreate, { @@ -197,7 +202,7 @@ EXPO_PUBLIC_APPWRITE_ENDPOINT=${sdk.forProject(page.params.region, page.params.p @@ -284,7 +289,7 @@ EXPO_PUBLIC_APPWRITE_ENDPOINT=${sdk.forProject(page.params.region, page.params.p size="s" code="npm install" /> followed by , then click the Date: Wed, 8 Apr 2026 17:23:01 +0200 Subject: [PATCH 3/4] Fix build failures --- .../settings/BAA.svelte | 3 +- .../settings/BAAEnableModal.svelte | 3 +- .../overview/(components)/create.svelte | 18 +++--- .../overview/(components)/delete.svelte | 3 +- .../overview/(components)/deleteBatch.svelte | 9 +-- .../overview/(components)/keyDetails.svelte | 6 +- .../(components)/updateExpirationDate.svelte | 3 +- .../overview/api-keys/+page.ts | 4 +- .../overview/api-keys/[key]/+page.ts | 3 +- .../settings/migrations/+page.svelte | 50 ++++++++-------- .../settings/migrations/exportModal.svelte | 60 ++++++++++--------- .../settings/updateLabels.svelte | 2 +- 12 files changed, 80 insertions(+), 84 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/settings/BAA.svelte b/src/routes/(console)/organization-[organization]/settings/BAA.svelte index ba349d0c7..71a32f4d2 100644 --- a/src/routes/(console)/organization-[organization]/settings/BAA.svelte +++ b/src/routes/(console)/organization-[organization]/settings/BAA.svelte @@ -152,8 +152,7 @@ try { const result: Models.Addon | Models.PaymentAuthentication = await sdk.forConsole.organizations.createBaaAddon({ - organizationId: $organization.$id, - key: 'baa' + organizationId: $organization.$id }); if ('clientSecret' in result) { diff --git a/src/routes/(console)/organization-[organization]/settings/BAAEnableModal.svelte b/src/routes/(console)/organization-[organization]/settings/BAAEnableModal.svelte index 9fea57a93..36881a73c 100644 --- a/src/routes/(console)/organization-[organization]/settings/BAAEnableModal.svelte +++ b/src/routes/(console)/organization-[organization]/settings/BAAEnableModal.svelte @@ -31,8 +31,7 @@ try { const result: Models.Addon | Models.PaymentAuthentication = await sdk.forConsole.organizations.createBaaAddon({ - organizationId: $organization.$id, - key: 'baa' + organizationId: $organization.$id }); if ('clientSecret' in result) { diff --git a/src/routes/(console)/project-[region]-[project]/overview/(components)/create.svelte b/src/routes/(console)/project-[region]-[project]/overview/(components)/create.svelte index 4cb728f83..ed56fe2d0 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/(components)/create.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/(components)/create.svelte @@ -14,12 +14,10 @@ import { addNotification } from '$lib/stores/notifications'; import { writable } from 'svelte/store'; import Scopes from '../api-keys/scopes.svelte'; - import { type Scopes as ScopesType } from '@appwrite.io/console'; + import { ID, type Scopes as ScopesType } from '@appwrite.io/console'; import { page } from '$app/state'; import { copy } from '$lib/helpers/copy'; - const projectId = page.params.project; - let showExitModal = false; let formComponent: Form; let isSubmitting = writable(false); @@ -30,12 +28,14 @@ async function create() { try { - const { $id, secret } = await sdk.forConsole.projects.createKey({ - projectId, - name, - scopes, - expire: expire || undefined - }); + const { $id, secret } = await sdk + .forProject(page.params.region, page.params.project) + .project.createKey({ + keyId: ID.unique(), + name, + scopes, + expire: expire || undefined + }); if ($onboarding) { await invalidate(Dependencies.PROJECT); diff --git a/src/routes/(console)/project-[region]-[project]/overview/(components)/delete.svelte b/src/routes/(console)/project-[region]-[project]/overview/(components)/delete.svelte index 705551837..e00aebffd 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/(components)/delete.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/(components)/delete.svelte @@ -26,8 +26,7 @@ async function handleDelete() { try { isApiKey - ? await sdk.forConsole.projects.deleteKey({ - projectId, + ? await sdk.forProject(page.params.region, page.params.project).project.deleteKey({ keyId: key.$id }) : await sdk.forConsole.projects.deleteDevKey({ diff --git a/src/routes/(console)/project-[region]-[project]/overview/(components)/deleteBatch.svelte b/src/routes/(console)/project-[region]-[project]/overview/(components)/deleteBatch.svelte index 3a742d94c..34eeefd14 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/(components)/deleteBatch.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/(components)/deleteBatch.svelte @@ -27,10 +27,11 @@ await Promise.all( keyIds.map((key) => isApiKey - ? sdk.forConsole.projects.deleteKey({ - projectId, - keyId: key - }) + ? sdk + .forProject(page.params.region, page.params.project) + .project.deleteKey({ + keyId: key + }) : sdk.forConsole.projects.deleteDevKey({ projectId, keyId: key diff --git a/src/routes/(console)/project-[region]-[project]/overview/(components)/keyDetails.svelte b/src/routes/(console)/project-[region]-[project]/overview/(components)/keyDetails.svelte index da2487f86..6249101d3 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/(components)/keyDetails.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/(components)/keyDetails.svelte @@ -43,8 +43,7 @@ async function updateName() { try { if (isApiKey) { - await sdk.forConsole.projects.updateKey({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateKey({ keyId: key.$id, name, scopes, @@ -76,8 +75,7 @@ async function updateScopes() { try { - await sdk.forConsole.projects.updateKey({ - projectId: $project.$id, + await sdk.forProject($project.region, $project.$id).project.updateKey({ keyId: key.$id, name: key.name, scopes, diff --git a/src/routes/(console)/project-[region]-[project]/overview/(components)/updateExpirationDate.svelte b/src/routes/(console)/project-[region]-[project]/overview/(components)/updateExpirationDate.svelte index d39669a0f..8f2353b67 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/(components)/updateExpirationDate.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/(components)/updateExpirationDate.svelte @@ -28,8 +28,7 @@ async function updateExpire() { try { if (isApiKey) { - await sdk.forConsole.projects.updateKey({ - projectId, + await sdk.forProject(page.params.region, page.params.project).project.updateKey({ keyId: key.$id, name: key.name, scopes: (key as Models.Key).scopes as Scopes[], diff --git a/src/routes/(console)/project-[region]-[project]/overview/api-keys/+page.ts b/src/routes/(console)/project-[region]-[project]/overview/api-keys/+page.ts index 36fa8bbf5..7628733e6 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/api-keys/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/overview/api-keys/+page.ts @@ -5,8 +5,6 @@ import type { PageLoad } from './$types'; export const load: PageLoad = async ({ params, depends }) => { depends(Dependencies.KEYS); return { - keys: await sdk.forConsole.projects.listKeys({ - projectId: params.project - }) + keys: await sdk.forProject(params.region, params.project).project.listKeys() }; }; diff --git a/src/routes/(console)/project-[region]-[project]/overview/api-keys/[key]/+page.ts b/src/routes/(console)/project-[region]-[project]/overview/api-keys/[key]/+page.ts index 84421d00e..1e11cf7da 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/api-keys/[key]/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/overview/api-keys/[key]/+page.ts @@ -7,8 +7,7 @@ import type { PageLoad } from './$types'; export const load: PageLoad = async ({ params, depends }) => { depends(Dependencies.KEY); - const key = await sdk.forConsole.projects.getKey({ - projectId: params.project, + const key = await sdk.forProject(params.region, params.project).project.getKey({ keyId: params.key }); if (key.expire) { 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 30c1c2248..7bed364e6 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/+page.svelte @@ -14,7 +14,7 @@ import Details from './details.svelte'; import ExportModal from './exportModal.svelte'; import { readOnly } from '$lib/stores/billing'; - import { Scopes, type Models } from '@appwrite.io/console'; + import { ID, Scopes, type Models } from '@appwrite.io/console'; import { canWriteProjects } from '$lib/stores/roles'; import { IconCloud, @@ -86,29 +86,31 @@ const deployToCloud = async () => { const currEndpoint = getCurrentEndpoint(); // Create API key - const { secret } = await sdk.forConsole.projects.createKey({ - projectId: $project.$id, - name: `[AUTO-GENERATED] Migration ${new Date().toISOString()}`, - scopes: [ - Scopes.UsersRead, - Scopes.TeamsRead, - Scopes.DatabasesRead, - Scopes.CollectionsRead /* legacy */, - Scopes.AttributesRead /* legacy */, - Scopes.IndexesRead, - Scopes.DocumentsRead /* legacy */, - Scopes.TablesRead, - Scopes.ColumnsRead, - Scopes.RowsRead, - Scopes.FilesRead, - Scopes.BucketsRead, - Scopes.FunctionsRead, - Scopes.ExecutionRead, - Scopes.LocaleRead, - Scopes.AvatarsRead, - Scopes.HealthRead - ] - }); + const { secret } = await sdk + .forProject(page.params.region, page.params.project) + .project.createKey({ + keyId: ID.unique(), + name: `[AUTO-GENERATED] Migration ${new Date().toISOString()}`, + scopes: [ + Scopes.UsersRead, + Scopes.TeamsRead, + Scopes.DatabasesRead, + Scopes.CollectionsRead /* legacy */, + Scopes.AttributesRead /* legacy */, + Scopes.IndexesRead, + Scopes.DocumentsRead /* legacy */, + Scopes.TablesRead, + Scopes.ColumnsRead, + Scopes.RowsRead, + Scopes.FilesRead, + Scopes.BucketsRead, + Scopes.FunctionsRead, + Scopes.ExecutionRead, + Scopes.LocaleRead, + Scopes.AvatarsRead, + Scopes.HealthRead + ] + }); const migrationData = { endpoint: currEndpoint, diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/exportModal.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/exportModal.svelte index 9b9337f5a..d2e717718 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/exportModal.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/exportModal.svelte @@ -10,7 +10,7 @@ import { sdk } from '$lib/stores/sdk'; import { user } from '$lib/stores/user'; import { organization } from '$lib/stores/organization'; - import { Scopes } from '@appwrite.io/console'; + import { ID, Scopes } from '@appwrite.io/console'; export let show = false; @@ -88,34 +88,36 @@ const currEndpoint = getCurrentEndpoint(); // Create API key - const { secret } = await sdk.forConsole.projects.createKey({ - projectId: $project.$id, - name: `[AUTO-GENERATED] Migration ${new Date().toISOString()}`, - scopes: [ - Scopes.UsersRead, - Scopes.TeamsRead, - Scopes.DatabasesRead, - Scopes.CollectionsRead /* legacy */, - Scopes.AttributesRead /* legacy */, - Scopes.IndexesRead, - Scopes.DocumentsRead /* legacy */, - Scopes.TablesRead, - Scopes.ColumnsRead, - Scopes.RowsRead, - Scopes.FilesRead, - Scopes.BucketsRead, - Scopes.FunctionsRead, - Scopes.ExecutionRead, - Scopes.SitesRead, - Scopes.ProvidersRead, - Scopes.TopicsRead, - Scopes.SubscribersRead, - Scopes.MessagesRead, - Scopes.LocaleRead, - Scopes.AvatarsRead, - Scopes.HealthRead - ] - }); + const { secret } = await sdk + .forProject(page.params.region, page.params.project) + .project.createKey({ + keyId: ID.unique(), + name: `[AUTO-GENERATED] Migration ${new Date().toISOString()}`, + scopes: [ + Scopes.UsersRead, + Scopes.TeamsRead, + Scopes.DatabasesRead, + Scopes.CollectionsRead /* legacy */, + Scopes.AttributesRead /* legacy */, + Scopes.IndexesRead, + Scopes.DocumentsRead /* legacy */, + Scopes.TablesRead, + Scopes.ColumnsRead, + Scopes.RowsRead, + Scopes.FilesRead, + Scopes.BucketsRead, + Scopes.FunctionsRead, + Scopes.ExecutionRead, + Scopes.SitesRead, + Scopes.ProvidersRead, + Scopes.TopicsRead, + Scopes.SubscribersRead, + Scopes.MessagesRead, + Scopes.LocaleRead, + Scopes.AvatarsRead, + Scopes.HealthRead + ] + }); const migrationData = { endpoint: currEndpoint, diff --git a/src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte b/src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte index 21d324ec4..4bf47732c 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/updateLabels.svelte @@ -23,7 +23,7 @@ async function updateLabels() { try { - await sdk.forConsole.projects.updateLabels({ projectId: $project.$id, labels }); + await sdk.forProject($project.region, $project.$id).project.updateLabels({ labels }); await invalidate(Dependencies.PROJECT); isDisabled = true; addNotification({ From e66d1a42f77aa96cdfa4ab556df81981989db972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Wed, 8 Apr 2026 17:28:33 +0200 Subject: [PATCH 4/4] AI review fixes --- .../overview/platforms/+page.svelte | 7 +- .../+page@project-[region]-[project].svelte | 2 + .../platforms/[platform]/appleMacOS.svelte | 65 ------------------ .../platforms/[platform]/appleTvOS.svelte | 65 ------------------ .../platforms/[platform]/appleWatchOS.svelte | 65 ------------------ .../[platform]/flutterAndroid.svelte | 66 ------------------- .../platforms/[platform]/flutterIOS.svelte | 65 ------------------ .../platforms/[platform]/flutterMacOS.svelte | 66 ------------------- .../overview/platforms/createFlutter.svelte | 2 + 9 files changed, 10 insertions(+), 393 deletions(-) delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte delete mode 100644 src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte index a857b70d4..4abffc8ae 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/+page.svelte @@ -79,7 +79,9 @@ IconAndroid, IconApple, IconCode, + IconDesktopComputer, IconFlutter, + IconLinux, IconReact } from '@appwrite.io/pink-icons-svelte'; import type { ComponentType } from 'svelte'; @@ -115,8 +117,11 @@ return IconApple; case 'android': return IconAndroid; + case 'linux': + return IconLinux; + case 'windows': + return IconDesktopComputer; case 'web': - return IconCode; default: return IconCode; } diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte index 019f78a7a..3c90272e1 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/+page@project-[region]-[project].svelte @@ -74,6 +74,8 @@ packageName: ($platform as Models.PlatformLinux).packageName }); break; + default: + throw new Error(`Unknown platform type: ${$platform.type}`); } await invalidate(Dependencies.PLATFORM); addNotification({ diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte deleted file mode 100644 index 9131fdffc..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - -
- - Bundle ID - You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte deleted file mode 100644 index 9131fdffc..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - -
- - Bundle ID - You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte deleted file mode 100644 index 9131fdffc..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - -
- - Bundle ID - You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte deleted file mode 100644 index 6c04a3e60..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -
- - Package name - Your package name is generally the applicationId in your app-level build.gradle file. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte deleted file mode 100644 index 9131fdffc..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte +++ /dev/null @@ -1,65 +0,0 @@ - - -
- - Bundle ID - You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte deleted file mode 100644 index 290e25ebd..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -
- - Bundle ID - You can find your Bundle Identifier in the General tab for your app's primary target in Xcode. - - - - - - - - -
diff --git a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte index 3f6542d86..dfb15ba6b 100644 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte +++ b/src/routes/(console)/project-[region]-[project]/overview/platforms/createFlutter.svelte @@ -199,6 +199,8 @@ client.ping(); hostname: $createPlatform.hostname || undefined }); break; + default: + throw new Error(`Unknown platform type: ${platform}`); } isPlatformCreated = true;