# jackett-api

[![CI](https://github.com/STRDCoders/jackett-api/actions/workflows/pull-request.yml/badge.svg)](https://github.com/STRDCoders/jackett-api/actions/workflows/pull-request.yml)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=STRDCoders_jackett-api&metric=alert_status)](https://sonarcloud.io/dashboard?id=STRDCoders_jackett-api)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=STRDCoders_jackett-api&metric=coverage)](https://sonarcloud.io/dashboard?id=STRDCoders_jackett-api)
[![npm](https://badgen.net/badge/npm/Jackett-api?icon=github)](https://www.npmjs.com/package/@strdcoders/jackett-api)
## Overview
The package provides a simple API to communicate with a Jackett server.

## Usage overview
| Function      | Returns       |Description|Exceptions|
| ------------- | ------------- |-----------|----------|
| **isValidServer**  | Promise \<boolean\>  | Sends an HTTP request to test the connection to the server & tries to parse the result(Tests XML type) ||
| **getTorznabIndexers**  | Promise\<Array\<[TorznabIndexerModel](#torznabindexermodel)\>\>  | Fetches a list of all **supported** trackers on Jackett | - HTTP Error <br/> - parse error |
| **getConfiguredIndexers**  | Promise\<Array\<[TorznabIndexerModel](#torznabindexermodel)\>\>  | Fetches a list of all **configured** trackers on Jackett | - HTTP Error <br/> - parse error | 
| **searchAll** | Promise\<Array\<[RssResultModel](#rssresultmodel)\>\> | Fetches a list of torrent results, by a given search query, from all configured trackers combined | - HTTP Error <br/> - parse error |
| **searchIndexers** | Promise\<Array\<[RssResultModel](#rssresultmodel)\>\> | Fetches a list of torrent results, by a given search query, from given indexers | - HTTP Error <br/> - parse error |
| **getIndexerRss** | Promise\<Array\<[RssResultModel](#rssresultmodel)\>\> | Fetches a list of torrent results from an Rss feed of a given indexer | - HTTP Error <br/> - parse error |
| **downloadTorrent** | Promise\<void\> | Downloads a torrent frile of a given RssResult | - HTTP Error <br/> - parse error <br/> - FileSystem errors(Ex. Permissions) |

## Error handling

The API returns promises and it is the implementor׳s responsibility to catch any exception thrown in the process. A list of possible exceptions can be found for each method on the [Usage Overview](#usage-overview) section.

## DTO Structure

### RssResultModel
Represnting an Rss result item.

```typescript
class RssResultModel {
    private _indexerId: string,
    private _indexerName: string,
    private _title: string,
    private _publishDate: Date,
    private _category: string[],
    private _downloadLink: string,
    /** _size Size of the torrent content **/
    private _size: number,
    private _fileCount: number,
    private _grabs: number,
    private _seeders: number,
    private _peers: number
}
```

### TorznabIndexerModel
Representing a Jackett Indexer.

``` typescript
class TorznabIndexerModel {
    private _id: string,
    private _configured: boolean,
    private _title: string,
    private _description: string,
    private _link: string,
    private _language: string,
    private _type: IndexerType
}
```
#### IndexerType
The type of an indexer

```typescript 
enum IndexerType {
  private,
  public,
}
```

## Initialize example
```typescript
const jackettService: JackettService = new JackettService({
  connectionSettings: {
    baseUrl: "https://baseurl.com/jackett/api/v2.0/",
    apiKey: "apikey",
  },
  selfSignedSSL: true,
});
```

The service requires 3 properties to initialize properly:
1. ```baseUrl``` - The base url of the Jackett service.<br/>
**Important:** your path needs to include the api base. It would probably be something like: ```/jackett/api/v2.0/```

2. ```apiKey``` - Your API key from Jackett.

3. ```selfSignedSSL``` - The http client this package uses will reject self signed SSL certificates by default. 
If your Jackett service is hosted with self signed ssl, set this to ```true``` to allow the connection, otherwise set it to ```false```.

## Jackett Version

The code has been tested on Jackett versions: v0.17.xx
