forked from Mike/freno-dev
prep for the nook
This commit is contained in:
32
src/routes/api/the-nook/by-session.ts
Normal file
32
src/routes/api/the-nook/by-session.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import type { APIEvent } from "@solidjs/start/server";
|
||||
import { NookConnectionFactory } from "~/server/db-connections";
|
||||
import { nookSchemaBootstrap } from "~/server/nook";
|
||||
import { json, error } from "./_lib";
|
||||
|
||||
/**
|
||||
* GET /api/the-nook/by-session?session_id=cs_...
|
||||
*
|
||||
* Used by the success page (nook.freno.me/success) to retrieve the license
|
||||
* key once the `checkout.session.completed` webhook has landed. The page
|
||||
* polls this endpoint until the license row exists.
|
||||
*/
|
||||
export async function GET(event: APIEvent) {
|
||||
const url = new URL(event.request.url);
|
||||
const sessionId = url.searchParams.get("session_id");
|
||||
if (!sessionId || !sessionId.startsWith("cs_")) {
|
||||
return error("Invalid session id", 400);
|
||||
}
|
||||
|
||||
await nookSchemaBootstrap;
|
||||
const conn = NookConnectionFactory();
|
||||
|
||||
const res = await conn.execute({
|
||||
sql: "SELECT key, email FROM licenses WHERE stripe_session_id = ?",
|
||||
args: [sessionId]
|
||||
});
|
||||
if (res.rows.length === 0) {
|
||||
return error("Not found", 404);
|
||||
}
|
||||
const license = res.rows[0] as { key: string; email: string };
|
||||
return json({ key: license.key, email: license.email });
|
||||
}
|
||||
Reference in New Issue
Block a user