diff options
Diffstat (limited to 'envshare/pages/api/v1/load.ts')
| -rw-r--r-- | envshare/pages/api/v1/load.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/envshare/pages/api/v1/load.ts b/envshare/pages/api/v1/load.ts new file mode 100644 index 0000000..ddbfac0 --- /dev/null +++ b/envshare/pages/api/v1/load.ts @@ -0,0 +1,36 @@ +import { NextRequest, NextResponse } from "next/server"; +import { Redis } from "@upstash/redis"; + +const redis = Redis.fromEnv(); +export default async function handler(req: NextRequest) { + const url = new URL(req.url); + const id = url.searchParams.get("id"); + if (!id) { + return new NextResponse("id param is missing", { status: 400 }); + } + const key = ["envshare", id].join(":"); + + const [data, _] = await Promise.all([ + await redis.hgetall<{ encrypted: string; remainingReads: number | null; iv: string }>(key), + await redis.incr("envshare:metrics:reads"), + ]); + if (!data) { + return new NextResponse("Not Found", { status: 404 }); + } + if (data.remainingReads !== null && data.remainingReads < 1) { + await redis.del(key); + return new NextResponse("Not Found", { status: 404 }); + } + + let remainingReads: number | null = null; + if (data.remainingReads !== null) { + // Decrement the number of reads and return the remaining reads + remainingReads = await redis.hincrby(key, "remainingReads", -1); + } + + return NextResponse.json({ iv: data.iv, encrypted: data.encrypted, remainingReads }); +} + +export const config = { + runtime: "edge", +}; |
