UNPKG

@vercel/blob

Version:

The Vercel Blob JavaScript API client

1 lines 84.7 kB
{"version":3,"sources":["/home/runner/work/storage/storage/packages/blob/dist/chunk-Z5BVNHXR.cjs","../src/helpers.ts","../src/multipart/helpers.ts","../src/bytes.ts","../src/api.ts","../src/debug.ts","../src/dom-exception.ts","../src/is-network-error.ts","../src/fetch.ts","../src/xhr.ts","../src/request.ts","../src/put-helpers.ts","../src/multipart/complete.ts","../src/multipart/create.ts","../src/multipart/upload.ts","../src/multipart/create-uploader.ts","../src/put.ts","../src/multipart/uncontrolled.ts","../src/create-folder.ts"],"names":["_a","DOMException","error"],"mappings":"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A;AACA,EAAA;AACmC;AAEjC,EAAA;AAIW,IAAA;AACW,MAAA;AACtB,IAAA;AAEyB,IAAA;AACb,MAAA;AACR,QAAA;AACF,MAAA;AACF,IAAA;AAEsB,IAAA;AACpB,MAAA;AACS,MAAA;AACT,MAAA;AACA,MAAA;AACD,IAAA;AAEe,IAAA;AAEU,IAAA;AACjB,MAAA;AACT,IAAA;AAEyB,IAAA;AAIN,IAAA;AAEI,IAAA;AACC,MAAA;AACtB,MAAA;AACU,QAAA;AACR,QAAA;AACA,QAAA;AACgB,QAAA;AAClB,MAAA;AACA,MAAA;AACK,QAAA;AACH,QAAA;AACF,MAAA;AACF,IAAA;AAEO,IAAA;AACS,MAAA;AACQ,MAAA;AACH,MAAA;AACG,MAAA;AACF,MAAA;AACL,MAAA;AACjB,IAAA;AACF,EAAA;AACF;AhBisCkC;AACA;AkB3vChC;AA5BFA,EAAAA;AA+ByB,EAAA;AAES,EAAA;AAES,EAAA;AAEd,EAAA;AACA,EAAA;AAER,EAAA;AACI,EAAA;AACC,IAAA;AACtB,IAAA;AACU,MAAA;AACR,MAAA;AACgB,MAAA;AAClB,IAAA;AACA,IAAA;AACF,EAAA;AAEO,EAAA;AACS,IAAA;AACK,IAAA;AACrB,EAAA;AACF;AlBuvCkC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/storage/storage/packages/blob/dist/chunk-Z5BVNHXR.cjs","sourcesContent":[null,"// common util interface for blob raw commands, not meant to be used directly\n// this is why it's not exported from index/client\n\nimport type { Readable } from 'node:stream';\nimport { isNodeProcess } from 'is-node-process';\nimport type { RequestInit, Response } from 'undici';\nimport { isNodeJsReadableStream } from './multipart/helpers';\nimport type { PutBody } from './put-helpers';\n\nexport { bytes } from './bytes';\n\nconst defaultVercelBlobApiUrl = 'https://vercel.com/api/blob';\n\nexport interface BlobCommandOptions {\n /**\n * Define your blob API token.\n * @defaultvalue process.env.BLOB_READ_WRITE_TOKEN\n */\n token?: string;\n /**\n * `AbortSignal` to cancel the running request. See https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\n */\n abortSignal?: AbortSignal;\n}\n\n/**\n * The access level of a blob.\n * - 'public': The blob is publicly accessible via its URL.\n * - 'private': The blob requires authentication to access.\n */\nexport type BlobAccessType = 'public' | 'private';\n\n// shared interface for put, copy and multipart upload\nexport interface CommonCreateBlobOptions extends BlobCommandOptions {\n /**\n * Whether the blob should be publicly accessible.\n * - 'public': The blob will be publicly accessible via its URL.\n * - 'private': The blob will require authentication to access.\n */\n access: BlobAccessType;\n /**\n * Adds a random suffix to the filename.\n * @defaultvalue false\n */\n addRandomSuffix?: boolean;\n /**\n * Allow overwriting an existing blob. By default this is set to false and will throw an error if the blob already exists.\n * @defaultvalue false\n */\n allowOverwrite?: boolean;\n /**\n * Defines the content type of the blob. By default, this value is inferred from the pathname. Sent as the 'content-type' header when downloading a blob.\n */\n contentType?: string;\n /**\n * Number in seconds to configure the edge and browser cache. The minimum is 1 minute. There's no maximum but keep in mind that browser and edge caches will do a best effort to respect this value.\n * Detailed documentation can be found here: https://vercel.com/docs/storage/vercel-blob#caching\n * @defaultvalue 30 * 24 * 60 * 60 (1 Month)\n */\n cacheControlMaxAge?: number;\n /**\n * Only perform the operation if the blob's current ETag matches this value.\n * Use this for optimistic concurrency control to prevent overwriting changes made by others.\n * If the ETag doesn't match, a `BlobPreconditionFailedError` will be thrown.\n */\n ifMatch?: string;\n}\n\n/**\n * Event object passed to the onUploadProgress callback.\n */\nexport interface UploadProgressEvent {\n /**\n * The number of bytes uploaded.\n */\n loaded: number;\n\n /**\n * The total number of bytes to upload.\n */\n total: number;\n\n /**\n * The percentage of the upload that has been completed.\n */\n percentage: number;\n}\n\n/**\n * Callback type for tracking upload progress.\n */\nexport type OnUploadProgressCallback = (\n progressEvent: UploadProgressEvent,\n) => void;\n\nexport type InternalOnUploadProgressCallback = (loaded: number) => void;\n\nexport type BlobRequestInit = Omit<RequestInit, 'body'> & { body?: PutBody };\n\nexport type BlobRequest = ({\n input,\n init,\n onUploadProgress,\n}: {\n input: string | URL;\n init: BlobRequestInit;\n onUploadProgress?: InternalOnUploadProgressCallback;\n}) => Promise<Response>;\n\n/**\n * Interface for including upload progress tracking capabilities.\n */\nexport interface WithUploadProgress {\n /**\n * Callback to track the upload progress. You will receive an object with the following properties:\n * - `loaded`: The number of bytes uploaded\n * - `total`: The total number of bytes to upload\n * - `percentage`: The percentage of the upload that has been completed\n */\n onUploadProgress?: OnUploadProgressCallback;\n}\n\nexport function getTokenFromOptionsOrEnv(options?: BlobCommandOptions): string {\n if (options?.token) {\n return options.token;\n }\n\n if (process.env.BLOB_READ_WRITE_TOKEN) {\n return process.env.BLOB_READ_WRITE_TOKEN;\n }\n\n throw new BlobError(\n 'No token found. Either configure the `BLOB_READ_WRITE_TOKEN` environment variable, or pass a `token` option to your calls.',\n );\n}\n\nexport class BlobError extends Error {\n constructor(message: string) {\n super(`Vercel Blob: ${message}`);\n }\n}\n\n/**\n * Generates a download URL for a blob.\n * The download URL includes a ?download=1 parameter which causes browsers to download\n * the file instead of displaying it inline.\n *\n * @param blobUrl - The URL of the blob to generate a download URL for\n * @returns A string containing the download URL with the download parameter appended\n */\nexport function getDownloadUrl(blobUrl: string): string {\n const url = new URL(blobUrl);\n\n url.searchParams.set('download', '1');\n\n return url.toString();\n}\n\n// Extracted from https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\n// It's just nearly impossible to use ESM modules with our current setup\nexport function isPlainObject(value: unknown): boolean {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (\n (prototype === null ||\n prototype === Object.prototype ||\n Object.getPrototypeOf(prototype) === null) &&\n !(Symbol.toStringTag in value) &&\n !(Symbol.iterator in value)\n );\n}\n\nexport const disallowedPathnameCharacters = ['//'];\n\n// Chrome: implemented https://developer.chrome.com/docs/capabilities/web-apis/fetch-streaming-requests\n// Microsoft Edge: implemented (Chromium)\n// Firefox: not implemented, BOO!! https://bugzilla.mozilla.org/show_bug.cgi?id=1469359\n// Safari: not implemented, BOO!! https://github.com/WebKit/standards-positions/issues/24\nexport const supportsRequestStreams = (() => {\n // The next line is mostly for Node.js 16 to avoid trying to do new Request() as it's not supported\n // TODO: Can be removed when Node.js 16 is no more required internally\n if (isNodeProcess()) {\n return true;\n }\n\n const apiUrl = getApiUrl();\n\n // Localhost generally doesn't work with HTTP 2 so we can stop here\n if (apiUrl.startsWith('http://localhost')) {\n return false;\n }\n\n let duplexAccessed = false;\n\n const hasContentType = new Request(getApiUrl(), {\n body: new ReadableStream(),\n method: 'POST',\n // @ts-expect-error -- TypeScript doesn't yet have duplex but it's in the spec: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1729\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nexport function getApiUrl(pathname = ''): string {\n let baseUrl = null;\n try {\n // wrapping this code in a try/catch as this function is used in the browser and Vite doesn't define the process.env.\n // As this varaible is NOT used in production, it will always default to production endpoint\n baseUrl =\n process.env.VERCEL_BLOB_API_URL ||\n process.env.NEXT_PUBLIC_VERCEL_BLOB_API_URL;\n } catch {\n // noop\n }\n\n return `${baseUrl || defaultVercelBlobApiUrl}${pathname}`;\n}\n\nconst TEXT_ENCODER =\n typeof TextEncoder === 'function' ? new TextEncoder() : null;\n\nexport function computeBodyLength(body: PutBody): number {\n if (!body) {\n return 0;\n }\n\n if (typeof body === 'string') {\n if (TEXT_ENCODER) {\n return TEXT_ENCODER.encode(body).byteLength;\n }\n\n // React Native doesn't have TextEncoder\n return new Blob([body]).size;\n }\n\n if ('byteLength' in body && typeof body.byteLength === 'number') {\n // handles Uint8Array, ArrayBuffer, Buffer, and ArrayBufferView\n return body.byteLength;\n }\n\n if ('size' in body && typeof body.size === 'number') {\n // handles Blob and File\n return body.size;\n }\n\n return 0;\n}\n\nexport const createChunkTransformStream = (\n chunkSize: number,\n onProgress?: (bytes: number) => void,\n): TransformStream<ArrayBuffer | Uint8Array> => {\n let buffer = new Uint8Array(0);\n\n return new TransformStream<ArrayBuffer, Uint8Array>({\n transform(chunk, controller) {\n queueMicrotask(() => {\n // Combine the new chunk with any leftover data\n const newBuffer = new Uint8Array(buffer.length + chunk.byteLength);\n newBuffer.set(buffer);\n newBuffer.set(new Uint8Array(chunk), buffer.length);\n buffer = newBuffer;\n\n // Output complete chunks\n while (buffer.length >= chunkSize) {\n const newChunk = buffer.slice(0, chunkSize);\n controller.enqueue(newChunk);\n onProgress?.(newChunk.byteLength);\n buffer = buffer.slice(chunkSize);\n }\n });\n },\n\n flush(controller) {\n queueMicrotask(() => {\n // Send any remaining data\n if (buffer.length > 0) {\n controller.enqueue(buffer);\n onProgress?.(buffer.byteLength);\n }\n });\n },\n });\n};\n\nexport function isReadableStream(value: PutBody): value is ReadableStream {\n return (\n globalThis.ReadableStream && // TODO: Can be removed once Node.js 16 is no more required internally\n value instanceof ReadableStream\n );\n}\n\nexport function isStream(value: PutBody): value is ReadableStream | Readable {\n if (isReadableStream(value)) {\n return true;\n }\n\n if (isNodeJsReadableStream(value)) {\n return true;\n }\n\n return false;\n}\n","import type { Buffer } from 'buffer';\nimport isBuffer from 'is-buffer';\nimport { Readable } from 'stream';\nimport type { PutBody } from '../put-helpers';\n\n/**\n * Input format for a multipart upload part.\n * Used internally for processing multipart uploads.\n */\nexport interface PartInput {\n /**\n * The part number (1-based index).\n */\n partNumber: number;\n\n /**\n * The content of the part.\n */\n blob: PutBody;\n}\n\n/**\n * Represents a single part of a multipart upload.\n * This structure is used when completing a multipart upload to specify the\n * uploaded parts and their order.\n */\nexport interface Part {\n /**\n * The ETag value returned when the part was uploaded.\n * This value is used to verify the integrity of the uploaded part.\n */\n etag: string;\n\n /**\n * The part number of this part (1-based).\n * This number is used to order the parts when completing the multipart upload.\n */\n partNumber: number;\n}\n\nconst supportsNewBlobFromArrayBuffer = new Promise<boolean>((resolve) => {\n // React Native doesn't support creating a Blob from an ArrayBuffer, so we feature detect it\n try {\n const helloAsArrayBuffer = new Uint8Array([104, 101, 108, 108, 111]);\n const blob = new Blob([helloAsArrayBuffer]);\n blob\n .text()\n .then((text) => {\n resolve(text === 'hello');\n })\n .catch(() => {\n resolve(false);\n });\n } catch {\n resolve(false);\n }\n});\n\nexport async function toReadableStream(\n value: PutBody,\n): Promise<ReadableStream<ArrayBuffer | Uint8Array>> {\n // Already a ReadableStream, nothing to do\n if (value instanceof ReadableStream) {\n return value as ReadableStream<ArrayBuffer>;\n }\n\n // In the case of a Blob or File (which inherits from Blob), we could use .slice() to create pointers\n // to the original data instead of loading data in memory gradually.\n // Here's an explanation on this subject: https://stackoverflow.com/a/24834417\n if (value instanceof Blob) {\n return value.stream();\n }\n\n if (isNodeJsReadableStream(value)) {\n return Readable.toWeb(value) as ReadableStream<ArrayBuffer>;\n }\n\n let streamValue: Uint8Array;\n\n // While ArrayBuffer is valid as a fetch body, when used in a ReadableStream it will fail in Node.js with\n // The \"chunk\" argument must be of type string or an instance of Buffer or Uint8Array. Received an instance of ArrayBuffer\n if (value instanceof ArrayBuffer) {\n streamValue = new Uint8Array(value);\n } else if (isNodeJsBuffer(value)) {\n streamValue = value;\n } else {\n // value is a string, we need to convert it to a Uint8Array to get create a stream from it\n streamValue = stringToUint8Array(value as string);\n }\n\n // This line ensures that even when we get a buffer of 70MB, we'll create a stream out of it so we can have\n // better progress indication during uploads\n if (await supportsNewBlobFromArrayBuffer) {\n // @ts-expect-error Uint8Array is compatible with BlobPart at runtime\n return new Blob([streamValue]).stream();\n }\n\n // from https://github.com/sindresorhus/to-readable-stream/blob/main/index.js\n return new ReadableStream<ArrayBuffer | Uint8Array>({\n start(controller) {\n controller.enqueue(streamValue);\n controller.close();\n },\n });\n}\n\n// From https://github.com/sindresorhus/is-stream/\nexport function isNodeJsReadableStream(value: PutBody): value is Readable {\n return (\n typeof value === 'object' &&\n typeof (value as Readable).pipe === 'function' &&\n (value as Readable).readable &&\n typeof (value as Readable)._read === 'function' &&\n // @ts-expect-error _readableState does exists on Readable\n typeof value._readableState === 'object'\n );\n}\n\nfunction stringToUint8Array(s: string): Uint8Array {\n const enc = new TextEncoder();\n return enc.encode(s);\n}\n\nfunction isNodeJsBuffer(value: PutBody): value is Buffer {\n return isBuffer(value);\n}\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n// from https://github.com/visionmedia/bytes.js/blob/master/index.js\n// had too many issues with bundling: https://github.com/vercel/storage/issues/818\ntype ByteUnit = 'b' | 'kb' | 'mb' | 'gb' | 'tb' | 'pb';\n\ntype ByteUnitMap = {\n readonly [_K in ByteUnit]: number;\n};\n\nconst parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\nconst map: ByteUnitMap = {\n b: 1,\n\n kb: 1 << 10,\n\n mb: 1 << 20,\n\n gb: 1 << 30,\n tb: 1024 ** 4,\n pb: 1024 ** 5,\n};\n\nexport function bytes(val: string | number): number | null {\n if (typeof val === 'number' && !Number.isNaN(val)) {\n return val;\n }\n if (typeof val !== 'string') {\n return null;\n }\n\n const results = parseRegExp.exec(val);\n let floatValue: number;\n let unit: ByteUnit = 'b';\n\n if (!results) {\n floatValue = parseInt(val, 10);\n } else {\n const [, res, , , unitMatch] = results;\n if (!res) {\n return null;\n }\n floatValue = parseFloat(res);\n if (unitMatch) {\n unit = unitMatch.toLowerCase() as ByteUnit;\n }\n }\n\n if (Number.isNaN(floatValue)) {\n return null;\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","import retry from 'async-retry';\nimport type { Response } from 'undici';\nimport { debug } from './debug';\nimport { DOMException } from './dom-exception';\nimport type {\n BlobCommandOptions,\n BlobRequestInit,\n WithUploadProgress,\n} from './helpers';\nimport {\n BlobError,\n computeBodyLength,\n getApiUrl,\n getTokenFromOptionsOrEnv,\n} from './helpers';\nimport isNetworkError from './is-network-error';\nimport { blobRequest } from './request';\n\n// maximum pathname length is:\n// 1024 (provider limit) - 26 chars (vercel internal suffixes) - 31 chars (blob `-randomId` suffix) = 967\n// we round it to 950 to make it more human friendly, and we apply the limit whatever the value of\n// addRandomSuffix is, to make it consistent\nexport const MAXIMUM_PATHNAME_LENGTH = 950;\n\nexport class BlobAccessError extends BlobError {\n constructor() {\n super('Access denied, please provide a valid token for this resource.');\n }\n}\n\nexport class BlobContentTypeNotAllowedError extends BlobError {\n constructor(message: string) {\n super(`Content type mismatch, ${message}.`);\n }\n}\n\nexport class BlobPathnameMismatchError extends BlobError {\n constructor(message: string) {\n super(\n `Pathname mismatch, ${message}. Check the pathname used in upload() or put() matches the one from the client token.`,\n );\n }\n}\n\nexport class BlobClientTokenExpiredError extends BlobError {\n constructor() {\n super('Client token has expired.');\n }\n}\n\nexport class BlobFileTooLargeError extends BlobError {\n constructor(message: string) {\n super(`File is too large, ${message}.`);\n }\n}\n\nexport class BlobStoreNotFoundError extends BlobError {\n constructor() {\n super('This store does not exist.');\n }\n}\n\nexport class BlobStoreSuspendedError extends BlobError {\n constructor() {\n super('This store has been suspended.');\n }\n}\n\nexport class BlobUnknownError extends BlobError {\n constructor() {\n super('Unknown error, please visit https://vercel.com/help.');\n }\n}\n\nexport class BlobNotFoundError extends BlobError {\n constructor() {\n super('The requested blob does not exist');\n }\n}\n\nexport class BlobServiceNotAvailable extends BlobError {\n constructor() {\n super('The blob service is currently not available. Please try again.');\n }\n}\n\nexport class BlobServiceRateLimited extends BlobError {\n public readonly retryAfter: number;\n\n constructor(seconds?: number) {\n super(\n `Too many requests please lower the number of concurrent requests ${\n seconds ? ` - try again in ${seconds} seconds` : ''\n }.`,\n );\n\n this.retryAfter = seconds ?? 0;\n }\n}\n\nexport class BlobRequestAbortedError extends BlobError {\n constructor() {\n super('The request was aborted.');\n }\n}\n\nexport class BlobPreconditionFailedError extends BlobError {\n constructor() {\n super('Precondition failed: ETag mismatch.');\n }\n}\n\ntype BlobApiErrorCodes =\n | 'store_suspended'\n | 'forbidden'\n | 'not_found'\n | 'unknown_error'\n | 'bad_request'\n | 'store_not_found'\n | 'not_allowed'\n | 'service_unavailable'\n | 'rate_limited'\n | 'content_type_not_allowed'\n | 'client_token_pathname_mismatch'\n | 'client_token_expired'\n | 'file_too_large'\n | 'precondition_failed';\n\nexport interface BlobApiError {\n error?: { code?: BlobApiErrorCodes; message?: string };\n}\n\n// This version is used to ensure that the client and server are compatible\n// The server (Vercel Blob API) uses this information to change its behavior like the\n// response format\nconst BLOB_API_VERSION = 12;\n\nfunction getApiVersion(): string {\n let versionOverride = null;\n try {\n // wrapping this code in a try/catch as this function is used in the browser and Vite doesn't define the process.env.\n // As this varaible is NOT used in production, it will always default to the BLOB_API_VERSION\n versionOverride =\n process.env.VERCEL_BLOB_API_VERSION_OVERRIDE ||\n process.env.NEXT_PUBLIC_VERCEL_BLOB_API_VERSION_OVERRIDE;\n } catch {\n // noop\n }\n\n return `${versionOverride ?? BLOB_API_VERSION}`;\n}\n\nfunction getRetries(): number {\n try {\n const retries = process.env.VERCEL_BLOB_RETRIES || '10';\n\n return parseInt(retries, 10);\n } catch {\n return 10;\n }\n}\n\nfunction createBlobServiceRateLimited(\n response: Response,\n): BlobServiceRateLimited {\n const retryAfter = response.headers.get('retry-after');\n\n return new BlobServiceRateLimited(\n retryAfter ? parseInt(retryAfter, 10) : undefined,\n );\n}\n\n// reads the body of a error response\nasync function getBlobError(\n response: Response,\n): Promise<{ code: string; error: BlobError }> {\n let code: BlobApiErrorCodes;\n let message: string | undefined;\n\n try {\n const data = (await response.json()) as BlobApiError;\n code = data.error?.code ?? 'unknown_error';\n message = data.error?.message;\n } catch {\n code = 'unknown_error';\n }\n\n // Now that we have multiple API clients out in the wild handling errors, we can't just send a different\n // error code for this type of error. We need to add a new field in the API response to handle this correctly,\n // but for now, we can just check the message.\n if (message?.includes('contentType') && message.includes('is not allowed')) {\n code = 'content_type_not_allowed';\n }\n\n if (\n message?.includes('\"pathname\"') &&\n message.includes('does not match the token payload')\n ) {\n code = 'client_token_pathname_mismatch';\n }\n\n if (message === 'Token expired') {\n code = 'client_token_expired';\n }\n\n if (message?.includes('the file length cannot be greater than')) {\n code = 'file_too_large';\n }\n\n let error: BlobError;\n switch (code) {\n case 'store_suspended':\n error = new BlobStoreSuspendedError();\n break;\n case 'forbidden':\n error = new BlobAccessError();\n break;\n case 'content_type_not_allowed':\n error = new BlobContentTypeNotAllowedError(message!);\n break;\n case 'client_token_pathname_mismatch':\n error = new BlobPathnameMismatchError(message!);\n break;\n case 'client_token_expired':\n error = new BlobClientTokenExpiredError();\n break;\n case 'file_too_large':\n error = new BlobFileTooLargeError(message!);\n break;\n case 'not_found':\n error = new BlobNotFoundError();\n break;\n case 'store_not_found':\n error = new BlobStoreNotFoundError();\n break;\n case 'bad_request':\n error = new BlobError(message ?? 'Bad request');\n break;\n case 'service_unavailable':\n error = new BlobServiceNotAvailable();\n break;\n case 'rate_limited':\n error = createBlobServiceRateLimited(response);\n break;\n case 'precondition_failed':\n error = new BlobPreconditionFailedError();\n break;\n case 'unknown_error':\n case 'not_allowed':\n default:\n error = new BlobUnknownError();\n break;\n }\n\n return { code, error };\n}\n\nexport async function requestApi<TResponse>(\n pathname: string,\n init: BlobRequestInit,\n commandOptions: (BlobCommandOptions & WithUploadProgress) | undefined,\n): Promise<TResponse> {\n const apiVersion = getApiVersion();\n const token = getTokenFromOptionsOrEnv(commandOptions);\n const extraHeaders = getProxyThroughAlternativeApiHeaderFromEnv();\n\n const [, , , storeId = ''] = token.split('_');\n const requestId = `${storeId}:${Date.now()}:${Math.random().toString(16).slice(2)}`;\n let retryCount = 0;\n let bodyLength = 0;\n let totalLoaded = 0;\n const sendBodyLength =\n commandOptions?.onUploadProgress || shouldUseXContentLength();\n\n if (\n init.body &&\n // 1. For upload progress we always need to know the total size of the body\n // 2. In development we need the header for put() to work correctly when passing a stream\n sendBodyLength\n ) {\n bodyLength = computeBodyLength(init.body);\n }\n\n if (commandOptions?.onUploadProgress) {\n commandOptions.onUploadProgress({\n loaded: 0,\n total: bodyLength,\n percentage: 0,\n });\n }\n\n const apiResponse = await retry(\n async (bail) => {\n let res: Response;\n\n // try/catch here to treat certain errors as not-retryable\n try {\n res = await blobRequest({\n input: getApiUrl(pathname),\n init: {\n ...init,\n headers: {\n 'x-api-blob-request-id': requestId,\n 'x-api-blob-request-attempt': String(retryCount),\n 'x-api-version': apiVersion,\n ...(sendBodyLength\n ? { 'x-content-length': String(bodyLength) }\n : {}),\n authorization: `Bearer ${token}`,\n ...extraHeaders,\n ...init.headers,\n },\n },\n onUploadProgress: commandOptions?.onUploadProgress\n ? (loaded) => {\n const total = bodyLength !== 0 ? bodyLength : loaded;\n totalLoaded = loaded;\n const percentage =\n bodyLength > 0\n ? Number(((loaded / total) * 100).toFixed(2))\n : 0;\n\n // Leave percentage 100 for the end of request\n if (percentage === 100 && bodyLength > 0) {\n return;\n }\n\n commandOptions.onUploadProgress?.({\n loaded,\n // When passing a stream to put(), we have no way to know the total size of the body.\n // Instead of defining total as total?: number we decided to set the total to the currently\n // loaded number. This is not inaccurate and way more practical for DX.\n // Passing down a stream to put() is very rare\n total,\n percentage,\n });\n }\n : undefined,\n });\n } catch (error) {\n // if the request was aborted, don't retry\n if (error instanceof DOMException && error.name === 'AbortError') {\n bail(new BlobRequestAbortedError());\n return;\n }\n\n // We specifically target network errors because fetch network errors are regular TypeErrors\n // We want to retry for network errors, but not for other TypeErrors\n if (isNetworkError(error)) {\n throw error;\n }\n\n // If we messed up the request part, don't even retry\n if (error instanceof TypeError) {\n bail(error);\n return;\n }\n\n // retry for any other erros thrown by fetch\n throw error;\n }\n\n if (res.ok) {\n return res;\n }\n\n const { code, error } = await getBlobError(res);\n\n // only retry for certain errors\n if (\n code === 'unknown_error' ||\n code === 'service_unavailable' ||\n code === 'internal_server_error'\n ) {\n throw error;\n }\n\n // don't retry for e.g. suspended stores\n bail(error);\n },\n {\n retries: getRetries(),\n onRetry: (error) => {\n if (error instanceof Error) {\n debug(`retrying API request to ${pathname}`, error.message);\n }\n\n retryCount = retryCount + 1;\n },\n },\n );\n\n if (!apiResponse) {\n throw new BlobUnknownError();\n }\n\n // Calling onUploadProgress here has two benefits:\n // 1. It ensures 100% is only reached at the end of the request. While otherwise you can reach 100%\n // before the request is fully done, as we only really measure what gets sent over the wire, not what\n // has been processed by the server.\n // 2. It makes the uploadProgress \"work\" even in rare cases where fetch/xhr onprogress is not working\n // And in the case of multipart uploads it actually provides a simple progress indication (per part)\n if (commandOptions?.onUploadProgress) {\n commandOptions.onUploadProgress({\n loaded: totalLoaded,\n total: totalLoaded,\n percentage: 100,\n });\n }\n\n return (await apiResponse.json()) as TResponse;\n}\n\nfunction getProxyThroughAlternativeApiHeaderFromEnv(): {\n 'x-proxy-through-alternative-api'?: string;\n} {\n const extraHeaders: Record<string, string> = {};\n\n try {\n if (\n 'VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API' in process.env &&\n process.env.VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API !== undefined\n ) {\n extraHeaders['x-proxy-through-alternative-api'] =\n process.env.VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API;\n } else if (\n 'NEXT_PUBLIC_VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API' in process.env &&\n process.env.NEXT_PUBLIC_VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API !==\n undefined\n ) {\n extraHeaders['x-proxy-through-alternative-api'] =\n process.env.NEXT_PUBLIC_VERCEL_BLOB_PROXY_THROUGH_ALTERNATIVE_API;\n }\n } catch {\n // noop\n }\n\n return extraHeaders;\n}\n\nfunction shouldUseXContentLength(): boolean {\n try {\n return process.env.VERCEL_BLOB_USE_X_CONTENT_LENGTH === '1';\n } catch {\n return false;\n }\n}\n","let debugIsActive = false;\n\n// wrapping this code in a try/catch in case some env doesn't support process.env (vite by default)\ntry {\n if (\n process.env.DEBUG?.includes('blob') ||\n process.env.NEXT_PUBLIC_DEBUG?.includes('blob')\n ) {\n debugIsActive = true;\n }\n} catch {\n // noop\n}\n\n// Set process.env.DEBUG = 'blob' to enable debug logging\nexport function debug(message: string, ...args: unknown[]): void {\n if (debugIsActive) {\n console.debug(`vercel-blob: ${message}`, ...args);\n }\n}\n","// TODO: Once Node 16 is no more needed internally, we can remove this file and use the native DOMException type.\nexport const DOMException =\n globalThis.DOMException ??\n (() => {\n // DOMException was only made a global in Node v17.0.0,\n // but fetch supports >= v16.8.\n try {\n atob('~');\n } catch (err) {\n return Object.getPrototypeOf(err).constructor;\n }\n })();\n","// @ts-nocheck -- This file is copy pasted\n\n// Source: https://github.com/sindresorhus/is-network-error/blob/main/index.js\n// Why: Jest + ES6 modules = harder than maintaining a nuclear plant\n\n/**\n * MIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst objectToString = Object.prototype.toString;\n\nconst isError = (value) => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n 'network error', // Chrome\n 'Failed to fetch', // Chrome\n 'NetworkError when attempting to fetch resource.', // Firefox\n 'The Internet connection appears to be offline.', // Safari 16\n 'Load failed', // Safari 17+\n 'Network request failed', // `cross-fetch`\n 'fetch failed', // Undici (Node.js)\n 'terminated', // Undici (Node.js)\n]);\n\nexport default function isNetworkError(error) {\n const isValid =\n error &&\n isError(error) &&\n error.name === 'TypeError' &&\n typeof error.message === 'string';\n\n if (!isValid) {\n return false;\n }\n\n // We do an extra check for Safari 17+ as it has a very generic error message.\n // Network errors in Safari have no stack.\n if (error.message === 'Load failed') {\n return error.stack === undefined;\n }\n\n return errorMessages.has(error.message);\n}\n","import type { BodyInit } from 'undici';\nimport { fetch } from 'undici';\nimport { debug } from './debug';\nimport type { BlobRequest } from './helpers';\nimport {\n createChunkTransformStream,\n isStream,\n supportsRequestStreams,\n} from './helpers';\nimport { toReadableStream } from './multipart/helpers';\nimport type { PutBody } from './put-helpers';\n\nexport const hasFetch = typeof fetch === 'function';\n\nexport const hasFetchWithUploadProgress = hasFetch && supportsRequestStreams;\n\nconst CHUNK_SIZE = 64 * 1024;\n\nexport const blobFetch: BlobRequest = async ({\n input,\n init,\n onUploadProgress,\n}) => {\n debug('using fetch');\n let body: BodyInit | undefined;\n\n if (init.body) {\n if (onUploadProgress) {\n // We transform the body to a stream here instead of at the call site\n // So that on retries we can reuse the original body, otherwise we would not be able to reuse it\n const stream = await toReadableStream(init.body);\n\n let loaded = 0;\n\n const chunkTransformStream = createChunkTransformStream(\n CHUNK_SIZE,\n (newLoaded: number) => {\n loaded += newLoaded;\n onUploadProgress(loaded);\n },\n );\n\n body = stream.pipeThrough(chunkTransformStream);\n } else {\n body = init.body as BodyInit;\n }\n }\n\n // Only set duplex option when supported and dealing with a stream body\n const duplex =\n supportsRequestStreams && body && isStream(body as PutBody)\n ? 'half'\n : undefined;\n\n return fetch(\n input,\n // @ts-expect-error -- Blob and Nodejs Blob are triggering type errors, fine with it\n {\n ...init,\n ...(init.body ? { body } : {}),\n duplex,\n },\n );\n};\n","import type { Response as UndiciResponse } from 'undici';\nimport { debug } from './debug';\nimport { type BlobRequest, isReadableStream } from './helpers';\n\nexport const hasXhr = typeof XMLHttpRequest !== 'undefined';\n\nexport const blobXhr: BlobRequest = async ({\n input,\n init,\n onUploadProgress,\n}) => {\n debug('using xhr');\n let body: XMLHttpRequestBodyInit | null = null;\n\n // xhr.send only support XMLHttpRequestBodyInit types, excluding ReadableStream (web)\n // and Readable (node)\n // We do have to support ReadableStream being sent to xhr as our library allows\n // for Safari to use put(path, ReadableStream, { onUploadProgress }) which would\n // end up here.\n // We do not ha