UNPKG

next-auth-pubkey

Version:

A light-weight Lightning and Nostr auth provider for your Next.js app that's entirely self-hosted and plugs seamlessly into the next-auth framework.

43 lines (42 loc) 1.46 kB
import * as jose from "jose"; export async function generateIdToken(pubkey, name, image, config) { const secret = Buffer.from(config.secret); const expires = Math.floor(Date.now() / 1000 + config.intervals.idToken); const jwt = await new jose.SignJWT({ id: pubkey, name, image, }) .setProtectedHeader({ alg: "HS256" }) .setIssuedAt(Math.floor(Date.now() / 1000)) .setIssuer(config.baseUrl) .setAudience(config.baseUrl) .setExpirationTime(expires) .setSubject(pubkey) .sign(secret, {}); return jwt; } export async function generateRefreshToken(pubkey, config) { const secret = Buffer.from(config.secret); const expires = Math.floor(Date.now() / 1000 + config.intervals.refreshToken); const jwt = await new jose.SignJWT({ id: pubkey, }) .setProtectedHeader({ alg: "HS256" }) .setIssuedAt(Math.floor(Date.now() / 1000)) .setIssuer(config.baseUrl) .setAudience(config.baseUrl) .setExpirationTime(expires) .setSubject(pubkey) .sign(secret, {}); return jwt; } export async function verifyRefreshToken(refreshToken, config) { const secret = Buffer.from(config.secret); const jwt = await jose.jwtVerify(refreshToken, secret); const pubkey = typeof jwt.payload?.id === "string" ? jwt.payload.id : undefined; return { pubkey, jwt: jwt.payload, }; }