# About `repertory-js` is a Node.js module for interfacing with `repertory's` remote mount API. ## Installing ```shell npm i @scottg1/repertory-js ``` ## Repertory Configuration A Repertory mount must be active with the `EnableRemoteMount` setting enabled. `RemoteToken` should also be set to a strong, random password. ### Enabling Sia Remote Mount API on Windows Systems ```shell repertory.exe -unmount repertory.exe -set RemoteMount.EnableRemoteMount true repertory.exe -set RemoteMount.RemoteToken "my password" [Optional - change listening port] repertory.exe -set RemoteMount.RemotePort 202020 ``` ### Enabling Sia Remote Mount API on *NIX Systems ```shell ./repertory -unmount ./repertory -set RemoteMount.EnableRemoteMount true ./repertory -set RemoteMount.RemoteToken "my password" [Optional - change listening port] ./repertory -set RemoteMount.RemotePort 202020 ``` ### Skynet and ScPrime Mounts * For Skynet mounts, add `-sk` argument to all commands listed above. * For ScPrime mounts, add `-sp` argument to all commands listed above. ## Example API Usage ```javascript const rep = require('@scottg1/repertory-js'); // Repertory host settings const MY_HOST_OR_IP = 'localhost'; const MY_PORT = 20000; const MY_TOKEN = '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 pool (recommended) */ const conn = await rep.create_pool(8, MY_HOST_OR_IP, MY_PORT, MY_TOKEN); // Or create a single connection for light operations /* const conn = await rep.connect(MY_HOST_OR_IP, MY_PORT, MY_TOKEN); */ /* Step 2. Create an 'api' instance using the connection pool / connection */ const api = rep.create_api(conn); /* Step 3. Use 'api' */ // *********** Directory Operations *********** // // 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); } }); // Create new directory await api.directory.create('/test'); // Remove existing directory await api.directory.remove('/test') // *********** File Operations *********** // // Delete a file await api.file.delete('/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 if it exists 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); ```