diff --git a/js/index.ts b/js/index.ts index 10fae3b..822d6d2 100644 --- a/js/index.ts +++ b/js/index.ts @@ -866,6 +866,8 @@ export class PMTiles { d_l = entry.length; } } else { + // TODO: We should in fact return a valid RangeResponse + // with empty data, but filled in cache control / expires headers return undefined; } } diff --git a/serverless/aws/src/index.ts b/serverless/aws/src/index.ts index 163ba0b..05403ed 100644 --- a/serverless/aws/src/index.ts +++ b/serverless/aws/src/index.ts @@ -100,7 +100,12 @@ class S3Source implements Source { const arr = await resp.Body!.transformToByteArray(); - return { data: arr.buffer }; + return { + data: arr.buffer, + etag: resp.ETag, + expires: resp.Expires?.toISOString(), + cacheControl: resp.CacheControl, + }; } } @@ -156,7 +161,7 @@ export const handler = async ( // TODO: metadata and TileJSON if (process.env.CORS) { - headers['Access-Control-Allow-Origin'] = process.env.CORS; + headers["Access-Control-Allow-Origin"] = process.env.CORS; } const source = new S3Source(name); diff --git a/serverless/cloudflare/src/index.ts b/serverless/cloudflare/src/index.ts index 0144bfe..e3b26a4 100644 --- a/serverless/cloudflare/src/index.ts +++ b/serverless/cloudflare/src/index.ts @@ -109,7 +109,12 @@ class R2Source implements Source { } const o = resp as R2ObjectBody; const a = await o.arrayBuffer(); - return { data: a, etag: o.etag }; + return { + data: a, + etag: o.etag, + cacheControl: o.httpMetadata?.cacheControl, + expires: o.httpMetadata?.cacheExpiry?.toISOString(), + }; } }