juriproject-skale-filestorage
v0.0.1
Published
Juri SKALE Filestorage client tools
Downloads
2
Readme
SKALE Filestorage.js
Javascript library which implements client for decentralized file storage on SKALE chains.
- Node.js v8 and v10+ support
Install
Run the following command:
npm i --save @skalenetwork/filestorage.js
Usage
To use Filestorage.js you should have SKALE endpoint.
Example: http://some.local-or-remote.node:8546
Initiating of Filestorage
Construct new Filestorage object:
new Filestorage(web3Provider, enableLogs);
Parameters
| Parameter | Description |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| String | object web3Provider | URL of SKALE endpoint or one of the Web3 provider classes |
| boolean
enableLogs | (optional) Enable/disable console logs |
Example
Initialize with SKALE endpoint:
const Filestorage = require('@skalenetwork/filestorage.js/src/index');
let filestorage = new Filestorage('----SKALE ENDPOINT----');
Initialize with external web3 provider:
const Filestorage = require('@skalenetwork/filestorage.js/src/index');
const Web3 = require('web3');
const web3Provider = new Web3.providers.HttpProvider('----SKALE ENDPOINT----');
let filestorage = new Filestorage(web3Provider);
Upload file
Upload file using internal signing:
filestorage.uploadFile(address, filePath, fileBuffer, privateKey);
Upload file using external signing (Metamask, etc.):
filestorage.uploadFile(address, filePath, fileBuffer);
Parameters
| Parameter | Description |
| ------------------- | ----------------------------------------------------------------- |
| String
address | Account address |
| String
filePath | Path of uploaded file in account directory |
| Buffer
fileBuffer | Uploaded file data |
| String
privateKey | (optional) Account private key, to sign transactions internally |
Returns
| Type | Description |
| :------: | ------------------------------------------- |
| String
| Path of file in Filestorage |
Download file
Download file from Filestorage into browser downloads folder:
filestorage.downloadToFile(storagePath);
Parameters
| Parameter | Description |
| -------------------- | ------------------------------------------- |
| String
storagePath | Path of file in Filestorage |
Download buffer
Download file from Filestorage into buffer
filestorage.downloadToBuffer(storagePath);
Parameters
| Parameter | Description |
| -------------------- | ------------------------------------------- |
| String
storagePath | Path of file in Filestorage |
Returns
| Type | Description |
| :------: | ------------ |
| Buffer
| File content |
Delete file
Delete file using internal signing:
filestorage.deleteFile(address, filePath, privateKey);
Delete file using external signing (Metamask etc):
filestorage.deleteFile(address, filePath);
Parameters
| Parameter | Description |
| ------------------- | ------------------------------------------------------ |
| String
address | Account address |
| String
filePath | Path of the file in account directory to be deleted |
| String
privateKey | (optional) Account private key, to sign transactions |
Create directory
Creates directory on the specific path. To create directory using internal signing:
filestorage.createDirectory(address, directoryPath, privateKey);
Create directory using external signing (Metamask etc):
filestorage.createDirectory(address, directoryPath);
Parameters
| Parameter | Description |
| ------------------------ | ------------------------------------------------------ |
| String
address | Account address |
| String
directoryPath | Path of the directory to be created |
| String
privateKey | (optional) Account private key, to sign transactions |
Returns
| Parameter | Description |
| -------------------- | ------------------------------------------------ |
| String
storagePath | Path of directory in Filestorage |
Delete directory
Deletes directory on the specific path. To delete directory using internal signing:
filestorage.deleteDirectory(address, directoryPath, privateKey);
Create directory using external signing (Metamask etc):
filestorage.deleteDirectory(address, directoryPath);
Parameters
| Parameter | Description |
| ------------------------ | ------------------------------------------------------ |
| String
address | Account address |
| String
directoryPath | Path of the directory to be deleted |
| String
privateKey | (optional) Account private key, to sign transactions |
List directory
Lists content of the specific directory
filestorage.listDirectory(storagePath);
Parameters
| Parameter | Description |
| -------------------- | ------------------------------------------------ |
| String
storagePath | Path of directory in Filestorage |
Returns
Array
of content. Each content could be file or directory.
Content Object
for file contains:
| Field | Description |
| -------------------------- | ------------------------------------------- |
| String
name | File name |
| String
storagePath | Path of file in Filestorage |
| String
isFile | Whether content is file |
| number
size | File size, in bytes |
| number
status | File uploading status |
| number
uploadingProgress | Upload progress, in percents |
Content Object
for directory contains:
| Field | Description |
| -------------------------- | ------------------------------------------------ |
| String
name | Directory name |
| String
storagePath | Path of directory in Filestorage |
| String
isFile | Whether content is file |
Development
Install
git clone [email protected]:skalenetwork/filestorage.js.git
cd filestorage.js
npm install
Testing
First of all, please create random files for testing:
npm run generate
To run tests locally you need environment variables defining test file path and three keypairs (address, foreign, empty):
TEST_FILE_PATH
: path to generated file. Default./test.txt
ENTRYPOINT
: SKALE endpointADDRESS
: test account addressPRIVATEKEY
: test account privatekeyFOREIGN_ADDRESS
: second test account addressFOREIGN_PRIVATEKEY
: second test account privatekeyEMPTY_ADDRESS
: third test account addressEMPTY_PRIVATEKEY
: third test account privatekey
Then execute:
npm test
Build a dist version
Note: Build scripts also do version updating in package.json
# build patch version
npm run build-patch
# build minor version
npm run build-minor
# build major version
npm run build-major
Publishing on npm:
npm publish
Versioning
The version scheme for this repo is {major}.{minor}.{patch} For more details see: https://semver.org/
Lint
Conforming to linting rules is a prerequisite to commit to filestorage.js.
npm run lint
Notes
Storage path
Storage path is a label used to point to file or directory in Filestorage. It contains 2 parts through slash:
- File owner address (without 0x)
- File/directory path in owner's root directory
Example:
77333Da3492C4BBB9CCF3EA5BB63D6202F86CDA8/directoryA/random_text.txt
77333Da3492C4BBB9CCF3EA5BB63D6202F86CDA8/random_text.txt
0x77333Da3492C4BBB9CCF3EA5BB63D6202F86CDA8/random_text.txt #Invalid storagePath
Contributing
If you have any questions please ask our development community on Discord.
License
All contributions are made under the GNU Lesser General Public License v3. See LICENSE.