28 lines
860 B
TypeScript
28 lines
860 B
TypeScript
import { getAuthUserId } from '@convex-dev/auth/server';
|
|
import { ConvexError, v } from 'convex/values';
|
|
|
|
import type { Id } from './_generated/dataModel';
|
|
import { mutation, query } from './_generated/server';
|
|
|
|
export const generateUploadUrl = mutation(async (ctx) => {
|
|
const userId = await getAuthUserId(ctx);
|
|
if (!userId) throw new ConvexError('Not authenticated.');
|
|
return await ctx.storage.generateUploadUrl();
|
|
});
|
|
|
|
const isRemoteImageUrl = (value: string) =>
|
|
value.startsWith('http://') || value.startsWith('https://');
|
|
|
|
export const getImageUrl = query({
|
|
args: { storageId: v.string() },
|
|
handler: async (ctx, { storageId }) => {
|
|
if (isRemoteImageUrl(storageId)) return storageId;
|
|
try {
|
|
const url = await ctx.storage.getUrl(storageId as Id<'_storage'>);
|
|
return url ?? null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
},
|
|
});
|