diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 53b8c42..d826154 100755 Binary files a/frontend/bun.lockb and b/frontend/bun.lockb differ diff --git a/frontend/package.json b/frontend/package.json index 161f5cb..4bd10b1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,9 +15,10 @@ "@sveltejs/adapter-node": "^2.0.0", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@types/qrcode": "^1.5.5", "autoprefixer": "^10.4.14", "bun-types": "^1.0.11", - "drizzle-kit": "^0.20.1", + "drizzle-kit": "latest", "postcss": "^8.4.24", "postcss-load-config": "^4.0.1", "prettier": "^3.1.0", @@ -44,7 +45,9 @@ "mode-watcher": "^0.1.2", "nanoid": "^5.0.3", "node-html-parser": "^6.1.12", + "pg": "^8.11.3", "postgres": "^3.4.3", + "qrcode": "^1.5.3", "qrious": "^4.0.2", "svelte-sonner": "^0.3.10", "tailwind-merge": "^2.0.0", diff --git a/frontend/src/lib/components/QR.svelte b/frontend/src/lib/components/QR.svelte index 2683830..57deaf8 100644 --- a/frontend/src/lib/components/QR.svelte +++ b/frontend/src/lib/components/QR.svelte @@ -13,6 +13,7 @@ export let value = '' export let padding = 10 export let className = 'qrcode' + export let code = '' let image = '' @@ -66,4 +67,11 @@ {value} - +
+ + +
diff --git a/frontend/src/routes/(app)/links/+page.svelte b/frontend/src/routes/(app)/links/+page.svelte index 0297444..34c9760 100644 --- a/frontend/src/routes/(app)/links/+page.svelte +++ b/frontend/src/routes/(app)/links/+page.svelte @@ -281,6 +281,7 @@ {data.shortener_url + '/' + qrCode} diff --git a/frontend/src/routes/api/shortener/[id]/qr/+server.ts b/frontend/src/routes/api/shortener/[id]/qr/+server.ts new file mode 100644 index 0000000..22ccc65 --- /dev/null +++ b/frontend/src/routes/api/shortener/[id]/qr/+server.ts @@ -0,0 +1,18 @@ +import type { RequestHandler } from './$types' +import QRCode from 'qrcode' + +const shortenerUrl = Bun.env.PUBLIC_SHORTENER_URL ?? 'shortener.url' + +export const GET: RequestHandler = async (event) => { + const shortenerId = event.params.id + const image = await QRCode.toBuffer( + shortenerUrl + '/' + shortenerId, + { type: 'png', errorCorrectionLevel: 'L', margin: 1, scale: 20 }, + ) + + return new Response(image, { + headers: { + 'Content-Type': 'image/png', + }, + }) +}