import { U as UploadResponse } from "../../../packem_shared/types.d-DFh9698o.js"; import { H as Handlers, a as ResponseFile, R as ResponseList, U as UploadOptions } from "../../../packem_shared/types.d-BeCD21R_.js"; export type { A as AsyncHandler, B as BaseHandler, M as MethodHandler, b as RequestEvent, c as UploadErrorEvent, d as UploadEvent } from "../../../packem_shared/types.d-BeCD21R_.js"; import { B as BaseHandlerCore, L as LocationSource } from "../../../packem_shared/tus-base.d-CWXOg_Ui.js"; export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-CWXOg_Ui.js"; import { U as UploadFile } from "../../../packem_shared/storage.d-Cnjmzau5.js"; import 'node:crypto'; import 'node:http'; import 'node:stream'; import 'lru-cache'; import 'node:events'; import '@visulima/pagination'; import "../../../packem_shared/media-transformer.d-2MuwlsDB.js"; import "../../../packem_shared/types.d-JKMJy3u9.js"; /** * Base handler for Web API Fetch platform (Request/Response). * Extends BaseHandlerCore with Fetch-specific request/response handling. * @template TFile The file type used by this handler. */ declare abstract class BaseHandlerFetch extends BaseHandlerCore { /** * Limiting enabled HTTP method handler. */ static readonly methods: Handlers[]; /** * Map of registered HTTP method handlers. */ protected registeredHandlers: Map Promise | ResponseList>>; constructor(options: UploadOptions); /** * Gets the registered handlers map. * @returns Map of registered handlers. */ get handlers(): Map Promise | ResponseList>>; /** * Handles Web API Fetch requests (for Hono, Cloudflare Workers, etc.). * @param request Web API Request object. * @returns Promise resolving to Web API Response. */ fetch(request: Request): Promise; /** * Adjusts a request before it is routed to a method handler (e.g. a protocol's method * override). Throw an HttpError to reject the request. * @param request Web API Request. * @returns The request to route. */ protected normalizeRequest(request: Request): Request; /** * Retrieves a file, its metadata (`/:id/metadata`) or - with `allowList` enabled - a list of files based on the request path. * Large files and `Range` requests are streamed. * @param request Web API Request. * @returns Promise resolving to a single file or a (paginated) list of files. * @throws {HttpError} When the file is not found. */ get(request: Request): Promise | ResponseList>; /** * Returns a list of uploaded files with optional pagination support (`limit` and `page` query parameters). * @param request Web API Request. * @returns Promise resolving to a paginated or complete list of uploaded files. */ list(request: Request): Promise>; /** * Compose and register HTTP method handlers. * Subclasses should override this to register their specific handlers. */ protected abstract compose(): void; /** * Handle the response from handlers for fetch requests and convert to Web API Response. * @param request Web API Request object * @param file Response file or list from handler * @returns Promise resolving to Web API Response object */ protected handleFetchResponse(request: Request, file: ResponseFile | ResponseList): Promise; /** * Convert headers to Web API Headers format by flattening arrays and converting to strings. * @param headers Headers object with potentially array values * @returns Headers object with all values as strings */ protected convertHeaders(headers: Record): Record; /** * Create Web API Response from UploadResponse object. * @param uploadResponse Upload response containing body, headers, and status code * @returns Web API Response object */ protected createResponse(uploadResponse: UploadResponse): globalThis.Response; /** * Create error Response from Error object with appropriate status code and message. * @param error Error object to convert to HTTP error response * @returns Web API Response object with error details */ protected createErrorResponse(error: Error): Promise; /** * Build file URL from request and file data. * @param request Web API Request object * @param file File object containing ID and content type * @returns Constructed file URL with extension based on content type */ protected buildFileUrl(request: Request, file: TFile): string; /** * Negotiates content type based on Accept header and supported formats. * @param request Web API Request object containing Accept header. * @param supportedTypes Array of supported MIME types to match against. * @returns Best matching content type or undefined if no match found. */ negotiateContentType(request: Request, supportedTypes: string[]): string | undefined; } /** * Multipart/form-data upload handler (Web API Fetch version). * @example * ```ts * const multipart = new MultipartFetch({ * storage, * maxFileSize: 100 * 1024 * 1024, // 100MB * }); * * // Use with Hono, Cloudflare Workers, etc. * app.all('/files/*', async (c) => { * return multipart.fetch(c.req.raw); * }); * ``` */ declare class Multipart extends BaseHandlerFetch { /** * Limiting enabled http method handler */ static override readonly methods: Handlers[]; private readonly multipartBase; /** * Maximum file size allowed for multipart uploads */ private maxFileSize; /** * Maximum header size allowed for multipart parser */ private maxHeaderSize; constructor(options: UploadOptions); /** * Handles multipart/form-data POST requests for file uploads. * @param request Web API Request containing multipart data. * @returns Promise resolving to ResponseFile with upload result. */ post(request: Request): Promise>; /** * Delete an uploaded file. * @param request Web API Request with file ID * @returns Promise resolving to ResponseFile with deletion result */ delete(request: Request): Promise>; /** * Handle OPTIONS requests with CORS headers. * @param _request Web API Request (unused) * @returns Promise resolving to ResponseFile with CORS headers */ options(_request: Request): Promise>; /** * Compose and register HTTP method handlers. */ protected compose(): void; } /** * REST API handler for direct binary file uploads (Web API Fetch version). * * This handler provides a clean REST interface for file operations using Web API Request/Response: * - POST: Create a new file with raw binary data or initialize chunked upload * - PUT: Create or update a file (requires ID in URL) * - PATCH: Upload chunks for chunked uploads (requires ID in URL) * - GET: Retrieve a file or list files * - DELETE: Delete a file (single) or multiple files (via ?ids=id1,id2 or JSON body) * - HEAD: Get file metadata and upload progress * - OPTIONS: CORS preflight * @example * ```ts * const rest = new RestFetch({ * storage, * }); * * // Use with Hono, Cloudflare Workers, etc. * app.all('/files/*', async (c) => { * return rest.fetch(c.req.raw); * }); * ``` */ declare class RestFetch extends BaseHandlerFetch { /** * Limiting enabled http method handler */ static override readonly methods: Handlers[]; private readonly restBase; constructor(options: UploadOptions); /** * Compose and register HTTP method handlers. */ protected compose(): void; /** * Creates a new file via POST request with raw binary data. * Supports both full file uploads and chunked upload initialization. * @param request Web API Request with file data. * @returns Promise resolving to ResponseFile with upload result. */ post(request: Request): Promise>; /** * Create or update a file via PUT request. * Requires file ID in the URL path. * @param request Web API Request with file ID and data * @returns Promise resolving to ResponseFile with upload result */ put(request: Request): Promise>; /** * Delete an uploaded file or multiple files. * Supports single file (ID in URL) or batch delete (via ?ids=id1,id2 or JSON body). * @param request Web API Request with file ID(s) * @returns Promise resolving to ResponseFile (single) or ResponseList (batch) with deletion result */ delete(request: Request): Promise | ResponseList>; /** * Uploads a chunk via PATCH request for chunked uploads. * Headers required: X-Chunk-Offset (byte offset), Content-Length (chunk size). * Optional: X-Chunk-Checksum (SHA256 checksum for validation). * @param request Web API Request with chunk data. * @returns Promise resolving to ResponseFile with upload progress. */ patch(request: Request): Promise>; /** * Get file metadata via HEAD request. * For chunked uploads, also returns upload progress information. * @param request Web API Request with file ID * @returns Promise resolving to ResponseFile with metadata headers */ head(request: Request): Promise>; /** * Handle OPTIONS requests with REST API capabilities. * @param _request Web API Request * @returns Promise resolving to ResponseFile with CORS headers */ options(_request: Request): Promise>; } /** * TUS resumable upload protocol handler (Web API Fetch version). * * [tus resumable upload protocol](https://github.com/tus/tus-resumable-upload-protocol/blob/master/protocol.md) * @example * ```ts * const tus = new TusFetch({storage}); * * // Use with Hono, Cloudflare Workers, etc. * app.all('/files/*', async (c) => { * return tus.fetch(c.req.raw); * }); * ``` */ declare class Tus extends BaseHandlerFetch { /** * Limiting enabled http method handler */ static override readonly methods: Handlers[]; private readonly allowMethodOverride; private readonly tusBase; constructor(options: UploadOptions); /** * Web API fetch entrypoint. Wraps the base implementation to ensure every TUS * response — success and error alike — carries the `Tus-Resumable` header, * which the protocol requires on all responses. * @param request Web API Request * @returns Web API Response */ override fetch(request: Request): Promise; /** * Handle OPTIONS requests with TUS protocol capabilities. * @returns Promise resolving to ResponseFile with TUS headers */ options(): Promise>; /** * Creates a new TUS upload and optionally starts uploading data. * @param request Web API Request with TUS headers. * @returns Promise resolving to ResponseFile with upload location and offset. */ post(request: Request): Promise>; /** * Write a chunk of data to an existing TUS upload. * @param request Web API Request with chunk data and TUS headers * @returns Promise resolving to ResponseFile with updated offset */ patch(request: Request): Promise>; /** * Get current upload offset and metadata for TUS resumable uploads. * @param request Web API Request with upload ID * @returns Promise resolving to ResponseFile with upload-offset and metadata headers */ head(request: Request): Promise>; /** * Get TUS upload metadata and current status. * @param request Web API Request with upload ID * @returns Promise resolving to ResponseFile with file metadata as JSON */ override get(request: Request): Promise>; /** * Delete a TUS upload and its associated data. * @param request Web API Request with upload ID * @returns Promise resolving to ResponseFile with deletion confirmation */ delete(request: Request): Promise>; /** * Applies X-HTTP-Method-Override, which TUS core says the server must use as the request's * method. Only a POST tunnelled to PATCH or DELETE is honoured; see {@link resolveMethodOverride}. * @param request Web API Request * @returns The request with the overridden method */ protected override normalizeRequest(request: Request): Request; /** * Compose and register HTTP method handlers. */ protected compose(): void; /** * Build file URL for TUS uploads (without file extension). * @param request Request the upload was created by * @param file File object containing ID * @returns Constructed file URL for TUS protocol */ protected buildFileUrlForTus(request: LocationSource, file: TFile): string; /** * Adapts a Web API request to the runtime-independent {@link TusRequest}. * @param request Web API Request * @returns TUS request */ private static toTusRequest; } export { type Handlers, Multipart, RestFetch as Rest, Tus, type UploadOptions };