directive @oneOf on INPUT_OBJECT | FIELD_DEFINITION
directive @stream on FIELD_DEFINITION
type ArchiveFS implements Dir & FsEntry {
	name: String!
	entries: [FsEntry!]!
	size: Int!
}
input BooleanFilter @oneOf {
	eq: Boolean
}
type CleanupResponse {
	count: Int!
	list: [String!]!
}
scalar DateTime
input DateTimeFilter @oneOf {
	eq: DateTime
	gt: DateTime
	lt: DateTime
	gte: DateTime
	lte: DateTime
}
interface Dir implements FsEntry {
	name: String!
	entries: [FsEntry!]!
}
type DownloadTorrentResponse {
	task: Task
}
interface File implements FsEntry {
	name: String!
	size: Int!
}
interface FsEntry {
	name: String!
}
input IntFilter @oneOf {
	eq: Int
	gt: Int
	lt: Int
	gte: Int
	lte: Int
	in: [Int!]
}
type Mutation {
	validateTorrents(filter: TorrentFilter!): Boolean!
	cleanupTorrents(files: Boolean, dryRun: Boolean!): CleanupResponse!
	downloadTorrent(infohash: String!, file: String): DownloadTorrentResponse
	uploadFile(dir: String!, file: Upload!): Boolean!
	dedupeStorage: Int!
}
input Pagination {
	offset: Int!
	limit: Int!
}
interface Progress {
	current: Int!
	total: Int!
}
type Query {
	torrents(filter: TorrentsFilter): [Torrent!]!
	fsEntry(path: String!): FsEntry
}
type ResolverFS implements Dir & FsEntry {
	name: String!
	entries: [FsEntry!]!
}
type Schema {
	query: Query
	mutation: Mutation
}
type SimpleDir implements Dir & FsEntry {
	name: String!
	entries: [FsEntry!]!
}
type SimpleFile implements File & FsEntry {
	name: String!
	size: Int!
}
input StringFilter @oneOf {
	eq: String
	substr: String
	in: [String!]
}
type Subscription {
	taskProgress(taskID: ID!): Progress
	torrentDownloadUpdates: TorrentProgress
}
type Task {
	id: ID!
}
type Torrent {
	name: String!
	infohash: String!
	bytesCompleted: Int!
	torrentFilePath: String!
	bytesMissing: Int!
	files: [TorrentFile!]!
	excludedFiles: [TorrentFile!]!
	peers: [TorrentPeer!]!
	downloading: Boolean!
}
type TorrentFS implements Dir & FsEntry {
	name: String!
	torrent: Torrent!
	entries: [FsEntry!]!
}
type TorrentFile {
	filename: String!
	size: Int!
	bytesCompleted: Int!
}
type TorrentFileEntry implements File & FsEntry {
	name: String!
	torrent: Torrent!
	size: Int!
}
input TorrentFilter @oneOf {
	everything: Boolean
	infohash: String
}
type TorrentPeer {
	ip: String!
	downloadRate: Float!
	discovery: String!
	port: Int!
	clientName: String!
}
type TorrentProgress implements Progress {
	torrent: Torrent!
	current: Int!
	total: Int!
}
input TorrentsFilter {
	infohash: StringFilter
	name: StringFilter
	bytesCompleted: IntFilter
	bytesMissing: IntFilter
	peersCount: IntFilter
	downloading: BooleanFilter
}
scalar Upload