diff --git a/bun.lock b/bun.lock index 63b5c9217..d4af51c05 100644 --- a/bun.lock +++ b/bun.lock @@ -1,12 +1,11 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "@appwrite/console", "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", @@ -25,6 +24,7 @@ "deep-equal": "^2.2.3", "echarts": "^5.6.0", "flatted": "^3.4.2", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", "ignore": "^6.0.2", "nanoid": "^5.1.7", "nanotar": "^0.3.0", @@ -113,7 +113,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@24e07fc", { "dependencies": { "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@67539a6", { "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 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)/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]/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..4abffc8ae 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 }); @@ -79,15 +79,17 @@ IconAndroid, IconApple, IconCode, + IconDesktopComputer, IconFlutter, + IconLinux, IconReact } 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 +99,35 @@ 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 'linux': + return IconLinux; + case 'windows': + return IconDesktopComputer; + case 'web': + 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 +139,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 +182,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..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 @@ -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 deleted file mode 100644 index 4a9917eaf..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleMacOS.svelte +++ /dev/null @@ -1,64 +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 c4ba10a68..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleTvOS.svelte +++ /dev/null @@ -1,64 +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 9c3cbfb61..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/appleWatchOS.svelte +++ /dev/null @@ -1,64 +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]/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 deleted file mode 100644 index 4b3ad8682..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterAndroid.svelte +++ /dev/null @@ -1,65 +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 a2b4fe7ff..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterIOS.svelte +++ /dev/null @@ -1,64 +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]/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 deleted file mode 100644 index b6362067c..000000000 --- a/src/routes/(console)/project-[region]-[project]/overview/platforms/[platform]/flutterMacOS.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]/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..dfb15ba6b 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,48 @@ 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; + default: + throw new Error(`Unknown platform type: ${platform}`); + } isPlatformCreated = true; trackEvent(Submit.PlatformCreate, { @@ -255,10 +281,10 @@ client.ping(); bind:value={$createPlatform.name} /> - {#if platform === PlatformType.Flutterweb} + {#if platform === 'flutter-web'} @@ -272,7 +298,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