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/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}`, diff --git a/src/metadata.ts b/src/metadata.ts index 0f80404..3e4ef22 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_EXTERNAL) || response.headers.get(METADATA_HEADER_INTERNAL) + 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.', diff --git a/src/server.ts b/src/server.ts index 73f6df5..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 { @@ -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 {