interface CreateNeonClient {
database_url: string;
session_jwt?: string;
stytch?: StytchClient;
authToken?: () => Promise<string>;
}
async function getSession(session_jwt: string, stytch: StytchClient) {
const session = await stytch.sessions.authenticateJwt({
session_jwt,
max_token_age_seconds: 60,
});
return session.session_jwt;
}
export function createNeonClient({
database_url,
session_jwt,
stytch,
authToken,
}: CreateNeonClient) {
const client = neon(database_url, {
authToken:
authToken ??
(session_jwt && stytch
? async () => {
const sessionJWT = await getSession(session_jwt, stytch);
if (!sessionJWT) throw new Error("No session JWT available");
return sessionJWT;
}
: undefined),
});
return drizzle(client, { schema });
}
interface CreateNeonClient {
database_url: string;
session_jwt?: string;
stytch?: StytchClient;
authToken?: () => Promise<string>;
}
async function getSession(session_jwt: string, stytch: StytchClient) {
const session = await stytch.sessions.authenticateJwt({
session_jwt,
max_token_age_seconds: 60,
});
return session.session_jwt;
}
export function createNeonClient({
database_url,
session_jwt,
stytch,
authToken,
}: CreateNeonClient) {
const client = neon(database_url, {
authToken:
authToken ??
(session_jwt && stytch
? async () => {
const sessionJWT = await getSession(session_jwt, stytch);
if (!sessionJWT) throw new Error("No session JWT available");
return sessionJWT;
}
: undefined),
});
return drizzle(client, { schema });
}