@pedwise/next-firebase-auth-edge
Version:
Next.js 13 Firebase Authentication for Edge and server runtimes. Dedicated for Next 13 server components. Compatible with Next.js middleware.
66 lines • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.authentication = exports.refreshAuthCookies = exports.createAuthMiddlewareResponse = void 0;
const server_1 = require("next/server");
const cookies_1 = require("./cookies");
const tokens_1 = require("./tokens");
const auth_1 = require("../auth");
async function createAuthMiddlewareResponse(request, options) {
if (request.nextUrl.pathname === options.loginPath) {
return (0, cookies_1.setAuthCookies)(request.headers, {
cookieName: options.cookieName,
cookieSerializeOptions: options.cookieSerializeOptions,
cookieSignatureKeys: options.cookieSignatureKeys,
serviceAccount: options.serviceAccount,
apiKey: options.apiKey,
});
}
if (request.nextUrl.pathname === options.logoutPath) {
return (0, cookies_1.removeAuthCookies)(request.headers, {
cookieName: options.cookieName,
cookieSerializeOptions: options.cookieSerializeOptions,
});
}
return server_1.NextResponse.next();
}
exports.createAuthMiddlewareResponse = createAuthMiddlewareResponse;
async function refreshAuthCookies(idToken, response, options) {
const { getCustomIdAndRefreshTokens } = (0, auth_1.getFirebaseAuth)(options.serviceAccount, options.apiKey);
const idAndRefreshTokens = await getCustomIdAndRefreshTokens(idToken, options.apiKey);
await (0, cookies_1.appendAuthCookies)(response, idAndRefreshTokens, options);
return idAndRefreshTokens;
}
exports.refreshAuthCookies = refreshAuthCookies;
const defaultInvalidTokenHandler = async () => server_1.NextResponse.next();
const defaultValidTokenHandler = async () => server_1.NextResponse.next();
async function authentication(request, options) {
var _a, _b, _c;
const handleValidToken = (_a = options.handleValidToken) !== null && _a !== void 0 ? _a : defaultValidTokenHandler;
const handleError = (_b = options.handleError) !== null && _b !== void 0 ? _b : defaultInvalidTokenHandler;
const handleInvalidToken = (_c = options.handleInvalidToken) !== null && _c !== void 0 ? _c : defaultInvalidTokenHandler;
if ([options.loginPath, options.logoutPath].includes(request.nextUrl.pathname)) {
return createAuthMiddlewareResponse(request, options);
}
const { verifyIdToken, handleTokenRefresh } = (0, auth_1.getFirebaseAuth)(options.serviceAccount, options.apiKey);
const idAndRefreshTokens = await (0, tokens_1.getRequestCookiesTokens)(request.cookies, options);
if (!idAndRefreshTokens) {
return handleInvalidToken();
}
return (0, auth_1.handleExpiredToken)(async () => {
const decodedToken = await verifyIdToken(idAndRefreshTokens.idToken, options.checkRevoked);
return await handleValidToken({
token: idAndRefreshTokens.idToken,
decodedToken,
});
}, async () => {
const { token, decodedToken } = await handleTokenRefresh(idAndRefreshTokens.refreshToken, options.apiKey);
return (0, cookies_1.appendAuthCookies)(await handleValidToken({ token, decodedToken }), {
idToken: token,
refreshToken: idAndRefreshTokens.refreshToken,
}, options);
}, async (e) => {
return handleError(e);
});
}
exports.authentication = authentication;
//# sourceMappingURL=middleware.js.map