diff --git a/package.json b/package.json index b6069da58f..059aaee069 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "e2e:ui": "playwright test tests/e2e --ui" }, "dependencies": { - "@appwrite.io/console": "1.5.2", + "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641", "@appwrite.io/pink": "0.25.0", "@appwrite.io/pink-icons": "0.25.0", "@popperjs/core": "^2.11.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc75b7bce2..8601156a95 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.22 version: 1.1.22(svelte@4.2.19)(zod@3.24.2) '@appwrite.io/console': - specifier: 1.5.2 - version: 1.5.2 + specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641 + version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641 '@appwrite.io/pink': specifier: 0.25.0 version: 0.25.0 @@ -230,8 +230,9 @@ packages: '@analytics/type-utils@0.6.2': resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==} - '@appwrite.io/console@1.5.2': - resolution: {integrity: sha512-9nNZzxoQcpm5C5pKlGJLWxsEJ4sr5mdt01Hg6M8QpfMtsRe0gjaPa7WGrGBepRnZVKPDNpozh3Hua7nqgx4aEA==} + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641': + resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641} + version: 1.4.1 '@appwrite.io/pink-icons@0.25.0': resolution: {integrity: sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q==} @@ -3796,7 +3797,7 @@ snapshots: '@analytics/type-utils@0.6.2': {} - '@appwrite.io/console@1.5.2': {} + '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@1641': {} '@appwrite.io/pink-icons@0.25.0': {} diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 260cffe519..0b7ba43027 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -252,6 +252,10 @@ export enum Submit { KeyUpdateName = 'submit_key_update_name', KeyUpdateScopes = 'submit_key_update_scopes', KeyUpdateExpire = 'submit_key_update_expire', + DevKeyCreate = 'submit_dev_key_create', + DevKeyDelete = 'submit_dev_key_delete', + DevKeyUpdateName = 'submit_dev_key_update_name', + DevKeyUpdateExpire = 'submit_dev_key_update_expire', PlatformCreate = 'submit_platform_create', PlatformDelete = 'submit_platform_delete', PlatformUpdate = 'submit_platform_update', diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 00ee09df31..b089e8b8ed 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -46,6 +46,8 @@ export enum Dependencies { PLATFORMS = 'dependency:platforms', KEY = 'dependency:key', KEYS = 'dependency:keys', + DEV_KEY = 'dependency:dev_key', + DEV_KEYS = 'dependency:dev_keys', DOMAINS = 'dependency:domains', WEBHOOK = 'dependency:webhook', WEBHOOKS = 'dependency:webhooks', diff --git a/src/routes/(console)/project-[project]/overview/+layout.svelte b/src/routes/(console)/project-[project]/overview/+layout.svelte index d0f59d1fc0..6fbf04ccde 100644 --- a/src/routes/(console)/project-[project]/overview/+layout.svelte +++ b/src/routes/(console)/project-[project]/overview/+layout.svelte @@ -27,6 +27,7 @@ import type { Metric } from '$lib/sdk/usage'; import { periodToDates } from '$lib/layout/usage.svelte'; import { canWriteProjects } from '$lib/stores/roles'; + import { createDevKey } from '$routes/(console)/project-[project]/overview/dev-keys/+page.svelte'; $: projectId = $page.params.project; $: path = `${base}/project-${projectId}/overview`; @@ -69,6 +70,16 @@ keys: ['c', 'k'], group: 'integrations', disabled: !$canWriteProjects + }, + { + label: 'Create Dev Key', + icon: 'plus', + callback() { + createDevKey(); + }, + keys: ['c', 'd', 'k'], + group: 'integrations', + disabled: !$canWriteProjects } ]); @@ -227,6 +238,10 @@ href={`${path}/keys`} selected={$page.url.pathname === `${path}/keys`} event="keys">API keys + Dev keys diff --git a/src/routes/(console)/project-[project]/overview/keys/checkbox.svelte b/src/routes/(console)/project-[project]/overview/components/checkbox.svelte similarity index 100% rename from src/routes/(console)/project-[project]/overview/keys/checkbox.svelte rename to src/routes/(console)/project-[project]/overview/components/checkbox.svelte diff --git a/src/routes/(console)/project-[project]/overview/components/delete.svelte b/src/routes/(console)/project-[project]/overview/components/delete.svelte new file mode 100644 index 0000000000..3070197598 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/components/delete.svelte @@ -0,0 +1,66 @@ + + + +

The {resourceType} key will be permanently deleted. This action is irreversible.

+ + + + + +
diff --git a/src/routes/(console)/project-[project]/overview/keys/expirationInput.svelte b/src/routes/(console)/project-[project]/overview/components/expirationInput.svelte similarity index 80% rename from src/routes/(console)/project-[project]/overview/keys/expirationInput.svelte rename to src/routes/(console)/project-[project]/overview/components/expirationInput.svelte index 843cc9f3d4..bd60a1b431 100644 --- a/src/routes/(console)/project-[project]/overview/keys/expirationInput.svelte +++ b/src/routes/(console)/project-[project]/overview/components/expirationInput.svelte @@ -19,7 +19,7 @@ return date.toISOString(); } - const options = [ + const defaultOptions = [ { label: 'Never', value: null @@ -46,10 +46,30 @@ } ]; + const limitedOptions = [ + { + label: '1 Day', + value: incrementToday(1, 'day') + }, + { + label: '7 Days', + value: incrementToday(7, 'day') + }, + { + label: '30 days', + value: incrementToday(30, 'day') + } + ]; + export let value: string | null = null; + export let resourceType: 'API' | 'Dev' = 'API'; + + const options = resourceType === 'API' ? defaultOptions : limitedOptions; function initExpirationSelect() { - if (value === null || !isValidDate(value)) return null; + if (value === null || !isValidDate(value)) { + return options[0]?.value ?? null; + } let result = 'custom'; for (const option of options) { diff --git a/src/routes/(console)/project-[project]/overview/components/updateExpirationDate.svelte b/src/routes/(console)/project-[project]/overview/components/updateExpirationDate.svelte new file mode 100644 index 0000000000..0a14b1f124 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/components/updateExpirationDate.svelte @@ -0,0 +1,48 @@ + + +
+ + Expiration date +

Set a date after which your {resourceType} key will expire.

+ + {#if isExpired} + (alertsDismissed = true)}> + Your {resourceType} key has expired +

+ For security reasons, we recommend you delete your expired key and create a + new one. +

+
+ {:else if isExpiring} + (alertsDismissed = true)}> + Your {resourceType} key is about to expire +

Update the expiration date to keep the key active

+
+ {/if} + + + +
+ + + + +
+
diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/+page.svelte b/src/routes/(console)/project-[project]/overview/dev-keys/+page.svelte new file mode 100644 index 0000000000..54699cfa65 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/+page.svelte @@ -0,0 +1,74 @@ + + + + +
+ Dev keys + {#if $canWriteKeys} + + + + {/if} +
+ +{#if data.devKeys.total} + + + Name + last accessed + expiration date + + + {#each data.devKeys.keys as key} + + + {key.name} + + + {key.accessedAt ? toLocaleDate(key.accessedAt) : 'never'} + + + {key.expire ? toLocaleDateTime(key.expire) : 'never'} + + + {/each} + +
+{:else} + + +{/if} diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/+page.ts b/src/routes/(console)/project-[project]/overview/dev-keys/+page.ts new file mode 100644 index 0000000000..5f7e3e6238 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/+page.ts @@ -0,0 +1,13 @@ +import { Dependencies } from '$lib/constants'; +import { sdk } from '$lib/stores/sdk'; +import { selectedTab } from '../store'; +import type { PageLoad } from './$types'; + +selectedTab.set('dev-keys'); + +export const load: PageLoad = async ({ params, depends }) => { + depends(Dependencies.DEV_KEYS); + return { + devKeys: await sdk.forConsole.projects.listDevKeys(params.project) + }; +}; diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page.ts b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page.ts new file mode 100644 index 0000000000..b47b352d06 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page.ts @@ -0,0 +1,23 @@ +import Header from './header.svelte'; +import Breadcrumbs from './breadcrumbs.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ params, depends }) => { + depends(Dependencies.DEV_KEY); + + const devKey = await sdk.forConsole.projects.getDevKey(params.project, params.key); + + if (devKey.expire) { + devKey.expire = new Date(devKey.expire).toISOString().slice(0, 23); + } else { + devKey.expire = undefined; + } + + return { + devKey, + header: Header, + breadcrumbs: Breadcrumbs + }; +}; diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page@project-[project].svelte b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page@project-[project].svelte new file mode 100644 index 0000000000..1ae5a0ba0b --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/+page@project-[project].svelte @@ -0,0 +1,142 @@ + + + + Dev key - Appwrite + + + + {@const accessedAt = $devKey.accessedAt ? toLocaleDate($devKey.accessedAt) : 'never'} + +
+ {$devKey.name} +
+ +

+ Last accessed: {accessedAt}
+

+
+
+ + + Dev key secret + + + + + +
+ + Name +

Choose any name that will help you distinguish between Dev keys.

+ + + + + + + + + +
+
+ + + + +
+ Delete Dev key +
+

The Dev key will be permanently deleted. This action is irreversible.

+ + +
+
+
{$devKey.name}
+

Last accessed: {accessedAt}

+
+
+
+
+ + + + +
+
+ + diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/[key]/breadcrumbs.svelte b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/breadcrumbs.svelte new file mode 100644 index 0000000000..a1a2f9f7c6 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/breadcrumbs.svelte @@ -0,0 +1,28 @@ + + + diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/[key]/header.svelte b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/header.svelte new file mode 100644 index 0000000000..54e1f51c56 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/header.svelte @@ -0,0 +1,18 @@ + + + + + + {$devKey?.name} + + Dev key secret + + diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/[key]/store.ts b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/store.ts new file mode 100644 index 0000000000..c2da2a1610 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/[key]/store.ts @@ -0,0 +1,5 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Models } from '@appwrite.io/console'; + +export const devKey = derived(page, ($page) => $page.data.devKey as Models.DevKey); diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/wizard.svelte b/src/routes/(console)/project-[project]/overview/dev-keys/wizard.svelte new file mode 100644 index 0000000000..fb23bb50a4 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/wizard.svelte @@ -0,0 +1,48 @@ + + + diff --git a/src/routes/(console)/project-[project]/overview/dev-keys/wizard/step1.svelte b/src/routes/(console)/project-[project]/overview/dev-keys/wizard/step1.svelte new file mode 100644 index 0000000000..5c631ab577 --- /dev/null +++ b/src/routes/(console)/project-[project]/overview/dev-keys/wizard/step1.svelte @@ -0,0 +1,22 @@ + + + + Dev key + + Test your app without rate limits and more detailed error messages. + + + + + + diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/+page.ts b/src/routes/(console)/project-[project]/overview/keys/[key]/+page.ts index e235ed2d60..3b8b7b0b57 100644 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/+page.ts +++ b/src/routes/(console)/project-[project]/overview/keys/[key]/+page.ts @@ -7,16 +7,16 @@ import type { PageLoad } from './$types'; export const load: PageLoad = async ({ params, depends }) => { depends(Dependencies.KEY); - const key = await sdk.forConsole.projects.getKey(params.project, params.key); - if (key.expire) { - key.expire = new Date(key.expire).toISOString().slice(0, 23); + const apiKey = await sdk.forConsole.projects.getKey(params.project, params.key); + if (apiKey.expire) { + apiKey.expire = new Date(apiKey.expire).toISOString().slice(0, 23); } else { - key.expire = undefined; + apiKey.expire = undefined; } return { + apiKey, header: Header, - breadcrumbs: Breadcrumbs, - key + breadcrumbs: Breadcrumbs }; }; diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/+page@project-[project].svelte b/src/routes/(console)/project-[project]/overview/keys/[key]/+page@project-[project].svelte index bbf1c1b6e0..820141f486 100644 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/+page@project-[project].svelte +++ b/src/routes/(console)/project-[project]/overview/keys/[key]/+page@project-[project].svelte @@ -12,9 +12,9 @@ import { onMount } from 'svelte'; import { project } from '../../../store'; import Scopes from '../scopes.svelte'; - import Delete from './delete.svelte'; - import { key } from './store'; - import UpdateExpirationDate from './updateExpirationDate.svelte'; + import { apiKey } from './store'; + import Delete from '../../components/delete.svelte'; + import UpdateExpirationDate from '../../components/updateExpirationDate.svelte'; let showDelete = false; let name: string = null; @@ -22,19 +22,43 @@ let scopes: string[] = null; onMount(() => { - name ??= $key.name; - secret ??= $key.secret; - scopes ??= $key.scopes; + name ??= $apiKey.name; + secret ??= $apiKey.secret; + scopes ??= $apiKey.scopes; }); + async function updateExpire() { + try { + await sdk.forConsole.projects.updateKey( + $project.$id, + $apiKey.$id, + $apiKey.name, + $apiKey.scopes, + $apiKey.expire + ); + await invalidate(Dependencies.KEY); + trackEvent(Submit.KeyUpdateExpire); + addNotification({ + type: 'success', + message: 'API key expiration has been updated' + }); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + trackError(error, Submit.KeyUpdateExpire); + } + } + async function updateName() { try { await sdk.forConsole.projects.updateKey( $project.$id, - $key.$id, + $apiKey.$id, name, - $key.scopes, - $key.expire + $apiKey.scopes, + $apiKey.expire ); await invalidate(Dependencies.KEY); trackEvent(Submit.KeyUpdateName); @@ -55,10 +79,10 @@ try { await sdk.forConsole.projects.updateKey( $project.$id, - $key.$id, - $key.name, + $apiKey.$id, + $apiKey.name, scopes, - $key.expire + $apiKey.expire ); await invalidate(Dependencies.KEY); trackEvent(Submit.KeyUpdateScopes, { @@ -83,15 +107,15 @@ - {@const accessedAt = $key.accessedAt ? toLocaleDate($key.accessedAt) : 'never'} + {@const accessedAt = $apiKey.accessedAt ? toLocaleDate($apiKey.accessedAt) : 'never'}
- {$key.name} + {$apiKey.name}

Last accessed: {accessedAt}
- Scopes granted: {$key.scopes.length} + Scopes granted: {$apiKey.scopes.length}

@@ -119,7 +143,7 @@ - + @@ -140,13 +164,13 @@ + $apiKey?.scopes && + !symmetricDifference(scopes, $apiKey.scopes).length}>Update - +
@@ -157,7 +181,7 @@
-
{$key.name}
+
{$apiKey.name}

Last accessed: {accessedAt}

@@ -170,4 +194,4 @@ - + diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/breadcrumbs.svelte b/src/routes/(console)/project-[project]/overview/keys/[key]/breadcrumbs.svelte index 426594191e..7971aeb78a 100644 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/breadcrumbs.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/[key]/breadcrumbs.svelte @@ -3,7 +3,7 @@ import { Breadcrumbs } from '$lib/layout'; import { organization } from '$lib/stores/organization'; import { project } from '../../../store'; - import { key } from './store'; + import { apiKey } from './store'; $: breadcrumbs = [ { @@ -19,8 +19,8 @@ title: 'API keys' }, { - href: `${base}/project-${$project?.$id}/overview/keys/${$key?.$id}`, - title: $key?.name + href: `${base}/project-${$project?.$id}/overview/keys/${$apiKey?.$id}`, + title: $apiKey?.name } ]; diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/delete.svelte b/src/routes/(console)/project-[project]/overview/keys/[key]/delete.svelte deleted file mode 100644 index cbf3d0b7da..0000000000 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/delete.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - - -

The API key will be permanently deleted. This action is irreversible.

- - - - - -
diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/header.svelte b/src/routes/(console)/project-[project]/overview/keys/[key]/header.svelte index 09259d5588..9e28e510c7 100644 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/header.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/[key]/header.svelte @@ -3,7 +3,7 @@ import { page } from '$app/stores'; import { Id } from '$lib/components'; import { Cover, CoverTitle } from '$lib/layout'; - import { key } from './store'; + import { apiKey } from './store'; const projectId = $page.params.project; @@ -11,8 +11,8 @@ - {$key?.name} + {$apiKey?.name} - API key secret + API key secret diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/store.ts b/src/routes/(console)/project-[project]/overview/keys/[key]/store.ts index dc984c86ca..bfdff943cc 100644 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/store.ts +++ b/src/routes/(console)/project-[project]/overview/keys/[key]/store.ts @@ -2,4 +2,4 @@ import { derived } from 'svelte/store'; import { page } from '$app/stores'; import type { Models } from '@appwrite.io/console'; -export const key = derived(page, ($page) => $page.data.key as Models.Key); +export const apiKey = derived(page, ($page) => $page.data.apiKey as Models.Key); diff --git a/src/routes/(console)/project-[project]/overview/keys/[key]/updateExpirationDate.svelte b/src/routes/(console)/project-[project]/overview/keys/[key]/updateExpirationDate.svelte deleted file mode 100644 index 2a819a37aa..0000000000 --- a/src/routes/(console)/project-[project]/overview/keys/[key]/updateExpirationDate.svelte +++ /dev/null @@ -1,74 +0,0 @@ - - -
- - Expiration date -

Set a date after which your API key will expire.

- - {#if isExpired} - (alertsDismissed = true)}> - Your API key has expired -

- For security reasons, we recommend you delete your expired key and create a - new one. -

-
- {:else if isExpiring} - (alertsDismissed = true)}> - Your API key is about to expire -

Update the expiration date to keep the key active

-
- {/if} - - - -
- - - - -
-
diff --git a/src/routes/(console)/project-[project]/overview/keys/scopes.svelte b/src/routes/(console)/project-[project]/overview/keys/scopes.svelte index 946de6153a..31b7ff9839 100644 --- a/src/routes/(console)/project-[project]/overview/keys/scopes.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/scopes.svelte @@ -4,7 +4,7 @@ import { scopes as allScopes } from '$lib/constants'; import { onMount } from 'svelte'; import { symmetricDifference } from '$lib/helpers/array'; - import Checkbox from './checkbox.svelte'; + import Checkbox from '../components/checkbox.svelte'; export let scopes: string[]; @@ -96,7 +96,7 @@ onCategoryChange(e, category)} /> diff --git a/src/routes/(console)/project-[project]/overview/keys/wizard.svelte b/src/routes/(console)/project-[project]/overview/keys/wizard.svelte index e6c6701fae..badb10c303 100644 --- a/src/routes/(console)/project-[project]/overview/keys/wizard.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/wizard.svelte @@ -4,7 +4,7 @@ import type { WizardStepsType } from '$lib/layout/wizard.svelte'; import Step1 from './wizard/step1.svelte'; import Step2 from './wizard/step2.svelte'; - import { key } from './wizard/store'; + import { apiKey } from '../store'; import { sdk } from '$lib/stores/sdk'; import { page } from '$app/stores'; import { addNotification } from '$lib/stores/notifications'; @@ -18,15 +18,15 @@ try { const { $id } = await sdk.forConsole.projects.createKey( $page.params.project, - $key.name, - $key.scopes, - $key.expire || undefined + $apiKey.name, + $apiKey.scopes, + $apiKey.expire || undefined ); if ($onboarding) { await invalidate(Dependencies.PROJECT); } trackEvent(Submit.KeyCreate, { - scopes: $key.scopes + scopes: $apiKey.scopes }); goto(`${base}/project-${$page.params.project}/overview/keys/${$id}`); } catch (error) { @@ -39,7 +39,7 @@ } onDestroy(() => { - key.reset(); + apiKey.reset(); }); const stepsComponents: WizardStepsType = new Map(); diff --git a/src/routes/(console)/project-[project]/overview/keys/wizard/step1.svelte b/src/routes/(console)/project-[project]/overview/keys/wizard/step1.svelte index cb53ed0346..8b1c3019c0 100644 --- a/src/routes/(console)/project-[project]/overview/keys/wizard/step1.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/wizard/step1.svelte @@ -1,8 +1,8 @@ @@ -14,7 +14,7 @@ label="Name" placeholder="API key name" required - bind:value={$key.name} /> - + bind:value={$apiKey.name} /> + diff --git a/src/routes/(console)/project-[project]/overview/keys/wizard/step2.svelte b/src/routes/(console)/project-[project]/overview/keys/wizard/step2.svelte index 383a8d4262..ada219a88b 100644 --- a/src/routes/(console)/project-[project]/overview/keys/wizard/step2.svelte +++ b/src/routes/(console)/project-[project]/overview/keys/wizard/step2.svelte @@ -1,8 +1,8 @@ @@ -12,6 +12,6 @@ the permissions you need to meet your project goals. - + diff --git a/src/routes/(console)/project-[project]/overview/keys/wizard/store.ts b/src/routes/(console)/project-[project]/overview/keys/wizard/store.ts deleted file mode 100644 index 49f23c0e91..0000000000 --- a/src/routes/(console)/project-[project]/overview/keys/wizard/store.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { writable } from 'svelte/store'; -import type { Models } from '@appwrite.io/console'; - -function createKeyStore() { - const { subscribe, update, set } = writable>({ - name: null, - expire: null, - scopes: [] - }); - - return { - subscribe, - update, - set, - reset() { - set({ - name: null, - expire: null, - scopes: [] - }); - } - }; -} - -export const key = createKeyStore(); diff --git a/src/routes/(console)/project-[project]/overview/onboard.svelte b/src/routes/(console)/project-[project]/overview/onboard.svelte index 677258ccc6..6ac8cea3d9 100644 --- a/src/routes/(console)/project-[project]/overview/onboard.svelte +++ b/src/routes/(console)/project-[project]/overview/onboard.svelte @@ -10,9 +10,11 @@ import OnboardLight2Mobile from './onboard-2-light-mobile.svg'; import { app } from '$lib/stores/app'; import { wizard } from '$lib/stores/wizard'; - import Wizard from './keys/wizard.svelte'; + import ApiKeyWizard from './keys/wizard.svelte'; + import DevKeyWizard from './dev-keys/wizard.svelte'; import { canWriteKeys, canWritePlatforms } from '$lib/stores/roles'; import { base } from '$app/paths'; + import { keyType } from './store'; export let projectId: string; @@ -44,8 +46,9 @@ } ]; - function createKey() { - wizard.start(Wizard); + function createKey(isDev: boolean = false) { + keyType.set(!isDev ? 'api' : 'dev'); + wizard.start(!isDev ? ApiKeyWizard : DevKeyWizard); } $: onBoardImage1Mobile = $app.themeInUse === 'dark' ? OnboardDark1Mobile : OnboardLight1Mobile; @@ -121,7 +124,7 @@ +
  • + +
  • = writable('platforms'); +export const keyType: Writable<'api' | 'dev'> = writable('api'); + +export const selectedTab: Writable<'platforms' | 'keys' | 'dev-keys'> = writable('platforms'); + +function createKeyStore(isDevKey = false) { + const { subscribe, update, set } = writable>({ + name: null, + expire: null, + ...(isDevKey ? {} : { scopes: [] }) + }); + + return { + subscribe, + update, + set, + reset() { + set({ + name: null, + expire: null, + ...(isDevKey ? {} : { scopes: [] }) + }); + } + }; +} + +export const apiKey = createKeyStore(); + +export const devKey = createKeyStore(true);