@se-studio/contentful-rest-api 1.16.4 → 1.16.5
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/CHANGELOG.md +6 -0
- package/dist/api/server-asset.d.ts +19 -1
- package/dist/api/server-asset.d.ts.map +1 -1
- package/dist/api/server-asset.js +53 -12
- package/dist/api/server-asset.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @se-studio/contentful-rest-api
|
|
2
2
|
|
|
3
|
+
## 1.16.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b0be108: Normalize download proxy URL identity for SEO: 301 query-string and wrong-filename aliases to the Contentful filename path, and set `Link: rel="canonical"` on successful responses (fixes GSC "Duplicate without user-selected canonical" for PDFs).
|
|
8
|
+
|
|
3
9
|
## 1.16.4
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -20,6 +20,14 @@ export interface DownloadHandlerConfig {
|
|
|
20
20
|
* Defaults to false.
|
|
21
21
|
*/
|
|
22
22
|
preview?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Absolute site origin used for `Link: rel="canonical"` (no trailing slash),
|
|
25
|
+
* e.g. `https://www.om1.com`. When omitted, the request origin is used.
|
|
26
|
+
*
|
|
27
|
+
* Query-string / wrong-filename redirects always stay on the request origin
|
|
28
|
+
* so preview and local hosts are not bounced to production.
|
|
29
|
+
*/
|
|
30
|
+
baseUrl?: string;
|
|
23
31
|
}
|
|
24
32
|
/**
|
|
25
33
|
* Route params structure for Next.js App Router
|
|
@@ -30,11 +38,21 @@ export interface DownloadRouteParams {
|
|
|
30
38
|
filename: string;
|
|
31
39
|
}>;
|
|
32
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds the canonical download path for an asset.
|
|
43
|
+
* Filename comes from Contentful so only one path identity exists per asset.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildCanonicalDownloadPath(assetId: string, canonicalFilename: string): string;
|
|
33
46
|
/**
|
|
34
47
|
* Creates a Next.js App Router GET handler for downloading/viewing Contentful assets.
|
|
35
48
|
*
|
|
49
|
+
* Normalizes URL identity for SEO (GSC "Duplicate without user-selected canonical"):
|
|
50
|
+
* - 301 when the request has a query string (UTM / email tracking)
|
|
51
|
+
* - 301 when the path filename ≠ Contentful `file.fileName`
|
|
52
|
+
* - Sets `Link: <canonical>; rel="canonical"` on successful 200 responses
|
|
53
|
+
*
|
|
36
54
|
* @param config - Download handler configuration
|
|
37
55
|
* @returns GET handler function for Next.js route
|
|
38
56
|
*/
|
|
39
|
-
export declare function createDownloadHandler(config: DownloadHandlerConfig): (
|
|
57
|
+
export declare function createDownloadHandler(config: DownloadHandlerConfig): (request: NextRequest, { params }: DownloadRouteParams) => Promise<Response>;
|
|
40
58
|
//# sourceMappingURL=server-asset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-asset.d.ts","sourceRoot":"","sources":["../../src/api/server-asset.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,gBAAgB,CAAC;IAEnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"server-asset.d.ts","sourceRoot":"","sources":["../../src/api/server-asset.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,gBAAgB,CAAC;IAEnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAcD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,IAI/D,SAAS,WAAW,EACpB,YAAY,mBAAmB,KAC9B,OAAO,CAAC,QAAQ,CAAC,CAkFrB"}
|
package/dist/api/server-asset.js
CHANGED
|
@@ -1,21 +1,41 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
2
|
import { contentfulAssetRest, isBrowserViewable } from './asset.js';
|
|
3
|
+
function decodeFilenameParam(filename) {
|
|
4
|
+
try {
|
|
5
|
+
return decodeURIComponent(filename);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return filename;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function stripTrailingSlash(url) {
|
|
12
|
+
return url.endsWith('/') ? url.slice(0, -1) : url;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Builds the canonical download path for an asset.
|
|
16
|
+
* Filename comes from Contentful so only one path identity exists per asset.
|
|
17
|
+
*/
|
|
18
|
+
export function buildCanonicalDownloadPath(assetId, canonicalFilename) {
|
|
19
|
+
return `/download/${assetId}/${encodeURIComponent(canonicalFilename)}`;
|
|
20
|
+
}
|
|
3
21
|
/**
|
|
4
22
|
* Creates a Next.js App Router GET handler for downloading/viewing Contentful assets.
|
|
5
23
|
*
|
|
24
|
+
* Normalizes URL identity for SEO (GSC "Duplicate without user-selected canonical"):
|
|
25
|
+
* - 301 when the request has a query string (UTM / email tracking)
|
|
26
|
+
* - 301 when the path filename ≠ Contentful `file.fileName`
|
|
27
|
+
* - Sets `Link: <canonical>; rel="canonical"` on successful 200 responses
|
|
28
|
+
*
|
|
6
29
|
* @param config - Download handler configuration
|
|
7
30
|
* @returns GET handler function for Next.js route
|
|
8
31
|
*/
|
|
9
32
|
export function createDownloadHandler(config) {
|
|
10
|
-
const { getConfig, revalidate = 86400, preview = false } = config;
|
|
11
|
-
return async function GET(
|
|
33
|
+
const { getConfig, revalidate = 86400, preview = false, baseUrl } = config;
|
|
34
|
+
return async function GET(request, { params }) {
|
|
12
35
|
const { assetId, filename } = await params;
|
|
13
|
-
|
|
14
|
-
const decodedFilename = decodeURIComponent(filename);
|
|
36
|
+
const decodedFilename = decodeFilenameParam(filename);
|
|
15
37
|
try {
|
|
16
|
-
// Get Contentful config
|
|
17
38
|
const contentfulConfig = getConfig(preview);
|
|
18
|
-
// Fetch asset metadata from Contentful (uses client with rate limiting)
|
|
19
39
|
const asset = await contentfulAssetRest(contentfulConfig, assetId, {
|
|
20
40
|
preview,
|
|
21
41
|
next: { revalidate },
|
|
@@ -24,6 +44,30 @@ export function createDownloadHandler(config) {
|
|
|
24
44
|
return Response.json({ error: 'Asset not found' }, { status: 404 });
|
|
25
45
|
}
|
|
26
46
|
const { file } = asset.fields;
|
|
47
|
+
// Prefer Contentful's real filename as the single public identity.
|
|
48
|
+
const canonicalFilename = typeof file.fileName === 'string' && file.fileName.length > 0
|
|
49
|
+
? file.fileName
|
|
50
|
+
: decodedFilename;
|
|
51
|
+
const requestUrl = new URL(request.url);
|
|
52
|
+
const requestOrigin = stripTrailingSlash(requestUrl.origin);
|
|
53
|
+
const canonicalOrigin = baseUrl ? stripTrailingSlash(baseUrl) : requestOrigin;
|
|
54
|
+
const canonicalPath = buildCanonicalDownloadPath(assetId, canonicalFilename);
|
|
55
|
+
// Redirects stay on the host that received the request (preview/local safe).
|
|
56
|
+
const redirectLocation = `${requestOrigin}${canonicalPath}`;
|
|
57
|
+
// Canonical signal prefers configured production baseUrl when provided.
|
|
58
|
+
const canonicalAbsolute = `${canonicalOrigin}${canonicalPath}`;
|
|
59
|
+
const hasQuery = requestUrl.search.length > 0;
|
|
60
|
+
const filenameMismatch = decodedFilename !== canonicalFilename;
|
|
61
|
+
if (hasQuery || filenameMismatch) {
|
|
62
|
+
return new Response(null, {
|
|
63
|
+
status: 301,
|
|
64
|
+
headers: {
|
|
65
|
+
Location: redirectLocation,
|
|
66
|
+
// Short cache so corrected identity propagates quickly after renames.
|
|
67
|
+
'Cache-Control': 'public, max-age=3600',
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
27
71
|
const assetUrl = `https:${file.url}`;
|
|
28
72
|
// Fetch the actual file from Contentful CDN
|
|
29
73
|
// We disable the Next.js data cache for the file binary to avoid the 2MB limit warning.
|
|
@@ -34,19 +78,16 @@ export function createDownloadHandler(config) {
|
|
|
34
78
|
if (!fileResponse.ok) {
|
|
35
79
|
return Response.json({ error: 'Failed to fetch file' }, { status: 502 });
|
|
36
80
|
}
|
|
37
|
-
// Build response headers
|
|
38
81
|
const headers = new Headers();
|
|
39
|
-
// Content type from Contentful
|
|
40
82
|
headers.set('Content-Type', file.contentType);
|
|
41
|
-
// Content-Disposition: inline opens in browser, attachment forces download
|
|
42
83
|
const disposition = isBrowserViewable(file.contentType) ? 'inline' : 'attachment';
|
|
43
|
-
headers.set('Content-Disposition', `${disposition}; filename="${
|
|
44
|
-
// Set content length if available
|
|
84
|
+
headers.set('Content-Disposition', `${disposition}; filename="${canonicalFilename}"`);
|
|
45
85
|
if (file.details?.size) {
|
|
46
86
|
headers.set('Content-Length', String(file.details.size));
|
|
47
87
|
}
|
|
48
|
-
// Cache control
|
|
49
88
|
headers.set('Cache-Control', `public, max-age=${revalidate}, s-maxage=${revalidate}`);
|
|
89
|
+
// PDF/binary docs cannot use HTML <link rel="canonical">; Google honors this header.
|
|
90
|
+
headers.set('Link', `<${canonicalAbsolute}>; rel="canonical"`);
|
|
50
91
|
return new Response(fileResponse.body, {
|
|
51
92
|
status: 200,
|
|
52
93
|
headers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-asset.js","sourceRoot":"","sources":["../../src/api/server-asset.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server-asset.js","sourceRoot":"","sources":["../../src/api/server-asset.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
|
-
export { createDownloadHandler, type DownloadHandlerConfig, type DownloadRouteParams, } from './api/server-asset';
|
|
2
|
+
export { buildCanonicalDownloadPath, createDownloadHandler, type DownloadHandlerConfig, type DownloadRouteParams, } from './api/server-asset';
|
|
3
3
|
export { type AssetData, type BaseData, contentTypeHandlers, type IContentTypeHandler, revalidateAsset, revalidateDeletedAsset, revalidateDeletedEntry, revalidateEntry, } from './revalidation/handlers';
|
|
4
4
|
export { createRevalidationHandler, type RevalidationConfig, } from './revalidation/nextjs-route';
|
|
5
5
|
export { handleRevalidation } from './revalidation/route';
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EACL,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,yBAAyB,EACzB,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
2
|
// Download handler
|
|
3
|
-
export { createDownloadHandler, } from './api/server-asset.js';
|
|
3
|
+
export { buildCanonicalDownloadPath, createDownloadHandler, } from './api/server-asset.js';
|
|
4
4
|
export { contentTypeHandlers, revalidateAsset, revalidateDeletedAsset, revalidateDeletedEntry, revalidateEntry, } from './revalidation/handlers.js';
|
|
5
5
|
// Revalidation handlers and routes
|
|
6
6
|
export { createRevalidationHandler, } from './revalidation/nextjs-route.js';
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,mBAAmB;AACnB,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,mBAAmB,EAEnB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,mCAAmC;AACnC,OAAO,EACL,yBAAyB,GAE1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,mBAAmB;AACnB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,mBAAmB,EAEnB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,mCAAmC;AACnC,OAAO,EACL,yBAAyB,GAE1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
|
package/package.json
CHANGED