UNPKG

next-drupal

Version:
154 lines (150 loc) 4.33 kB
// src/deprecated/get-cache.ts import NodeCache from "node-cache"; var cache = new NodeCache(); // src/deprecated/get-access-token.ts var CACHE_KEY = "NEXT_DRUPAL_ACCESS_TOKEN"; async function getAccessToken() { if (!process.env.DRUPAL_CLIENT_ID || !process.env.DRUPAL_CLIENT_SECRET) { return null; } const cached = cache.get(CACHE_KEY); if (cached?.access_token) { return cached; } const basic = Buffer.from( `${process.env.DRUPAL_CLIENT_ID}:${process.env.DRUPAL_CLIENT_SECRET}` ).toString("base64"); const response = await fetch( `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}/oauth/token`, { method: "POST", headers: { Authorization: `Basic ${basic}`, "Content-Type": "application/x-www-form-urlencoded" }, body: `grant_type=client_credentials` } ); if (!response.ok) { throw new Error(response.statusText); } const result = await response.json(); cache.set(CACHE_KEY, result, result.expires_in); return result; } // src/deprecated/utils.ts import { Jsona } from "jsona"; import { stringify } from "qs"; var JSONAPI_PREFIX = process.env.DRUPAL_JSONAPI_PREFIX || "/jsonapi"; var dataFormatter = new Jsona(); function deserialize(body, options) { if (!body) return null; return dataFormatter.deserialize(body, options); } async function getJsonApiPathForResourceType(type, locale) { const index = await getJsonApiIndex(locale); return index?.links[type]?.href; } async function getJsonApiIndex(locale, options) { const url = buildUrl( locale ? `/${locale}${JSONAPI_PREFIX}` : `${JSONAPI_PREFIX}` ); const response = await fetch(url.toString(), { headers: locale || options ? await buildHeaders(options) : { "Content-Type": "application/json" } }); if (!response.ok) { throw new Error(response.statusText); } return await response.json(); } function buildUrl(path, params) { const url = new URL( path.charAt(0) === "/" ? `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}${path}` : path ); if (params) { url.search = stringify(params); } return url; } async function buildHeaders({ accessToken, headers = { "Content-Type": "application/json" } } = {}) { if (process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN) { headers["Authorization"] = `Bearer ${process.env.UNSTABLE_DRUPAL_ACCESS_TOKEN}`; return headers; } const token = accessToken || await getAccessToken(); if (token) { headers["Authorization"] = `Bearer ${token.access_token}`; } return headers; } function getPathFromContext(context, prefix = "") { let { slug } = context.params; slug = Array.isArray(slug) ? slug.map((s) => encodeURIComponent(s)).join("/") : slug; if (context.locale && context.locale !== context.defaultLocale) { slug = `/${context.locale}/${slug}`; } return !slug ? process.env.DRUPAL_FRONT_PAGE : prefix ? `${prefix}/${slug}` : slug; } function syncDrupalPreviewRoutes(path) { if (window && window.top !== window.self) { window.parent.postMessage( { type: "NEXT_DRUPAL_ROUTE_SYNC", path }, process.env.NEXT_PUBLIC_DRUPAL_BASE_URL ); } } // src/deprecated/get-menu.ts async function getMenu(name, options) { options = { deserialize: true, ...options }; const localePrefix = options?.locale && options.locale !== options.defaultLocale ? `/${options.locale}` : ""; const url = buildUrl(`${localePrefix}/jsonapi/menu_items/${name}`); const response = await fetch(url.toString(), { headers: await buildHeaders(options) }); if (!response.ok) { throw new Error(response.statusText); } const data = await response.json(); const items = options.deserialize ? deserialize(data) : data; const { items: tree } = buildMenuTree(items); return { items, tree }; } function buildMenuTree(links, parent = "") { if (!links?.length) { return { items: [] }; } const children = links.filter((link) => link.parent === parent); return children.length ? { items: children.map((link) => ({ ...link, ...buildMenuTree(links, link.id) })) } : {}; } export { getAccessToken, deserialize, getJsonApiPathForResourceType, getJsonApiIndex, buildUrl, buildHeaders, getPathFromContext, syncDrupalPreviewRoutes, getMenu }; //# sourceMappingURL=chunk-EWSX567N.js.map