@raketa-cloud/next
v1.1.0
Published
Next.js integration library for **Raketa Cloud DXP**. Provides GraphQL API clients, in-memory LRU caching, and dynamic URL redirect helpers for Next.js App Router applications.
Readme
@raketa-cloud/next
Next.js integration library for Raketa Cloud DXP. Provides GraphQL API clients, in-memory LRU caching, and dynamic URL redirect helpers for Next.js App Router applications.
Installation
npm install @raketa-cloud/nextPeer & runtime dependencies:
{
"dependencies": {
"graphql-request": "^7.1.2",
"lru-cache": "^11.0.2",
"react": "^19.0.0",
"react-dom": "^19.0.0"
}
}Exports
import {
Cache,
DxpPublic,
DxpPrivate,
generateCloudPublicHelpers,
} from "@raketa-cloud/next";Quick Reference
1. In-Memory Cache (Cache)
import { Cache } from "@raketa-cloud/next";
const cache = new Cache({
max: 2500, // Max entries
maxSize: 300 * 1024 * 1024, // 300 MB budget
ttl: 1000 * 60 * 5, // 5 minutes
debugMode: false,
});
// Fetch with cache & stale-while-revalidate fallback:
const data = await cache.fetch("my-cache-key", async () => {
return await fetchFromUpstream();
});2. Public DXP Client (DxpPublic)
import { DxpPublic } from "@raketa-cloud/next";
import getConfig from "lib/getConfig";
import localCache from "./localCache";
const dxpPublic = new DxpPublic(getConfig, localCache);
// Find a single resource (e.g. page, article, customer)
const page = await dxpPublic.resources.find("en", "about-us", "page", {
withCache: true,
});
// List resources with filters & pagination
const articles = await dxpPublic.resources.list("en", {
pagination: { page: 1, pageSize: 10 },
filters: { resourceType: "article", tagSlugs: ["news"] },
});
// Fetch website settings
const settings = await dxpPublic.settings.find("en", { withCache: true });
// Fetch a tag
const tag = await dxpPublic.tags.find("en", "technology", { withCache: true });
// Custom GraphQL query
const queryDoc = dxpPublic.client.gql`
query MyQuery($input: ResourcesInput!) {
resources(input: $input) {
list { id title slug }
}
}
`;
const result = await dxpPublic.client.query(queryDoc, {
input: { locale: "en" },
});3. Dynamic Redirects Helper (generateCloudPublicHelpers)
import { DxpPublic, generateCloudPublicHelpers } from "@raketa-cloud/next";
import getConfig from "lib/getConfig";
import redirectsCache from "./redirectsCache";
const dxpRedirects = new DxpPublic(getConfig, redirectsCache);
const { findRedirect } = generateCloudPublicHelpers(dxpRedirects);
// In Next.js middleware:
const redirect = await findRedirect("/old-path");
// returns: { id, url, destination, httpResponseCode } | null4. Private DXP Client (DxpPrivate)
import { DxpPrivate } from "@raketa-cloud/next";
import getConfig from "lib/getConfig";
// Server-side (with token resolver function)
const dxpPrivate = new DxpPrivate(getConfig, async () => {
return getAdminTokenFromCookies();
});
// Change preview for visual builder
const preview = await dxpPrivate.resources.changePreview(
"en",
resourceId,
versionNumber,
"page",
);
// Mini-resources list for admin pickers
const miniList = await dxpPrivate.resources.miniResources("en", {
filters: { resourceType: "page" },
});Documentation
For a comprehensive guide with complete project structure and Next.js App Router patterns, see the Monorepo README.
