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
JavaScript
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,
};
}