From f7c3f7a1fe01efe44a6b65fabd2dec5527eb3db8 Mon Sep 17 00:00:00 2001 From: "Sasha.Marchuk" Date: Mon, 30 Mar 2026 16:17:39 +0700 Subject: [PATCH 1/2] feat(global): add public API endpoint for navigation data Expose primaryNav, footerLinks, and socialMediaLinks via a read-only REST endpoint at GET /api/v1/@apostrophecms/global/nav. This allows the Next.js marketing app to consume navigation data without authentication. Relationship fields (_page) are automatically resolved by Apostrophe's middleware before the handler runs. Co-Authored-By: Claude Opus 4.6 --- website/modules/@apostrophecms/global/index.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/website/modules/@apostrophecms/global/index.js b/website/modules/@apostrophecms/global/index.js index f4125149..22994f8a 100644 --- a/website/modules/@apostrophecms/global/index.js +++ b/website/modules/@apostrophecms/global/index.js @@ -133,4 +133,18 @@ module.exports = { }, }, }, + apiRoutes(self) { + return { + get: { + nav(req) { + const { global } = req.data; + return { + primaryNav: global.primaryNav || [], + footerLinks: global.footerLinks || [], + socialMediaLinks: global.socialMediaLinks || [], + }; + }, + }, + }; + }, }; From e872c38e39aaf24b614b2c68865ddca8cdca5fac Mon Sep 17 00:00:00 2001 From: "Sasha.Marchuk" Date: Mon, 30 Mar 2026 19:59:20 +0700 Subject: [PATCH 2/2] fix(global): add defensive guard for req.data.global in nav endpoint Co-Authored-By: Claude Opus 4.6 --- website/modules/@apostrophecms/global/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/modules/@apostrophecms/global/index.js b/website/modules/@apostrophecms/global/index.js index 22994f8a..8a58fd97 100644 --- a/website/modules/@apostrophecms/global/index.js +++ b/website/modules/@apostrophecms/global/index.js @@ -137,7 +137,7 @@ module.exports = { return { get: { nav(req) { - const { global } = req.data; + const global = req?.data?.global || {}; return { primaryNav: global.primaryNav || [], footerLinks: global.footerLinks || [],