@remkoj/optimizely-cms-nextjs 4.0.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cms-page/page.d.ts +9 -0
- package/dist/cms-page/page.js +42 -24
- package/dist/cms-page/page.js.map +1 -1
- package/dist/publish/index.d.ts +81 -14
- package/dist/publish/index.js +103 -48
- package/dist/publish/index.js.map +1 -1
- package/package.json +11 -11
package/dist/cms-page/page.d.ts
CHANGED
|
@@ -86,6 +86,15 @@ export type CreatePageOptions<LocaleEnum = SystemLocales, TParams extends Record
|
|
|
86
86
|
* @returns The processed route
|
|
87
87
|
*/
|
|
88
88
|
routeToParams: (route: Route) => TParams;
|
|
89
|
+
/**
|
|
90
|
+
* Takes the Next.JS route segments and try to transform it into an initial
|
|
91
|
+
* locale code, the default implementation will try to resolve the `lang`
|
|
92
|
+
* route segment using the channel definition.
|
|
93
|
+
*
|
|
94
|
+
* @param slugs The slugs to resolve
|
|
95
|
+
* @returns The resolved locale
|
|
96
|
+
*/
|
|
97
|
+
paramsToLocale: (params?: TParams, channel?: ChannelDefinition) => string | undefined;
|
|
89
98
|
};
|
|
90
99
|
/**
|
|
91
100
|
* Generate the React Server Side component and Next.JS functions needed to render an
|
package/dist/cms-page/page.js
CHANGED
|
@@ -6,7 +6,7 @@ import { RouteResolver } from '@remkoj/optimizely-graph-client/router';
|
|
|
6
6
|
import { OptiCmsSchema } from '@remkoj/optimizely-graph-client/client';
|
|
7
7
|
import { normalizeContentLinkWithLocale } from '@remkoj/optimizely-graph-client/utils';
|
|
8
8
|
// React Support
|
|
9
|
-
import { CmsContent, Utils,
|
|
9
|
+
import { CmsContent, Utils, getServerContext } from '@remkoj/optimizely-cms-react/rsc';
|
|
10
10
|
// Within package
|
|
11
11
|
import { MetaDataResolver } from '../metadata.js';
|
|
12
12
|
import { urlToPath, localeToGraphLocale } from './utils.js';
|
|
@@ -22,7 +22,16 @@ const CreatePageOptionDefaults = {
|
|
|
22
22
|
client: getServerClient,
|
|
23
23
|
routerFactory: (client) => new RouteResolver(client),
|
|
24
24
|
propsToCmsPath: ({ params }) => buildRequestPath(params),
|
|
25
|
-
routeToParams: (route) => { return { path: urlToPath(route.url), lang: route.locale }; }
|
|
25
|
+
routeToParams: (route) => { return { path: urlToPath(route.url), lang: route.locale }; },
|
|
26
|
+
paramsToLocale: (params, channel) => {
|
|
27
|
+
if (!channel)
|
|
28
|
+
return undefined;
|
|
29
|
+
const lang = params?.lang;
|
|
30
|
+
const toTest = Array.isArray(lang) ? lang.at(0) : lang;
|
|
31
|
+
if (!toTest)
|
|
32
|
+
return channel.defaultLocale;
|
|
33
|
+
return channel.slugToLocale(toTest.toString());
|
|
34
|
+
}
|
|
26
35
|
};
|
|
27
36
|
/**
|
|
28
37
|
* Generate the React Server Side component and Next.JS functions needed to render an
|
|
@@ -35,7 +44,7 @@ const CreatePageOptionDefaults = {
|
|
|
35
44
|
*/
|
|
36
45
|
export function createPage(factory, options) {
|
|
37
46
|
// Build the global/shared configuration for the Optimizely CMS Page
|
|
38
|
-
const { getContentByPath, client: clientFactory, channel, propsToCmsPath, routeToParams, routerFactory } = {
|
|
47
|
+
const { getContentByPath, client: clientFactory, channel, propsToCmsPath, routeToParams, routerFactory, paramsToLocale } = {
|
|
39
48
|
...CreatePageOptionDefaults,
|
|
40
49
|
...options
|
|
41
50
|
};
|
|
@@ -54,28 +63,33 @@ export function createPage(factory, options) {
|
|
|
54
63
|
};
|
|
55
64
|
const pageDefintion = {
|
|
56
65
|
generateStaticParams: async () => (await router.getRoutes()).map(r => routeToParams(r)),
|
|
57
|
-
generateMetadata: async (
|
|
58
|
-
//
|
|
66
|
+
generateMetadata: async ({ params, searchParams }, parent) => {
|
|
67
|
+
// Get context
|
|
68
|
+
const context = getServerContext();
|
|
69
|
+
context.setOptimizelyGraphClient(globalClient);
|
|
70
|
+
context.setComponentFactory(factory);
|
|
71
|
+
// Read variables from request
|
|
59
72
|
const siteId = channel ? (globalClient.currentOptiCmsSchema == OptiCmsSchema.CMS12 ? channel.id : channel.defaultDomain) : undefined;
|
|
60
|
-
const requestPath = propsToCmsPath(
|
|
73
|
+
const requestPath = propsToCmsPath({ params, searchParams });
|
|
61
74
|
if (!requestPath)
|
|
62
75
|
return Promise.resolve({});
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
const initialLocale = paramsToLocale(params, channel);
|
|
77
|
+
if (initialLocale)
|
|
78
|
+
context.setLocale(initialLocale);
|
|
79
|
+
// Debug output
|
|
80
|
+
if (context.isDebug)
|
|
81
|
+
console.log(`⚪ [CmsPage.generateMetadata] Processed Next.JS route: ${JSON.stringify(params)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath, siteId })}`);
|
|
65
82
|
// Resolve the route to a content link
|
|
66
83
|
const routeInfo = await getInfoByPath(requestPath, siteId);
|
|
67
84
|
if (!routeInfo) {
|
|
68
|
-
if (isDebug
|
|
85
|
+
if (context.isDebug)
|
|
69
86
|
console.log('⚪ [CmsPage.generateMetadata] No data received');
|
|
70
87
|
return Promise.resolve({});
|
|
71
88
|
}
|
|
72
89
|
const [route, contentLink, contentType, graphLocale] = routeInfo;
|
|
73
|
-
if (isDebug
|
|
90
|
+
if (context.isDebug)
|
|
74
91
|
console.log(`⚪ [CmsPage.generateMetadata] Retrieved content info:`, route);
|
|
75
|
-
// Update context
|
|
76
|
-
const context = getServerContext();
|
|
77
|
-
context.setOptimizelyGraphClient(globalClient);
|
|
78
|
-
context.setComponentFactory(factory);
|
|
92
|
+
// Update context from route
|
|
79
93
|
context.setLocale(route.locale);
|
|
80
94
|
// Fetch the metadata based upon the actual content type and resolve parent
|
|
81
95
|
const metaResolver = new MetaDataResolver(globalClient);
|
|
@@ -83,7 +97,7 @@ export function createPage(factory, options) {
|
|
|
83
97
|
metaResolver.resolve(factory, contentLink, contentType, graphLocale),
|
|
84
98
|
parent
|
|
85
99
|
]);
|
|
86
|
-
if (isDebug
|
|
100
|
+
if (context.isDebug)
|
|
87
101
|
console.log(`⚪ [CmsPage.generateMetadata] Component yielded metadata:`, pageMetadata);
|
|
88
102
|
// Make sure merging of objects goes correctly
|
|
89
103
|
for (const metaKey of Object.getOwnPropertyNames(pageMetadata)) {
|
|
@@ -98,35 +112,39 @@ export function createPage(factory, options) {
|
|
|
98
112
|
}
|
|
99
113
|
return pageMetadata;
|
|
100
114
|
},
|
|
101
|
-
CmsPage: async (
|
|
115
|
+
CmsPage: async ({ params, searchParams }) => {
|
|
102
116
|
// Prepare the context
|
|
103
117
|
const context = getServerContext();
|
|
104
118
|
context.setOptimizelyGraphClient(globalClient);
|
|
105
119
|
context.setComponentFactory(factory);
|
|
106
120
|
// Analyze the Next.JS Request props
|
|
107
|
-
const requestPath = propsToCmsPath(
|
|
108
|
-
if (isDebug
|
|
109
|
-
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(
|
|
121
|
+
const requestPath = propsToCmsPath({ params, searchParams });
|
|
122
|
+
if (context.isDebug)
|
|
123
|
+
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(params)} => Optimizely CMS route: ${JSON.stringify({ path: requestPath })}`);
|
|
110
124
|
// If we don't have the path, or the path is an internal Next.js route reject it.
|
|
111
125
|
if (!requestPath || requestPath.startsWith('/_next/'))
|
|
112
126
|
return notFound();
|
|
127
|
+
// Determine the initial locale
|
|
128
|
+
const initialLocale = paramsToLocale(params, channel);
|
|
129
|
+
if (initialLocale)
|
|
130
|
+
context.setLocale(initialLocale);
|
|
113
131
|
// Resolve the content based upon the path
|
|
114
|
-
const pathForRequest = requestPath.endsWith("/") ? [requestPath.substring(0, requestPath.length - 1), requestPath] : [requestPath, requestPath + '/'];
|
|
132
|
+
const pathForRequest = (requestPath.endsWith("/") ? [requestPath.substring(0, requestPath.length - 1), requestPath] : [requestPath, requestPath + '/']).filter(x => x.length >= 1);
|
|
115
133
|
const requestVars = {
|
|
116
134
|
path: pathForRequest,
|
|
117
135
|
siteId: channel ? (globalClient.currentOptiCmsSchema == OptiCmsSchema.CMS12 ? channel.id : getPrimaryURL(channel).href) : undefined
|
|
118
136
|
};
|
|
119
|
-
if (isDebug
|
|
120
|
-
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(
|
|
137
|
+
if (context.isDebug)
|
|
138
|
+
console.log(`⚪ [CmsPage] Processed Next.JS route: ${JSON.stringify(params)} => getContentByPath Variables: ${JSON.stringify(requestVars)}`);
|
|
121
139
|
const response = await getContentByPath(globalClient, requestVars);
|
|
122
140
|
const info = (response?.content?.items ?? [])[0];
|
|
123
141
|
if (!info) {
|
|
124
|
-
if (
|
|
142
|
+
if (context.isDebugOrDevelopment) {
|
|
125
143
|
console.error(`🔴 [CmsPage] Unable to load content for ${requestPath}, data received: `, response);
|
|
126
144
|
}
|
|
127
145
|
return notFound();
|
|
128
146
|
}
|
|
129
|
-
else if (
|
|
147
|
+
else if (context.isDebugOrDevelopment && (response?.content?.items ?? []).length > 1) {
|
|
130
148
|
console.warn(`🟠 [CmsPage] Resolving content for ${requestPath}, yielded ${(response?.content?.items ?? []).length} items, picked:`, info);
|
|
131
149
|
}
|
|
132
150
|
// Extract the type & link
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAI7C,OAAO,EAAE,aAAa,EAAmC,MAAM,wCAAwC,CAAA;AAEvG,OAAO,EAA6C,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACjH,OAAO,EAAE,8BAA8B,EAAE,MAAM,uCAAuC,CAAA;AAEtF,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/cms-page/page.tsx"],"names":[],"mappings":"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"}
|
package/dist/publish/index.d.ts
CHANGED
|
@@ -1,27 +1,94 @@
|
|
|
1
|
-
import { type NextRequest, NextResponse } from
|
|
2
|
-
import { revalidatePath } from "next/cache.js";
|
|
3
|
-
import { type
|
|
4
|
-
type
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { type NextRequest, NextResponse } from 'next/server.js';
|
|
2
|
+
import { revalidatePath, revalidateTag } from "next/cache.js";
|
|
3
|
+
import { type ClientFactory, OptiCmsSchema, RouteResolver } from '@remkoj/optimizely-graph-client';
|
|
4
|
+
export { type NextRequest, NextResponse } from 'next/server.js';
|
|
5
|
+
export type PublishApiHandler = (req: NextRequest) => Promise<NextResponse<PublishApiResponse>> | NextResponse<PublishApiResponse>;
|
|
6
|
+
export type PublishScopes = NonNullable<Parameters<typeof revalidatePath>[1]>;
|
|
7
|
+
export type PublishHookData = {
|
|
8
|
+
timestamp: string;
|
|
9
|
+
tenantId: string;
|
|
10
|
+
} & ({
|
|
11
|
+
type: {
|
|
12
|
+
subject: "bulk";
|
|
13
|
+
action: string;
|
|
14
|
+
};
|
|
15
|
+
data: {
|
|
16
|
+
journalId: string;
|
|
17
|
+
items: {
|
|
18
|
+
[itemId: string]: "indexed" | "deleted";
|
|
19
|
+
};
|
|
20
|
+
docId: never;
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
type: {
|
|
24
|
+
subject: "doc";
|
|
25
|
+
action: string;
|
|
26
|
+
};
|
|
27
|
+
data: {
|
|
28
|
+
docId: string;
|
|
29
|
+
journalId: never;
|
|
30
|
+
items: never;
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
export type PublishApiOptions = {
|
|
34
|
+
/**
|
|
35
|
+
* The list of paths that your implementation uses with Optimizely CMS
|
|
36
|
+
* managed content. If the optimized publishing is enabled, this list will
|
|
37
|
+
* not be used at all.
|
|
38
|
+
*/
|
|
39
|
+
paths: Array<Parameters<typeof revalidatePath>[0]>;
|
|
40
|
+
/**
|
|
41
|
+
* A list fo paths that must always be purged, regardless of optimization
|
|
42
|
+
* of purging is enabled. This is normally used for search-results etc..
|
|
10
43
|
*/
|
|
11
|
-
|
|
44
|
+
additionalPaths: Array<Parameters<typeof revalidatePath>[0]>;
|
|
12
45
|
/**
|
|
13
46
|
* The scopes for which to revalidate the cache
|
|
14
47
|
*/
|
|
15
|
-
scopes
|
|
48
|
+
scopes: Array<PublishScopes>;
|
|
16
49
|
/**
|
|
17
50
|
* The tags to revalidate the cache for
|
|
18
51
|
*/
|
|
19
|
-
tags
|
|
52
|
+
tags: Array<Parameters<typeof revalidateTag>[0]>;
|
|
53
|
+
/**
|
|
54
|
+
* If set to true, the handler will only publish the paths of the items
|
|
55
|
+
* that are changed. However this comes at the expense of needing a GraphQL
|
|
56
|
+
* query for every received hook to resolve the paths.
|
|
57
|
+
*/
|
|
58
|
+
optimizePublish: boolean;
|
|
20
59
|
/**
|
|
21
60
|
* The Optimizely Graph client to use for Graph Operations needed to publish
|
|
22
61
|
* content
|
|
23
62
|
*/
|
|
24
|
-
client
|
|
63
|
+
client: ClientFactory;
|
|
64
|
+
/**
|
|
65
|
+
* The router to use when the publishing optimization is enabled
|
|
66
|
+
*/
|
|
67
|
+
router: (() => RouteResolver) | {
|
|
68
|
+
urlBase?: URL | string;
|
|
69
|
+
resolverMode?: OptiCmsSchema;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* A filtering function for the received webhooks, only hooks for which this method
|
|
73
|
+
* returns true will trigger a cache invalidation.
|
|
74
|
+
*
|
|
75
|
+
* @param hookType
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
hookDataFilter: (hookType: PublishHookData['type']) => boolean;
|
|
79
|
+
};
|
|
80
|
+
export type PublishApiResponse = {
|
|
81
|
+
revalidated: {
|
|
82
|
+
paths: Array<Parameters<typeof revalidatePath>[0]>;
|
|
83
|
+
scopes: Array<PublishScopes>;
|
|
84
|
+
tags: Array<Parameters<typeof revalidateTag>[0]>;
|
|
85
|
+
};
|
|
86
|
+
optimized: boolean;
|
|
87
|
+
error?: never;
|
|
88
|
+
} | {
|
|
89
|
+
revalidated?: never;
|
|
90
|
+
optimized?: boolean;
|
|
91
|
+
error: string;
|
|
25
92
|
};
|
|
26
|
-
export declare function createPublishApi(options
|
|
93
|
+
export declare function createPublishApi(options?: Partial<PublishApiOptions>): PublishApiHandler;
|
|
27
94
|
export default createPublishApi;
|
package/dist/publish/index.js
CHANGED
|
@@ -1,62 +1,117 @@
|
|
|
1
|
-
import { NextResponse } from
|
|
1
|
+
import { NextResponse } from 'next/server.js';
|
|
2
2
|
import { revalidatePath, revalidateTag } from "next/cache.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { RouteResolver } from '@remkoj/optimizely-graph-client';
|
|
4
|
+
import { createClient } from '@remkoj/optimizely-cms-nextjs';
|
|
5
|
+
export { NextResponse } from 'next/server.js';
|
|
6
|
+
const publishApiDefaults = {
|
|
7
|
+
paths: ['/', '/[[...path]]', '/[lang]', '/[lang]/[[...path]]'],
|
|
8
|
+
additionalPaths: [],
|
|
9
|
+
scopes: ['page', 'layout'],
|
|
10
|
+
tags: [],
|
|
11
|
+
optimizePublish: false,
|
|
12
|
+
client: createClient,
|
|
13
|
+
router: {},
|
|
14
|
+
hookDataFilter: (hookType) => hookType.subject == 'bulk' && hookType.action == 'completed'
|
|
15
|
+
};
|
|
5
16
|
export function createPublishApi(options) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
scopes: ['page', 'layout'],
|
|
10
|
-
tags: []
|
|
17
|
+
const { paths, additionalPaths, optimizePublish, client: clientFactory, router: routerFactory, hookDataFilter, tags, scopes } = {
|
|
18
|
+
...publishApiDefaults,
|
|
19
|
+
...options
|
|
11
20
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
const client = clientFactory();
|
|
22
|
+
function getRouteResolver() {
|
|
23
|
+
return typeof routerFactory == 'function' ? routerFactory() : new RouteResolver(client, routerFactory?.urlBase, routerFactory?.resolverMode ?? client.currentOptiCmsSchema);
|
|
24
|
+
}
|
|
25
|
+
function publishAll(targetPaths, optimized = false) {
|
|
26
|
+
scopes.forEach(scope => {
|
|
27
|
+
targetPaths.forEach(path => revalidatePath(path, scope));
|
|
28
|
+
additionalPaths.forEach(path => revalidatePath(path, scope));
|
|
29
|
+
});
|
|
30
|
+
tags.forEach(tag => revalidateTag(tag));
|
|
31
|
+
return { revalidated: { scopes, paths: [...targetPaths, ...additionalPaths], tags }, optimized };
|
|
32
|
+
}
|
|
33
|
+
function getItemIds(hookData) {
|
|
34
|
+
let items = [];
|
|
35
|
+
switch (hookData.type.subject) {
|
|
36
|
+
case "doc":
|
|
37
|
+
items = [hookData.data.docId].map(item => {
|
|
38
|
+
const [key, locale] = item.split('_');
|
|
39
|
+
return key && locale ? { key: key.replaceAll('-', ''), locale } : undefined;
|
|
40
|
+
}).filter(x => x);
|
|
41
|
+
break;
|
|
42
|
+
case "bulk":
|
|
43
|
+
items = Object.getOwnPropertyNames(hookData.data.items ?? {}).map(pn => {
|
|
44
|
+
const status = hookData.data.items[pn];
|
|
45
|
+
if (status == "indexed" || status == "deleted") {
|
|
46
|
+
const [key, _, locale] = pn.split('_');
|
|
47
|
+
return key && locale ? { key: key.replaceAll('-', ''), locale } : undefined;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}).filter(x => x);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
//@ts-expect-error All known types have been handled, this error is for new/unknown types
|
|
54
|
+
throw new Error("Unknown hook subject " + hookData.type.subject);
|
|
20
55
|
}
|
|
56
|
+
return items.filter((x, i, a) => a.findIndex(v => v.key == x.key && v.locale == x.locale) == i);
|
|
21
57
|
}
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return async function (request) {
|
|
28
|
-
// Authorize the request
|
|
29
|
-
const xAuthToken = request.headers.get("X-OPTLY-PUBLISH") ??
|
|
30
|
-
request.nextUrl.searchParams.get("token") ??
|
|
31
|
-
undefined;
|
|
32
|
-
const serverToken = client.siteInfo.publishToken;
|
|
33
|
-
if (!serverToken || serverToken == "") {
|
|
58
|
+
const requestHandler = async (req) => {
|
|
59
|
+
// Validate the request
|
|
60
|
+
const publishToken = client.siteInfo.publishToken;
|
|
61
|
+
const requestToken = getRequestToken(req);
|
|
62
|
+
if (!publishToken) {
|
|
34
63
|
console.error("[Publish-API] No authentication configured, publishing has been disabled");
|
|
35
64
|
return NextResponse.json({ error: "Not authorized" }, { status: 401 });
|
|
36
65
|
}
|
|
37
|
-
if (
|
|
38
|
-
console.error("[Publish-API] The provided publishing token is invalid",
|
|
66
|
+
if (!requestToken || requestToken != publishToken) {
|
|
67
|
+
console.error("[Publish-API] The provided publishing token is invalid", requestToken);
|
|
39
68
|
return NextResponse.json({ error: "Not authorized" }, { status: 401 });
|
|
40
69
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
try {
|
|
71
|
+
// Get the webhook data
|
|
72
|
+
const webhookData = await req.json().catch(() => undefined);
|
|
73
|
+
console.debug('[Publish-API] Webhook data', webhookData);
|
|
74
|
+
// Purge everything if not known (e.g. for a GET request)
|
|
75
|
+
if (!webhookData) {
|
|
76
|
+
console.error("[Publish-API] No hook data received, optimization disabled");
|
|
77
|
+
return NextResponse.json(publishAll(paths));
|
|
78
|
+
}
|
|
79
|
+
// Make sure we're allowed to process the hook
|
|
80
|
+
if (!hookDataFilter(webhookData.type)) {
|
|
81
|
+
console.log("[Publish-API] Webhook ignored due to hookDataFilter", webhookData.type);
|
|
82
|
+
return NextResponse.json({ optimized: false, revalidated: { paths: [], scopes: [], tags: [] } });
|
|
83
|
+
}
|
|
84
|
+
// If we're not optimizing, just publish everything
|
|
85
|
+
if (!optimizePublish)
|
|
86
|
+
return NextResponse.json(publishAll(paths));
|
|
87
|
+
// Get the actual content ids from the hook data
|
|
88
|
+
const contentIds = getItemIds(webhookData);
|
|
89
|
+
console.debug("[Publish-API] Content items to publish:", JSON.stringify(contentIds));
|
|
90
|
+
// Resolve the contentids to paths
|
|
91
|
+
const router = getRouteResolver();
|
|
92
|
+
const results = await Promise.allSettled(contentIds.map(contentId => router.getContentInfoById(contentId.key, contentId.locale)));
|
|
93
|
+
const pathsToFlush = results.map(result => {
|
|
94
|
+
if (result.status == "rejected") {
|
|
95
|
+
console.error("[Publish-API] Error fetching route for content item:", result.reason?.message ?? result.reason);
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
return result.value?.path;
|
|
99
|
+
}).filter(x => x);
|
|
100
|
+
console.debug("[Publish-API] Content paths to publish:", JSON.stringify(pathsToFlush));
|
|
101
|
+
// Flush these paths
|
|
102
|
+
return NextResponse.json(publishAll(pathsToFlush, true));
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
console.error("[Publish-API] Error handling publishing request", e?.message ?? e);
|
|
106
|
+
return NextResponse.json({ error: e?.message ?? "Unknown error " }, { status: 500 });
|
|
107
|
+
}
|
|
59
108
|
};
|
|
109
|
+
return requestHandler;
|
|
110
|
+
}
|
|
111
|
+
function getRequestToken(req) {
|
|
112
|
+
return req.headers.get("X-OPTLY-PUBLISH") ??
|
|
113
|
+
req.nextUrl.searchParams.get("token") ??
|
|
114
|
+
undefined;
|
|
60
115
|
}
|
|
61
116
|
export default createPublishApi;
|
|
62
117
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publish/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remkoj/optimizely-cms-nextjs",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.2.0",
|
|
5
5
|
"repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
|
|
6
6
|
"author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
|
|
7
7
|
"homepage": "https://github.com/remkoj/optimizely-dxp-clients",
|
|
@@ -39,26 +39,26 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@remkoj/optimizely-cms-react": "4.
|
|
43
|
-
"@remkoj/optimizely-graph-client": "4.
|
|
44
|
-
"@types/node": "^22.10.
|
|
45
|
-
"@types/react": "^18.3.
|
|
46
|
-
"@types/react-dom": "18.3.
|
|
47
|
-
"graphql": "^16.
|
|
42
|
+
"@remkoj/optimizely-cms-react": "4.2.0",
|
|
43
|
+
"@remkoj/optimizely-graph-client": "4.2.0",
|
|
44
|
+
"@types/node": "^22.10.7",
|
|
45
|
+
"@types/react": "^18.3.18",
|
|
46
|
+
"@types/react-dom": "18.3.5",
|
|
47
|
+
"graphql": "^16.10.0",
|
|
48
48
|
"graphql-request": "^6.1.0",
|
|
49
|
-
"next": "^14.2.
|
|
49
|
+
"next": "^14.2.23",
|
|
50
50
|
"prop-types": "^15.8.1",
|
|
51
51
|
"react": "^18.3.1",
|
|
52
52
|
"react-dom": "^18.3.1",
|
|
53
53
|
"scheduler": "^0.25.0",
|
|
54
|
-
"typescript": "^5.7.
|
|
54
|
+
"typescript": "^5.7.3"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"deepmerge": "^4.3.1"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
|
-
"@remkoj/optimizely-cms-react": "
|
|
61
|
-
"@remkoj/optimizely-graph-client": "
|
|
60
|
+
"@remkoj/optimizely-cms-react": "^4",
|
|
61
|
+
"@remkoj/optimizely-graph-client": "^4",
|
|
62
62
|
"graphql": "^16",
|
|
63
63
|
"graphql-request": "^6",
|
|
64
64
|
"next": "^14",
|