@putdotio/api-client
Version:
JavaScript SDK for interacting with the put.io API.
171 lines (144 loc) • 3.74 kB
text/typescript
import { ISODateString } from '../../utils/types'
import { IFile } from '../../resources/Files/types'
export type NewTransferParams = {
url: string
save_parent_id?: IFile['id']
callback_url?: string
}
export type NewTransferError = {
url: NewTransferParams['url']
status_code: number
error_type: string
}
type TransferType = 'URL' | 'TORRENT' | 'PLAYLIST' | 'LIVE_STREAM' | 'N/A'
type TransferStatus =
| 'WAITING'
| 'PREPARING_DOWNLOAD'
| 'IN_QUEUE'
| 'DOWNLOADING'
| 'WAITING_FOR_COMPLETE_QUEUE'
| 'WAITING_FOR_DOWNLOADER'
| 'COMPLETING'
| 'STOPPING'
| 'SEEDING'
| 'COMPLETED'
| 'ERROR'
type TransferLink = { url: string; label: string }
type BaseTransfer = {
availability: null | number
created_at: ISODateString
current_ratio: null | number
down_speed: number
downloaded: number
error_message: null | string
estimated_time: null | number
file_id: null | number
finished_at: null | ISODateString
id: number
is_private: boolean
name: string
save_parent_id: number
seconds_seeding: null | number
size: number
source: string
started_at: null | ISODateString
status: TransferStatus
type: TransferType
subscription_id: null | number // ID of the RSS Feed
uploaded: number
up_speed: number
// not documented on api.put.io
callback_url: null | string // not used in clients
client_ip: null | string
completion_percent: number // ⬇️ are they different?
percent_done: number // ⬆️
created_torrent: boolean // not used in clients
download_id: number // not used in clients
hash: null | string // not used in clients
links: TransferLink[] // used in admin
peers_connected: number
peers_getting_from_us: number // not used in clients
peers_sending_to_us: number // not used in clients
simulated: boolean // not used in clients
torrent_link: null | string
tracker: null | string // not used in clients
tracker_message: null | string
updated_at?: ISODateString // not used in clients
userfile_exists?: boolean
}
type FinishedTransfer = BaseTransfer & {
finished_at: ISODateString
file_id: number
}
/* by status */
type CompletedTransfer = FinishedTransfer & {
status: 'COMPLETED'
}
type FailedTransfer = BaseTransfer & {
status: 'ERROR'
error_message: string
}
/* by status, but scoped to type */
type PreparingSeedingTorrentTransfer = FinishedTransfer & {
type: 'TORRENT'
status: 'PREPARING_SEED'
}
type SeedingTorrentTransfer = FinishedTransfer & {
type: 'TORRENT'
status: 'SEEDING'
seconds_seeding: number
current_ratio: number
}
type CompletedTorrentTransfer = SeedingTorrentTransfer & {
status: 'COMPLETED'
}
/* by type */
export type TorrentTransfer = (
| BaseTransfer
| FailedTransfer
| SeedingTorrentTransfer
| PreparingSeedingTorrentTransfer
| CompletedTorrentTransfer
) & {
type: 'TORRENT'
torrent_link: string
}
export type URLTransfer = (
| BaseTransfer
| FailedTransfer
| CompletedTransfer
) & {
type: 'URL'
}
export type PlaylistTransfer = (
| BaseTransfer
| FailedTransfer
| CompletedTransfer
) & {
type: 'PLAYLIST'
// not documented in swagger
// not present in transfers/list response, but comes within socket updates.
downloaded_items: number
total_items: number
// why present in this one? it's not live recording.
recorded_seconds: number
}
export type LiveStreamTransfer = (
| BaseTransfer
| FailedTransfer
| CompletedTransfer
) & {
type: 'LIVE_STREAM'
// not documented in swagger
recorded_seconds: number
}
export type Transfer =
| TorrentTransfer
| URLTransfer
| PlaylistTransfer
| LiveStreamTransfer
export interface ITransfersResponse {
transfers: Transfer[]
total: number
cursor: string
}