// Generated by dts-bundle-generator v9.5.1 /** * Bind client options to an operation function, so callers don't have to * repeat the credentials on every call. The returned function keeps the * operation's original signature minus the leading options argument. * * Unlike a client object factory, this never references operations it * isn't given, so tree shaking keeps working: importing `put` plus * `bindOptions` still excludes the multipart code from the bundle. * * @example * import { put, bindOptions } from 'tiny-oss'; * const upload = bindOptions(put, { accessKeyId, accessKeySecret, region, bucket }); * upload('hello.txt', blob); */ export declare function bindOptions(operation: (options: O, ...args: A) => R, options: O): (...args: A) => R; /** * Abort a multipart upload. * * @param protocol provider protocol (OSS or COS) */ export declare function createAbortMultipartUpload(protocol: Protocol): (options: Options, objectName: string, uploadId: string, multipartOptions?: MultipartOptions) => Promise; /** * Complete a multipart upload. * * @param protocol provider protocol (OSS or COS) */ export declare function createCompleteMultipartUpload(protocol: Protocol): (options: Options, objectName: string, uploadId: string, parts: PartInfo[], multipartOptions?: MultipartOptions) => Promise; /** * Initialize a multipart upload. * * @param protocol provider protocol (OSS or COS) */ export declare function createInitMultipartUpload(protocol: Protocol): (options: Options, objectName: string, multipartOptions?: MultipartOptions) => Promise; /** * List parts of a multipart upload. * * @param protocol provider protocol (OSS or COS) */ export declare function createListParts(protocol: Protocol): (options: Options, objectName: string, uploadId: string, query?: ListQuery, multipartOptions?: MultipartOptions) => Promise; /** * List multipart uploads. * * The marker query key is provider-specific: OSS uses `marker`, COS uses * `key-marker` (the protocol carries the right key). * * @param protocol provider protocol (OSS or COS) */ export declare function createListUploads(protocol: Protocol): (options: Options, query?: ListUploadsQuery, multipartOptions?: MultipartOptions) => Promise; /** * Multipart upload with full workflow support. * * @param protocol provider protocol (OSS or COS) * @param deps the protocol-bound multipart primitives */ export declare function createMultipartUpload(protocol: Protocol, deps: MultipartUploadDeps): (options: Options, objectName: string, file: BlobLike | string, multipartOptions?: MultipartUploadOptions) => Promise; /** * Put an object. * * @param protocol provider protocol (OSS or COS) */ export declare function createPut(protocol: Protocol): (options: Options, objectName: string, data: BlobLike | string, putOptions?: PutOptions) => Promise; /** * Put a symlink. OSS and TOS both support it; the provider supplies the * target header through `symlinkHeaders` (OSS URI-encodes the target, TOS * sends it verbatim), and protocols without a symlink API reject the call * (and their entry point does not export it). * * @param protocol provider protocol (OSS or TOS) */ export declare function createPutSymlink(protocol: Protocol): (options: Options, objectName: string, targetObjectName: string) => Promise; /** * Upload a part in a multipart upload. * * @param protocol provider protocol (OSS or COS) */ export declare function createUploadPart(protocol: Protocol): (options: Options, objectName: string, uploadId: string, partNo: number, data: BlobLike | string, start: number, end: number, multipartOptions?: MultipartOptions) => Promise; /** * Upload a part by copying from an existing object. * * @param protocol provider protocol (OSS or COS) */ export declare function createUploadPartCopy(protocol: Protocol): (options: Options, objectName: string, uploadId: string, partNo: number, range: string, sourceData: SourceData, copyOptions?: UploadPartCopyOptions) => Promise; /** Total payload size in bytes, for transports that need it. Shared by every provider. */ export declare function dataSize(data: any): number | undefined; /** * Validate and fill in defaults for client options. The result is a * plain object, so the functional API can be tree-shaken independently * of the TinyOSS class. Shared by every provider; providers may pass * their own defaults (e.g. OBS region 'cn-north-4'). */ export declare function normalizeOptions(options?: Options, defaults?: Record): Options; /** * Resolve the per-request timeout, honoring a per-request override and * tolerating string timeouts. Shared by every provider. */ export declare function resolveTimeout(options: Options, fallback?: number): number | undefined; export interface Checkpoint { file: BlobLike | string; name: string; uploadId: string; partSize: number; parts: PartInfo[]; doneParts: PartInfo[]; } export interface CompleteMultipartUploadResult { name: string; etag: string; bucket?: string; res?: any; } export interface InitMultipartUploadResult { name: string; uploadId: string; res?: any; } export interface ListPartsResult { isTruncated: boolean; nextPartNumberMarker: number; parts: Part[]; res?: any; } export interface ListQuery { "max-parts"?: number; "part-number-marker"?: number; } export interface ListUploadsQuery { prefix?: string; marker?: string; "max-uploads"?: number; "upload-id-marker"?: string; } export interface ListUploadsResult { uploads: UploadInfo[]; isTruncated: boolean; nextKeyMarker?: string; nextUploadIdMarker?: string; res?: any; } export interface MultipartOptions { timeout?: number; headers?: Record; callback?: ObjectCallback; } /** The multipart primitives multipartUpload drives, injected by the entry point. */ export interface MultipartUploadDeps { initMultipartUpload: (options: Options, objectName: string, multipartOptions?: MultipartOptions) => Promise; uploadPart: (options: Options, objectName: string, uploadId: string, partNo: number, data: BlobLike | string, start: number, end: number, multipartOptions?: MultipartOptions) => Promise; completeMultipartUpload: (options: Options, objectName: string, uploadId: string, parts: PartInfo[], multipartOptions?: MultipartOptions) => Promise; } export interface MultipartUploadOptions extends MultipartOptions { parallel?: number; partSize?: number; checkpoint?: Checkpoint; progress?: (percentage: number, checkpoint: Checkpoint, res?: any) => void; meta?: Record; mime?: string; } /** * Server-side upload callback: once the object is stored the provider * calls back the configured URL and relays that response to the client. * Serialized by Aliyun OSS (x-oss-callback / x-oss-callback-var) and * Huawei OBS (x-obs-callback) on put and multipartUpload. COS and TOS * expose the same feature but their official SDKs pass the header value * through verbatim, so those users must set headers (x-cos-callback / * x-tos-callback) themselves. AWS S3 and Azure Blob have no callback API. */ export interface ObjectCallback { url: string; host?: string; body: string; contentType?: string; customValue?: object; headers?: object; } export interface Options { accessKeyId: string; accessKeySecret: string; stsToken?: string; bucket?: string; endpoint?: string; region?: string; internal?: boolean; secure?: boolean; timeout?: string | number; cname?: boolean; pathStyle?: boolean; } export interface Part { PartNumber: number; LastModified: string; ETag: string; Size: number; } export interface PartInfo { number: number; etag: string; } export interface Progress { loaded: number; total: number; lengthComputable: boolean; } /** * Provider-specific behavior collected in one table. Every operation is a * factory over a protocol, so `src/index.ts` binds the OSS protocol and * `src/cos/index.ts` binds the COS protocol; bundlers tree-shake the * unused signer out of each entry. */ export interface Protocol { /** Sign and send a single request through the configured transport. */ request: (options: Options, params: RequestParams) => Promise; /** Object metadata header prefix, e.g. 'x-oss-meta-' or 'x-cos-meta-'. */ metaPrefix: string; /** Copy source header for uploadPartCopy. */ copySourceHeader: string; /** Copy source range header for uploadPartCopy. */ copySourceRangeHeader: string; /** listUploads marker query key: OSS 'marker', COS 'key-marker'. */ listUploadsMarkerKey: string; /** Whether the provider has a symlink API (OSS and TOS do). */ supportsSymlink: boolean; /** * Serialize a symlink target into request headers. OSS and TOS both put * the target in an `x-...-symlink-target` header but encode it * differently, so the provider supplies the header. When absent the OSS * header (`x-oss-symlink-target`, encodeURI'd target) is used. */ symlinkHeaders?: (targetObjectName: string) => Record; /** * Serialize a structured upload callback into provider request * headers (OSS: x-oss-callback / x-oss-callback-var; OBS: * x-obs-callback). Absent on providers without a callback API (COS, * AWS S3, Azure Blob) — passing `callback` to an operation on such a * provider rejects at runtime. */ callbackHeaders?: (callback: ObjectCallback) => Record; /** Build a signed URL for download (or upload). */ signUrl: (options: Options, objectName: string, urlOptions?: SignatureUrlOptions) => string; } export interface PutOptions { onprogress?: (e: Progress) => any; headers?: Record; callback?: ObjectCallback; } /** Per-request parameters, shared by every provider's request implementation. */ export interface RequestParams { verb: string; objectName: string; contentMd5?: string; headers?: Record; subResource?: Record; data?: any; timeout?: number; onprogress?: (e: Progress) => any; } export interface ResponseHeaderType { "content-type"?: string; "content-disposition"?: string; "cache-control"?: string; "content-encoding"?: string; "content-language"?: string; } export interface SignatureUrlOptions { expires?: number; method?: HTTPMethods; "Content-Type"?: string; process?: string; response?: ResponseHeaderType; [key: string]: any; } export interface SourceData { sourceKey: string; sourceBucket?: string; } export interface UploadInfo { uploadId: string; name: string; initiated: string; } export interface UploadPartCopyOptions extends MultipartOptions { headers?: Record; } export interface UploadPartCopyResult { etag: string; lastModified: string; res?: any; } export interface UploadPartResult { name: string; etag: string; res?: any; } export type BlobLike = Blob | ArrayBuffer | Uint8Array; export type HTTPMethods = "GET" | "POST" | "DELETE" | "PUT"; export {};