interface UploadPolicy { allowedMimeTypes: string[] allowedVideoExtensions: string[] forbiddenFileExtensions: string[] } const policy = ref(null) const loading = ref(false) let pending: Promise | null = null export function useUploadPolicy() { async function load(force = false): Promise { if (policy.value && !force) return policy.value if (pending && !force) return pending loading.value = true pending = $fetch('/api/upload-policy', { credentials: 'include' }) .then((data) => { policy.value = { allowedMimeTypes: [...data.allowedMimeTypes], allowedVideoExtensions: [...data.allowedVideoExtensions], forbiddenFileExtensions: [...data.forbiddenFileExtensions] } return policy.value }) .finally(() => { loading.value = false pending = null }) return pending } return { policy, loading, load } }