25cf5ce8196cc7d3c6fb8310890ea5ea64898703
About
repertory-js is a Node.js module for interfacing with repertory's remote
mount API.
Installing
npm i @blockstorage/repertory-js
Repertory Configuration
A Repertory mount must be active with the RemoteMount.Enable setting enabled.
RemoteMount.EncryptionToken should also be set to a strong, random password.
Enabling Sia Remote Mount API on Windows Systems
repertory.exe -unmount
repertory.exe -set RemoteMount.Enable true
repertory.exe -set RemoteMount.EncryptionToken 'my password'
[Optional - change listening port]
repertory.exe -set RemoteMount.ApiPort 20202
Enabling Sia Remote Mount API on *NIX Systems
./repertory -unmount
./repertory -set RemoteMount.Enable true
./repertory -set RemoteMount.EncryptionToken 'my password'
[Optional - change listening port]
./repertory -set RemoteMount.ApiPort 20202
S3 Mounts
- For S3 mounts, add
-s3and--name '<my config name>'argument to all commands listed above.
Module Environment Variables
- To successfully complete unit tests, a
repertorymount supporting remote mount needs to be active. Set the following environment variables prior to running tests:TEST_HOSTTEST_PASSWORDTEST_PORT
Example API Usage
import * as rep from "@blockstorage/repertory-js";
//const rep = require("@blockstorage/repertory-js");
// Repertory host settings
const MY_HOST_OR_IP = 'localhost';
const MY_PORT = 20000;
const MY_PASSWORD = 'password';
// Progress callback for uploads / downloads
const progress_cb = (local_path, remote_path, progress, completed) => {
console.log(local_path, remote_path, progress, completed);
};
//****************************************************************************//
// Step 1. Create a connection //
//****************************************************************************//
const conn = await rep.connect(MY_HOST_OR_IP, MY_PORT, MY_TOKEN);
/* Disconnect when complete
await conn.disconnect();
*/
//****************************************************************************//
// Step 2. Create an 'api' instance using the connection //
//****************************************************************************//
const api = rep.create_api(conn);
//****************************************************************************//
// Step 3. Use 'api' //
//****************************************************************************//
//----------------------------------------------------------------------------//
// *********** Directory Operations *********** //
//----------------------------------------------------------------------------//
// Check if directory exists
const exists = await api.directory.exists('/my_directory');
// List directory contents
await api.directory.list('/', async (remote_path, page_count, get_page) => {
for (let i = 0; i < page_count; i++) {
const items = await get_page(i); // Always 'await'
console.log(items);
}
});
// Asynchronous directory list
const snap = await api.directory.snapshot('/');
try {
for (let i = 0; i < snap.page_count; i++) {
const items = await snap.get_page(i); // Always 'await'
console.log(items);
}
} catch (err) {
console.log(err);
} finally {
await snap.release();
}
// Create new directory
await api.directory.create('/test');
// Remove existing directory
await api.directory.remove('/test')
//----------------------------------------------------------------------------//
// *********** File Operations *********** //
//----------------------------------------------------------------------------//
// Check if file exists
const exists = await api.file.exists('/my_file.txt')
// Remove a file
await api.file.remove('/my_file.txt')
// Download a remote file
await api.file.download('/my_file.txt', 'C:\\my_file.txt', progress_cb);
// Download a remote file and overwrite existing local file
await api.file.download('/my_file.txt', 'C:\\my_file.txt', progress_cb, true);
// Resume failed download
await api.file.download('/my_file.txt', 'C:\\my_file.txt', progress_cb, false, true);
// Upload a local file
await api.file.upload('C:\\my_file.txt', '/my_file.txt', progress_cb);
// Upload a local file and overwrite existing remote file
await api.file.upload('C:\\my_file.txt', '/my_file.txt', progress_cb, true);
// Resume failed upload
await api.file.upload('C:\\my_file.txt', '/my_file.txt', progress_cb, false, true);
//----------------------------------------------------------------------------//
// *********** Low-Level File Operations *********** //
//----------------------------------------------------------------------------//
// Create or open a remote file
{
const f = await api.file.create_or_open('/my_file.txt');
await f.close();
}
// Open an existing remote file
{
const f = await api.file.open('/my_file.txt');
await f.close();
}
// Write to a file
{
const f = await api.file.create_or_open('/my_file.txt');
const b = Buffer.alloc(1);
b[0] = 1;
await f.write(0, b); // write '1' byte at file offset '0'
await f.close();
}
// Read from a file
{
const f = await api.file.create_or_open('/my_file.txt');
const b = await f.read(0, 1); // read '1' byte from file offset '0'
await f.close();
}
// Truncate / resize file
{
const f = await api.file.create_or_open('/my_file.txt');
await f.truncate(10);
await f.close();
}
Description
Languages
JavaScript
100%