UNPKG

@ory/nextjs

Version:

This library was generated with [Nx](https://nx.dev).

237 lines (226 loc) 6.78 kB
'use strict'; var clientFetch = require('@ory/client-fetch'); var navigation = require('next/navigation'); var headers = require('next/headers'); require('set-cookie-parser'); require('cookie'); require('psl'); // src/types.ts var initOverrides = { cache: "no-cache" }; // src/utils/sdk.ts function orySdkUrl() { let baseUrl; if (process.env["NEXT_PUBLIC_ORY_SDK_URL"]) { baseUrl = process.env["NEXT_PUBLIC_ORY_SDK_URL"]; } if (!baseUrl) { throw new Error( "You need to set environment variable `NEXT_PUBLIC_ORY_SDK_URL` to your Ory Network SDK URL." ); } return baseUrl.replace(/\/$/, ""); } function isProduction() { return ["production", "prod"].indexOf( process.env["VERCEL_ENV"] || process.env["NODE_ENV"] || "" ) > -1; } function guessPotentiallyProxiedOrySdkUrl(options) { if (isProduction()) { return orySdkUrl(); } if (process.env["VERCEL_ENV"]) { if (!isProduction() && process.env["VERCEL_URL"]) { return `https://${process.env["VERCEL_URL"]}`.replace(/\/$/, ""); } if (process.env["__NEXT_PRIVATE_ORIGIN"]) { return process.env["__NEXT_PRIVATE_ORIGIN"].replace(/\/$/, ""); } } if (typeof window !== "undefined") { return window.location.origin; } if (options?.knownProxiedUrl) { return options.knownProxiedUrl; } const final = orySdkUrl(); console.warn( `Unable to determine a suitable SDK URL for setting up the Next.js integration of Ory Elements. Will proceed using default Ory SDK URL "${final}". This is likely not what you want for local development and your authentication and login may not work.` ); return final; } // src/app/client.ts var serverSideFrontendClient = new clientFetch.FrontendApi( new clientFetch.Configuration({ headers: { Accept: "application/json" }, basePath: orySdkUrl() }) ); // src/utils/rewrite.ts function rewriteJsonResponse(obj, proxyUrl) { return Object.fromEntries( Object.entries(obj).filter(([_, value]) => value !== void 0).map(([key, value]) => { if (Array.isArray(value)) { return [ key, value.map((item) => { if (typeof item === "object" && item !== null) { return rewriteJsonResponse(item, proxyUrl); } else if (typeof item === "string" && proxyUrl) { return item.replaceAll(orySdkUrl(), proxyUrl); } return item; }).filter((item) => item !== void 0) ]; } else if (typeof value === "object" && value !== null) { return [key, rewriteJsonResponse(value, proxyUrl)]; } else if (typeof value === "string" && proxyUrl) { return [key, value.replaceAll(orySdkUrl(), proxyUrl)]; } return [key, value]; }) ); } // src/utils/utils.ts function onValidationError(value) { return value; } async function toFlowParams(params, getCookieHeader2) { return { id: params["flow"]?.toString() ?? "", cookie: await getCookieHeader2(), return_to: params["return_to"]?.toString() ?? "" }; } // src/app/utils.ts async function getCookieHeader() { const h = await headers.headers(); return h.get("cookie") ?? void 0; } var onRedirect = (url) => { navigation.redirect(url); }; async function toFlowParams2(params) { return toFlowParams(params, getCookieHeader); } async function getPublicUrl() { const h = await headers.headers(); const host = h.get("host"); const protocol = h.get("x-forwarded-proto") || "http"; return `${protocol}://${host}`; } // src/app/flow.ts async function getFlow(params, fetchFlowRaw, flowType) { const knownProxiedUrl = await getPublicUrl(); const url = guessPotentiallyProxiedOrySdkUrl({ knownProxiedUrl }); const onRestartFlow = () => { const redirectTo = new URL( "/self-service/" + flowType.toString() + "/browser", url ); redirectTo.search = queryParamsToURLSearch(params).toString(); return navigation.redirect(redirectTo.toString(), navigation.RedirectType.replace); }; if (!params["flow"]) { onRestartFlow(); return; } try { const rawResponse = await fetchFlowRaw(); return await rawResponse.value().then((v) => rewriteJsonResponse(v, url)); } catch (error) { const errorHandler = clientFetch.handleFlowError({ onValidationError, onRestartFlow, onRedirect }); await errorHandler(error); return null; } } function queryParamsToURLSearch(q) { const url = new URLSearchParams(); for (const key in q) { const v = q[key]; if (v) { url.set(key, v.toString()); } } return url.toString(); } // src/app/login.ts async function getLoginFlow(params) { const p = await toFlowParams2(await params); return getFlow( await params, () => serverSideFrontendClient.getLoginFlowRaw(p, initOverrides), clientFetch.FlowType.Login ); } async function getRegistrationFlow(params) { const p = await toFlowParams2(await params); return getFlow( await params, () => serverSideFrontendClient.getRegistrationFlowRaw(p, initOverrides), clientFetch.FlowType.Registration ); } async function getRecoveryFlow(params) { const p = await toFlowParams2(await params); return getFlow( await params, () => serverSideFrontendClient.getRecoveryFlowRaw(p, initOverrides), clientFetch.FlowType.Recovery ); } async function getVerificationFlow(params) { const p = await toFlowParams2(await params); return getFlow( await params, () => serverSideFrontendClient.getVerificationFlowRaw(p, initOverrides), clientFetch.FlowType.Verification ); } async function getSettingsFlow(params) { const p = await toFlowParams2(await params); return getFlow( await params, () => serverSideFrontendClient.getSettingsFlowRaw(p, initOverrides), clientFetch.FlowType.Settings ); } async function getLogoutFlow({ returnTo } = {}) { const h = await headers.headers(); const knownProxiedUrl = await getPublicUrl(); const url = guessPotentiallyProxiedOrySdkUrl({ knownProxiedUrl }); return serverSideFrontendClient.createBrowserLogoutFlow({ cookie: h.get("cookie") ?? "", returnTo }).then((v) => rewriteJsonResponse(v, url)); } // src/app/session.ts async function getServerSession() { const cookie = await getCookieHeader(); return serverSideFrontendClient.toSession({ cookie }).catch(() => null); } exports.getLoginFlow = getLoginFlow; exports.getLogoutFlow = getLogoutFlow; exports.getRecoveryFlow = getRecoveryFlow; exports.getRegistrationFlow = getRegistrationFlow; exports.getServerSession = getServerSession; exports.getSettingsFlow = getSettingsFlow; exports.getVerificationFlow = getVerificationFlow; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map