Skip to content

Commit 7872e61

Browse files
authored
feat(blob): Ensure contentType always has a value in blob results (#803)
* feat(blob): Ensure contentType always has a value in blob results Before this commit, when using extension less pathnames or unknown extensions (like wxss) then: - Errors would be imprecise ("contentType is not allowed", empty string issue) - When creating blobs, contentType would be undefined Once you upgrade: - We will default to 'application/octet-stream' when we can't find a correct mime type from extension or no extension in pathname - Errors will be precise ("contentType 'application/octet-stream' is not allowed) - contentType is always present on put/upload/copy This is a BREAKING CHANGE if you were used to do something like: ```js if (contentType === undefined) { // do something } ``` * changeset * fix tests
1 parent 3491560 commit 7872e61

File tree

6 files changed

+18
-13
lines changed

6 files changed

+18
-13
lines changed

.changeset/rich-ligers-run.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@vercel/blob': minor
3+
---
4+
5+
contentType default is now 'application/octet-stream' instead of `undefined`

packages/blob/src/api.node.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ describe('api', () => {
6666
authorization: 'Bearer 123',
6767
'x-api-blob-request-attempt': '0',
6868
'x-api-blob-request-id': expect.any(String) as string,
69-
'x-api-version': '7',
69+
'x-api-version': '8',
7070
},
7171
method: 'POST',
7272
},

packages/blob/src/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export interface BlobApiError {
126126
// This version is used to ensure that the client and server are compatible
127127
// The server (Vercel Blob API) uses this information to change its behavior like the
128128
// response format
129-
const BLOB_API_VERSION = 7;
129+
const BLOB_API_VERSION = 8;
130130

131131
function getApiVersion(): string {
132132
let versionOverride = null;

packages/blob/src/client.browser.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ describe('client', () => {
9292
authorization: 'Bearer vercel_blob_client_fake_123',
9393
'x-api-blob-request-attempt': '0',
9494
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
95-
'x-api-version': '7',
95+
'x-api-version': '8',
9696
},
9797
method: 'PUT',
9898
},
@@ -207,7 +207,7 @@ describe('client', () => {
207207
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
208208
'x-api-blob-request-attempt': '0',
209209
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
210-
'x-api-version': '7',
210+
'x-api-version': '8',
211211
'x-mpu-action': 'create',
212212
},
213213
method: 'POST',
@@ -224,7 +224,7 @@ describe('client', () => {
224224
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
225225
'x-api-blob-request-attempt': '0',
226226
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
227-
'x-api-version': '7',
227+
'x-api-version': '8',
228228
'x-mpu-action': 'upload',
229229
'x-mpu-key': 'key',
230230
'x-mpu-upload-id': 'uploadId',
@@ -243,7 +243,7 @@ describe('client', () => {
243243
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
244244
'x-api-blob-request-attempt': '0',
245245
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
246-
'x-api-version': '7',
246+
'x-api-version': '8',
247247
'x-mpu-action': 'upload',
248248
'x-mpu-key': 'key',
249249
'x-mpu-upload-id': 'uploadId',
@@ -266,7 +266,7 @@ describe('client', () => {
266266
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
267267
'x-api-blob-request-attempt': '0',
268268
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
269-
'x-api-version': '7',
269+
'x-api-version': '8',
270270
'x-mpu-action': 'complete',
271271
'x-mpu-key': 'key',
272272
'x-mpu-upload-id': 'uploadId',
@@ -349,7 +349,7 @@ describe('client', () => {
349349
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
350350
'x-api-blob-request-attempt': '0',
351351
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
352-
'x-api-version': '7',
352+
'x-api-version': '8',
353353
'x-mpu-action': 'create',
354354
},
355355
method: 'POST',
@@ -366,7 +366,7 @@ describe('client', () => {
366366
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
367367
'x-api-blob-request-attempt': '0',
368368
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
369-
'x-api-version': '7',
369+
'x-api-version': '8',
370370
'x-mpu-action': 'upload',
371371
'x-mpu-key': 'key',
372372
'x-mpu-upload-id': 'uploadId',
@@ -385,7 +385,7 @@ describe('client', () => {
385385
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
386386
'x-api-blob-request-attempt': '0',
387387
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
388-
'x-api-version': '7',
388+
'x-api-version': '8',
389389
'x-mpu-action': 'upload',
390390
'x-mpu-key': 'key',
391391
'x-mpu-upload-id': 'uploadId',
@@ -408,7 +408,7 @@ describe('client', () => {
408408
authorization: 'Bearer vercel_blob_client_fake_token_for_test',
409409
'x-api-blob-request-attempt': '0',
410410
'x-api-blob-request-id': `fake:${Date.now()}:${requestId}`,
411-
'x-api-version': '7',
411+
'x-api-version': '8',
412412
'x-mpu-action': 'complete',
413413
'x-mpu-key': 'key',
414414
'x-mpu-upload-id': 'uploadId',

packages/blob/src/copy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface CopyBlobResult {
88
url: string;
99
downloadUrl: string;
1010
pathname: string;
11-
contentType?: string;
11+
contentType: string;
1212
contentDisposition: string;
1313
}
1414

packages/blob/src/put-helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface PutBlobResult {
1919
url: string;
2020
downloadUrl: string;
2121
pathname: string;
22-
contentType?: string;
22+
contentType: string;
2323
contentDisposition: string;
2424
}
2525

0 commit comments

Comments
 (0)