npm package: @sliksafe/protect
Description: Slik offers you the ability to protect files with end-to-end encryption as a simple drop in NPM package.
Author: Slik
Latest version: 1.0.6

# Ransomware Protection

Slik offers you the ability to protect all your data from ransoms by storing data on an immutable permanent storage, as a simple drop in NPM package.

<hr/>

Once your data is secured using the `@slik/protect` package, it is stored on an immutable permanent storage after being encrypted. You can use this package to permanently store a file version, or a mission critical document with complete privacy. 

## API Keys

Before getting started you would need an API key. 
Create an API key via the console: [https://console.developers.sliksafe.com](https://console.developers.sliksafe.com)

## Demo 

You can play around with the demo app that uses the protect SDK at: 
[https://slikprotectdemo.web.app/](https://slikprotectdemo.web.app/)

## Docs

Please see a few samples below, but you can find the detailed docs here: 
[https://developers.sliksafe.com/docs/package/ransomware-protection](https://developers.sliksafe.com/docs/package/ransomware-protection)


## Install via yarn

```bash
yarn add @sliksafe/protect
```


## Upload a File

You can simply upload a file by calling the uploadFile method after initializing the library. The upload method accepts different parameters based on your requirements, specified in detail below. 

```javascript
// Import SlikProtect
import { SlikProtect } from '@sliksafe/protect'

// Initialize protect
const initParams = { apiKey: "api_key_string" }
const protectHandler = await SlikProtect.initialize(initParams)

// A file/blob/json/text object that needs to be secured.
let data: File | Blob | String = "hello world"

// Protect options
const protectOptions = {
    data: data,
}

protectHandler.secure(protectOptions, (handle, dataId, err) => {
    console.log("The unique identifier of the data protected: ", dataId);
    
    if (!!err) {
      console.error('Failed to protect data: ', err)
    } else {
      console.log("Uploading data progress: ", handle.percentage);

      if (handle.status === "uploaded") {
        console.log("Data protection finished");
        console.log("The uid of protected data: ", dataId);
      }
    }
});

```


## Fetch Data

You can fetch the data protected above in the `secure` API call by simply calling the `get` api call. The `get` api call downloads the data and decrypts it using the encryption key. Example below: 

```javascript
// Get protected file 
const downloadOptions = { 
    dataId: "-N-ZESm8wbGeFuxpawPi",
}

protectHandler.get(downloadOptions, (downloadHandle, data, err) => {
    console.log("Downloading data progress: ", downloadHandle.percentage);
    
    if (downloadHandle.status === "downloaded") {
        console.log("Data download finished");
        console.log("Downloaded data: ", data);
    }
});
```

## Encryption

The protect package automagically handles end-to-end encryption for all your files protected.

Each file is encrypted using military grade AES-256 symmetric key encryption, before it is protected using the package. Also, the file is seamlessly decrypted after being downloaded, before being returned back in the callback.


## Scalability
The Slik infrastructure has been designed to scale with the needs of the developer. It is currently used by thousands of users worldwide to backup terabytes of data.