import { EventEmitter } from 'node:events'; /** A single asset to upload: either a path string or a `{ name, path }` object. */ export type Asset = string | { name?: string; path: string; }; /** Options for {@link uploadAssets}. */ export interface UploadOptions { /** GitHub release upload URL, e.g. `https://uploads.github.com/...{?name}`. */ url: string; /** Assets to upload, as path strings or `{ name, path }` objects. */ assets: Asset[]; /** GitHub token (required). */ token: string; } /** Progress payload emitted on the `upload-progress` event. */ export interface UploadProgress { /** Fraction complete, 0–100. */ percentage: number; /** Bytes transferred so far. */ transferred: number; /** Total bytes to transfer. */ length: number; /** Bytes remaining. */ remaining: number; /** Estimated seconds remaining. */ eta: number; /** Seconds elapsed. */ runtime: number; /** Bytes since the previous progress event. */ delta: number; /** Bytes per second. */ speed: number; } /** Completion callback. Receives an error, or the list of uploaded filenames. */ export type UploadCallback = (err: Error | null, files?: string[]) => void; /** EventEmitter returned by {@link uploadAssets}, typed for the events it emits. */ export interface Uploader extends EventEmitter { on(event: 'upload-asset', listener: (name: string) => void): this; on(event: 'upload-progress', listener: (name: string, progress: UploadProgress) => void): this; on(event: 'uploaded-asset', listener: (name: string) => void): this; on(event: string | symbol, listener: (...args: any[]) => void): this; } /** * Upload assets to a GitHub release. Returns an EventEmitter and starts * immediately. The optional callback receives `(err, files)`. */ export declare function uploadAssets(opts: UploadOptions, cb?: UploadCallback): Uploader; export default uploadAssets;