diff --git a/package.json b/package.json
index f6ed453a6..c3c00c4cb 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
- "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13",
+ "@appwrite.io/console": "https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6",
"@appwrite.io/pink": "0.25.0",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@d68e5e4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 04c8b909d..48b370384 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,8 +12,8 @@ importers:
specifier: ^1.1.24
version: 1.1.24(svelte@5.25.3)(zod@3.24.3)
'@appwrite.io/console':
- specifier: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13
- version: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13
+ specifier: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6
+ version: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6
'@appwrite.io/pink':
specifier: 0.25.0
version: 0.25.0
@@ -254,8 +254,8 @@ packages:
'@analytics/type-utils@0.6.2':
resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==}
- '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13':
- resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13}
+ '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6':
+ resolution: {tarball: https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6}
version: 1.2.1
'@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@d68e5e4':
@@ -3625,7 +3625,7 @@ snapshots:
'@analytics/type-utils@0.6.2': {}
- '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@7f8fe13': {}
+ '@appwrite.io/console@https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@c2f54c6': {}
'@appwrite.io/pink-icons-svelte@https://pkg.pr.new/appwrite/pink/@appwrite.io/pink-icons-svelte@d68e5e4(svelte@5.25.3)':
dependencies:
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
index 92c181d80..87f7ac765 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
@@ -52,7 +52,6 @@
let showManageToken = false;
let tokenDeleteMode = false;
let showCopyUrlModal = false;
- let tokenPermissionsMode = false;
let selectedFileToken: Models.ResourceToken | null = null;
const getPreview = (fileId: string) =>
@@ -126,9 +125,7 @@
try {
await sdk
.forProject(page.params.region, page.params.project)
- .tokens.createFileToken($file.bucketId, $file.$id, expiry, [
- Permission.read(Role.any())
- ]);
+ .tokens.createFileToken($file.bucketId, $file.$id, expiry);
await invalidate(Dependencies.FILE_TOKENS);
addNotification({
@@ -151,11 +148,7 @@
try {
await sdk
.forProject(page.params.region, page.params.project)
- .tokens.update(
- selectedFileToken.$id,
- fileToken.expire ? fileToken.expire : null,
- fileToken.$permissions
- );
+ .tokens.update(selectedFileToken.$id, fileToken.expire ? fileToken.expire : null);
await invalidate(Dependencies.FILE_TOKENS);
addNotification({
message: 'File token updated',
@@ -173,23 +166,6 @@
}
}
- function getPermissionGroups(token: Models.ResourceToken): string {
- const map = {
- read: 'Read',
- update: 'Update',
- delete: 'Delete'
- };
-
- const groups = token.$permissions.reduce((set, perm) => {
- const match = perm.match(/^(\w+)\(/);
- const key = match?.[1];
- if (key && map[key]) set.add(map[key]);
- return set;
- }, new Set());
-
- return [...groups].join(', ');
- }
-
function getExpiryDetails(token: Models.ResourceToken): {
status: 'success' | 'warning' | 'error' | null;
message: string | null;
@@ -301,16 +277,6 @@
? cleanFormattedDate(token.accessedAt, true)
: 'Never'}
-
- {#if token.$permissions.length}
-
- {getPermissionGroups(token)}
-
- {:else}
- none
- {/if}
-
-
@@ -322,8 +288,8 @@
{
- toggle();
+ on:click={(e) => {
+ toggle(e);
showCopyUrlModal = true;
selectedFileToken = token;
}}
@@ -333,28 +299,18 @@
{
- toggle();
+ on:click={(e) => {
+ toggle(e);
showManageToken = true;
selectedFileToken = token;
}}>
Edit expiry
- {
- toggle();
- showManageToken = true;
- tokenPermissionsMode = true;
- selectedFileToken = token;
- }}>
- Edit permissions
-
{
- toggle();
+ toggle(e);
tokenDeleteMode = true;
showManageToken = true;
selectedFileToken = token;
@@ -439,7 +395,6 @@
bind:show={showManageToken}
bind:isDelete={tokenDeleteMode}
bind:fileToken={selectedFileToken}
- bind:isUpdatePermissions={tokenPermissionsMode}
on:created={({ detail: expiry }) => createFileToken(expiry)}
on:updated={({ detail: token }) => updateFileToken(token)}
on:deleted={async () => await deleteFileToken(selectedFileToken)} />
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/fileTokensCopyUrl.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/fileTokensCopyUrl.svelte
index 106947370..f592d9de1 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/fileTokensCopyUrl.svelte
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/fileTokensCopyUrl.svelte
@@ -1,79 +1,47 @@
+ {@const tokenUrl = tabContents[selectedTab]}
Use the token-based URL below to access this file securely.
- {#if error}
-
- Something went wrong, could not generate the URL.
-
- {:else}
- {@const tokenUrl = codeSnippets[selectedTab]}
-
-
- {#each ['Preview', 'View', 'Download'] as cat}
- (selectedTab = cat)}
- active={selectedTab === cat}>
- {cat}
-
- {/each}
-
+
+
+ {#each ['Preview', 'View', 'Download'] as cat}
+ (selectedTab = cat)}
+ active={selectedTab === cat}>
+ {cat}
+
+ {/each}
+
+
+
+ {getMoreInfo()}
+
+ {#if !token.expire}
+
+ This token doesn't expire. Be cautious when sharing links.
+
+ {/if}
+
+
-
- {getMoreInfo()}
-
- {#if !token.expire}
-
- This token doesn't expire. Be cautious when sharing links.
-
- {/if}
-
-
- {/if}
(show = false)}>Close
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/manageFileToken.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/manageFileToken.svelte
index 9f13c1f71..9a3e5e266 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/manageFileToken.svelte
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/manageFileToken.svelte
@@ -13,27 +13,24 @@
import { createEventDispatcher } from 'svelte';
import { Link } from '@appwrite.io/pink-svelte';
import { type Models } from '@appwrite.io/console';
- import { Permissions } from '$lib/components/permissions';
import { Confirm, ExpirationInput, Modal } from '$lib/components';
export let show = false;
export let isDelete = false;
- export let isUpdatePermissions = false;
export let fileToken: Models.ResourceToken | null = null;
$: expire = fileToken?.expire ?? null;
const dispatch = createEventDispatcher();
- function close() {
+ function close(): void {
show = false;
expire = null;
isDelete = false;
fileToken = null;
- isUpdatePermissions = false;
}
- function handleFileToken() {
+ function handleFileToken(): void {
if (isDelete) {
dispatch('deleted');
} else {
@@ -45,6 +42,10 @@
close();
}
+ function getModalTitle(): string {
+ return `${fileToken ? 'Edit' : 'Create'} token${fileToken ? ' expiry' : ''}`;
+ }
+
$: if (!show) {
close();
}
@@ -68,41 +69,24 @@
{:else}
-
+
{#if fileToken}
- {#if isUpdatePermissions}
- Choose who can access or update your file using this token.
-
- Learn more
- .
- {:else}
- {@const formattedDate = cleanFormattedDate(fileToken.$createdAt)}
- Edit the expiry of the file token created on {formattedDate} .
- {/if}
+ {@const formattedDate = cleanFormattedDate(fileToken.$createdAt)}
+ Edit the expiry of the file token created on {formattedDate} .
{:else}
Create a file token to grant access to a file.
+
Learn more .
{/if}
- {#if isUpdatePermissions}
-
- {:else}
-
- {/if}
+
Cancel
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
index 2f5748362..dd1432428 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
@@ -7,15 +7,9 @@ export const file = derived(page, ($page) => $page.data.file as Models.File);
export const tokens = derived(page, ($page) => $page.data.tokens as Models.ResourceTokenList);
-/**
- * Caches JWTs in memory by `token.$id` to avoid regenerating them on each URL copy.
- */
-export const cachedJwts = writable>(new Map());
-
export const columns = writable([
{ id: 'created', title: 'Created', type: 'datetime', width: 200 },
{ id: 'expire', title: 'Expiration', type: 'datetime', width: 200 },
{ id: 'last_accessed', title: 'Last accessed', type: 'datetime', width: 200 },
- { id: 'permissions', title: 'Permissions', type: 'string', width: 200 },
{ id: 'actions', title: '', type: 'string', width: 60 }
]);