From f35d10a63626e690d16e7be4880afa7f1701ee8d Mon Sep 17 00:00:00 2001 From: Cole Bosmann Date: Mon, 6 Nov 2023 21:04:23 -0800 Subject: [PATCH 1/5] fix: internal vs external metadata headers --- src/client.ts | 2 +- src/metadata.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/client.ts b/src/client.ts index febd49d..6ccd3a1 100644 --- a/src/client.ts +++ b/src/client.ts @@ -59,7 +59,7 @@ export class Client { } if (encodedMetadata) { - headers[METADATA_HEADER_EXTERNAL] = encodedMetadata + headers[METADATA_HEADER_INTERNAL] = encodedMetadata } const path = key ? `/${this.siteID}/${storeName}/${key}` : `/${this.siteID}/${storeName}` diff --git a/src/metadata.ts b/src/metadata.ts index 0f80404..7b9c0b4 100644 --- a/src/metadata.ts +++ b/src/metadata.ts @@ -39,8 +39,12 @@ export const getMetadataFromResponse = (response: Response) => { return {} } + // If metadata is coming from the API, it will be under the external header. + // If it's coming from the edge, it will be under the internal header. + const value = response.headers.get(METADATA_HEADER_INTERNAL) || response.headers.get(METADATA_HEADER_EXTERNAL) + try { - return decodeMetadata(response.headers.get(METADATA_HEADER_INTERNAL)) + return decodeMetadata(value) } catch { throw new Error( 'An internal error occurred while trying to retrieve the metadata for an entry. Please try updating to the latest version of the Netlify Blobs client.', From 21487b3cde5eca41eb0db4a9c0b4068e04163184 Mon Sep 17 00:00:00 2001 From: Cole Bosmann Date: Mon, 6 Nov 2023 21:58:30 -0800 Subject: [PATCH 2/5] tests --- src/main.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.test.ts b/src/main.test.ts index 0f56712..aa52044 100644 --- a/src/main.test.ts +++ b/src/main.test.ts @@ -1007,7 +1007,7 @@ describe('setJSON', () => { headers: { authorization: `Bearer ${edgeToken}`, 'cache-control': 'max-age=0, stale-while-revalidate=60', - 'netlify-blobs-metadata': encodedMetadata, + 'x-amz-meta-user': encodedMetadata, }, response: new Response(null), url: `${edgeURL}/${siteID}/production/${key}`, From 0aada9b4f0135b1df4b7f9d2351f77d435d53716 Mon Sep 17 00:00:00 2001 From: Cole Bosmann Date: Mon, 6 Nov 2023 22:47:17 -0800 Subject: [PATCH 3/5] tests --- src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index 73f6df5..cb3b610 100644 --- a/src/server.ts +++ b/src/server.ts @@ -163,7 +163,7 @@ export class BlobsServer { return this.sendResponse(req, res, 400) } - const metadataHeader = req.headers[METADATA_HEADER_EXTERNAL] + const metadataHeader = req.headers[METADATA_HEADER_INTERNAL] const metadata = decodeMetadata(Array.isArray(metadataHeader) ? metadataHeader[0] : metadataHeader ?? null) try { From 1be9a0d12df8ba3ed1512aadd5b93828ad43f422 Mon Sep 17 00:00:00 2001 From: Cole Bosmann Date: Mon, 6 Nov 2023 22:50:52 -0800 Subject: [PATCH 4/5] unused --- src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index cb3b610..ba14875 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os' import { dirname, join, relative, resolve, sep } from 'node:path' import { ListResponse } from './backend/list.ts' -import { decodeMetadata, encodeMetadata, METADATA_HEADER_EXTERNAL, METADATA_HEADER_INTERNAL } from './metadata.ts' +import { decodeMetadata, encodeMetadata, METADATA_HEADER_INTERNAL } from './metadata.ts' import { isNodeError, Logger } from './util.ts' interface BlobsServerOptions { From 3049c90b45b2bc664d4fed4b90e18c791f57413a Mon Sep 17 00:00:00 2001 From: Cole Bosmann Date: Tue, 7 Nov 2023 08:02:22 -0800 Subject: [PATCH 5/5] Update src/metadata.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduardo Bouças --- src/metadata.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metadata.ts b/src/metadata.ts index 7b9c0b4..3e4ef22 100644 --- a/src/metadata.ts +++ b/src/metadata.ts @@ -41,7 +41,7 @@ export const getMetadataFromResponse = (response: Response) => { // If metadata is coming from the API, it will be under the external header. // If it's coming from the edge, it will be under the internal header. - const value = response.headers.get(METADATA_HEADER_INTERNAL) || response.headers.get(METADATA_HEADER_EXTERNAL) + const value = response.headers.get(METADATA_HEADER_EXTERNAL) || response.headers.get(METADATA_HEADER_INTERNAL) try { return decodeMetadata(value)