';
}
document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
function multiSort(array, sortObject = {}) {
const sortKeys = Object.keys(sortObject);
// Return array if no sort object is supplied.
if (!sortKeys.length) {
return array;
}
// Change the values of the sortObject keys to -1, 0, or 1.
for (let key in sortObject) {
sortObject[key] = sortObject[key] === 'desc' || sortObject[key] === -1 ? -1 :
(sortObject[key] === 'skip' || sortObject[key] === 0 ? 0 : 1);
}
const keySort = (a, b, direction) => {
direction = direction !== null ? direction : 1;
if (a === b) { // If the values are the same, do not switch positions.
return 0;
}
// If b > a, multiply by -1 to get the reverse direction.
return a > b ? direction : -1 * direction;
};
return array.sort((a, b) => {
let sorted = 0;
let index = 0;
// Loop until sorted (-1 or 1) or until the sort keys have been processed.
while (sorted === 0 && index < sortKeys.length) {
const key = sortKeys[index];
if (key) {
const direction = sortObject[key];
sorted = keySort(a[key], b[key], direction);
index++;
}
}
return sorted;
});
}
}
/*************************************************************************************************************/
//SHOW MODAL WITH HOSTING CONTRACT DETAILS
function showHostingContractDetails(counter) {
resetContractExtensionChange();
GlobalHostingContractDetailArray = GlobalHostingContractArray[counter];
$('#contractDetailModal').modal('show');
document.getElementById("contract-detail-name").innerHTML = GlobalHostingContractDetailArray['name'];
var hashOutputString = "";
var hostingContractEntry = "";
for (var i = 1; GlobalHostingContractDetailArray['hash'].length > i; i++) {
addNewTableEntry(GlobalHostingContractDetailArray['hash'][i], GlobalHostingContractDetailArray['path'][i], i);
}
document.getElementById("contract-detail-startblock").innerHTML = GlobalHostingContractDetailArray['startblock'];
document.getElementById("contract-detail-endblock").innerHTML = GlobalHostingContractDetailArray['endblock'];
document.getElementById("contract-detail-status").innerHTML = GlobalHostingContractDetailArray['status'];
document.getElementById("contract-detail-size").innerHTML = (GlobalHostingContractDetailArray['storage'] / 1048576);
function addNewTableEntry(ethoFSHostingContractHash, ethoFSHostingContractPath, count) {
var table = document.getElementById("contract-detail-table");
var row = table.insertRow(count + 10);
var cell1 = row.insertCell(0);
//var cell2 = row.insertCell(1);
//cell1.innerHTML = ethoFSHostingContractPath;
cell1.innerHTML = '' + ethoFSHostingContractHash + '';
}
}
function resetContractDetailTableRows() {
var x = document.getElementById("contract-detail-table").rows.length;
for (var y = (x - 1); y > 10; y--) {
document.getElementById("contract-detail-table").deleteRow(y);
}
}
/*************************************************************************************************************/
//LOCK CONTRACT TABLE DOWN - NO USER ACCOUNT
function outputNoAddressContractTable() {
hostingContracts = '
No Hosting Contracts Found
';
document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
//LOCK CONTRACT TABLE DOWN - NO USER ACCOUNT
function outputNoAddressContractTableWithButton() {
hostingContracts = '
No Hosting Contracts Found
';
document.getElementById("hostingcontractstablebody").innerHTML = hostingContracts;
}
/*************************************************************************************************************/
function resetContractExtensionChange() {
GlobalExtensionDuration = 0;
document.getElementById("contract-extension-cost").innerHTML = 0;
document.getElementById("extend-contract").selectedIndex = "0";
}
/*************************************************************************************************************/
//CONTRACT EXTENSION VALUE CHANGE
function contractExtensionChange(selectObj) {
var index = selectObj.selectedIndex;
var extensionDuration = selectObj.options[index].value;
GlobalExtensionDuration = extensionDuration;
document.getElementById("contract-extension-button").style.visibility = "visible";
var extensionCost = ((GlobalHostingContractDetailArray['storage'] / 1048576) * GlobalHostingCost) * (extensionDuration / 46522);
document.getElementById("contract-extension-cost").innerHTML = round(extensionCost, 2);
}
/*************************************************************************************************************/
//CONTRACT EXTENSION CONFIRM
function contractExtensionConfirmation() {
if (GlobalExtensionDuration > 0) {
var extensionDuration = GlobalExtensionDuration;
var ethoFSController = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
var extensionCost = calculateCost(GlobalHostingContractDetailArray['storage'], extensionDuration, GlobalHostingCostWei);
const transactionObject = {
from: GlobalUserAddress,
value: extensionCost
};
if (privateKeyLogin == true) {
const tx = {
to: GlobalControllerContractAddress,
from: GlobalUserAddress,
value: extensionCost,
gas: 4000000,
data: ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).encodeABI()
};
var privateKey = '0x' + GlobalPrivateKey;
console.log("Private Key: " + privateKey);
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function (signedTransactionData) {
console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
$('#contractDetailModal').modal('hide');
$('#minedBlockTrackerModal').modal('show');
waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').modal('hide');
updateContractTable();
});
} else {
console.log("There was a problem adding new contract");
}
} else {
console.error(error);
}
});
});
} else {
ethoFSController.methods.ExtendContract(GlobalHostingContractDetailArray['address'], extensionDuration).send(transactionObject, function (error, result) {
if (!error) {
if (result) {
$('#contractDetailModal').modal('hide');
$('#minedBlockTrackerModal').modal('show');
waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').modal('hide');
updateContractTable();
});
}
} else {
console.log(error);
}
});
}
}
}
/*************************************************************************************************************/
/* ===========================================================================
Pubsub
=========================================================================== */
const subscribeToHealthChannel = () => {
window.node.pubsub.subscribe(info.id + "_alpha11", healthMessageHandler)
.catch(() => onError('An error occurred when subscribing to the health check workspace.'))
}
const healthMessageHandler = (message) => {
healthMessage = message.data.toString();
UpdateHealthCheckInfo(healthMessage);
}
function UpdateHealthCheckInfo(healthMessage) {
var mainMessage = healthMessage.split(";")[1];
var splitMessage = mainMessage.split(",");
var usedStorageTotal = 0;
var availableStorageTotal = 0;
var activeHistory = 0;
var nodeCounter = 0;
splitMessage.forEach(function (nodeMessage, index) {
var nodeSplitMessage = nodeMessage.split(":");
activeHistory = Number(nodeSplitMessage[5]);
if (activeHistory >= 5) {
nodeCounter++;
usedStorageTotal += Number(nodeSplitMessage[8]);
availableStorageTotal += Number(nodeSplitMessage[7]);
}
if (index == (splitMessage.length - 1)) {
updateStorageArrays(usedStorageTotal, availableStorageTotal, nodeCounter);
}
});
function updateStorageArrays(usedStorageTotal, availableStorageTotal, nodecount) {
if (availableStorageArray.length >= 50) {
if (availableStorageTotal > 0.75 * averageAvailableStorageTotal && availableStorageTotal < 1.25 * averageAvailableStorageTotal) {
availableStorageArray.push(availableStorageTotal);
availableStorageArray.shift();
}
} else {
availableStorageArray.push(availableStorageTotal);
}
if (nodeCountArray.length >= 50) {
nodeCountArray.push(nodecount);
nodeCountArray.shift();
} else {
nodeCountArray.push(nodecount);
}
calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray);
}
function calculateStorageAverages(usedStorageArray, availableStorageArray, nodeCountArray) {
var sumAvailableStorage = 0;
availableStorageArray.forEach(function (value, index) {
sumAvailableStorage += value;
if (index == (availableStorageArray.length - 1)) {
averageAvailableStorageTotal = (sumAvailableStorage / availableStorageArray.length);
document.getElementById("nodestorage").textContent = (round(2 + ((averageAvailableStorageTotal) / 1000000), 1)) + "TB";
}
});
var sumNodeCount = 0;
nodeCountArray.forEach(function (value, index) {
sumNodeCount += value;
if (index == (nodeCountArray.length - 1)) {
var averageNodeCount = (sumNodeCount / nodeCountArray.length) + 19;
document.getElementById("nodecount").textContent = (round(averageNodeCount, 0));
}
});
}
}
const messageHandler = (message) => {
messageString = message.data.toString();
}
const receiveExitMsg = (msg) => console.log("Content Upload Successful")
const exitMessageHandler = (message) => {
const cancelMessageString = message.data.toString()
}
const subscribeToMessaging = () => {
for (var i = 4; i < PeersForChannel.length; i++) {
window.node.pubsub.subscribe(PeersForChannel[i] + "PinningChannel_alpha11", messageHandler)
.catch(() => onError('An error occurred when subscribing to the workspace.'))
}
}
const unsubscribeToMessaging = () => {
for (var i = 4; i < PeersForChannel.length; i++) {
window.node.pubsub.unsubscribe(PeersForChannel[i] + "PinningChannel_alpha11", exitMessageHandler)
.catch(() => onError('An error occurred when unsubscribing to the workspace.'))
}
}
const publishImmediatePin = (hash) => {
const data = Buffer.from(hash)
for (var i = 0; i < PeersForChannel.length; i++) {
var channel = PeersForChannel[i] + "ImmediatePinningChannel_alpha11";
window.node.pubsub.publish(channel, data)
.catch(() => onError('An error occurred when publishing the message.'))
}
}
/* ===========================================================================
Files handling
=========================================================================== */
const resetProgress = () => {
$progressBar.style.transform = 'translateX(-100%)'
}
function appendFile(name, hash, size, data) {
const file = new window.Blob([data], {
type: 'application/octet-binary'
})
const url = window.URL.createObjectURL(file)
const row = document.createElement('tr')
const nameCell = document.createElement('td')
nameCell.innerHTML = name
const hashCell = document.createElement('td')
hashCell.innerHTML = hash
const sizeCell = document.createElement('td')
sizeCell.innerText = size
const downloadCell = document.createElement('td')
const link = document.createElement('a')
link.setAttribute('href', url)
link.setAttribute('download', name)
link.innerHTML = ''
downloadCell.appendChild(link)
row.appendChild(nameCell)
row.appendChild(hashCell)
row.appendChild(sizeCell)
row.appendChild(downloadCell)
$fileHistory.insertBefore(row, $fileHistory.firstChild)
}
function resetFileTable() {
while ($fileHistory.hasChildNodes()) {
$fileHistory.removeChild($fileHistory.firstChild);
}
}
/* Drag & Drop
=========================================================================== */
const onDragEnter = (event) => $dragContainer.classList.add('dragging')
const onDragLeave = () => $dragContainer.classList.remove('dragging')
function startUploadProcess() {
console.log("Starting Upload Process..");
$('#preparingUploadModal').modal('show');
var streamFinishCount = 0;
for (var i = 0; i < MainFileArray.length; i++) {
const streamFiles = (files) => {
const stream = node.addReadableStream()
stream.on('data', function (data) {
console.log("Data...");
console.log(data);
GlobalHashArray.push(`${data.hash}`);
GlobalSizeArray.push(`${data.size}`);
GlobalPathArray.push(`${data.path}`);
GlobalUploadHash = `${data.hash}`;
GlobalUploadPath = `${data.path}`;
var splitString = GlobalUploadPath.split("/")
if (splitString.length == 1 || splitString[0] == "") {
streamFinishCount++;
GlobalMainHashArray.push(`${data.hash}`);
GlobalMainPathArray.push(`${data.path}`);
if (streamFinishCount == MainFileArray.length) {
createMainHash();
}
}
});
files.forEach(file => stream.write(file))
stream.end()
}
var filesForStream = MainFileArray[i];
streamFiles(filesForStream);
}
const streamFilesExternally = (filesArray, MainHashArray) => {
var confirmationServers = ["https://ipfsapi.ethofs.com/ipfs/", "https://ipfsapi1.ethofs.com/ipfs/", "https://ipfsapi2.ethofs.com/ipfs/", "https://ipfsapi5.ethofs.com/ipfs/", "https://ipfsapi6.ethofs.com/ipfs/", "https://ipfsapi7.ethofs.com/ipfs/"];
let hashVerificationArray = [...GlobalHashArray, ...GlobalMainHashArray];
hashVerificationArray.push(GlobalMainContentHash);
var hashConfirmationCount = 0;
var uploadCompleteFlag = false;
for (var i = 0; i < MainHashArray.length; i++) {
console.log("Sending Immediate Pin Request: " + MainHashArray[i]);
publishImmediatePin(MainHashArray[i]);
}
setTimeout(function () {
hashVerificationArray.forEach(function (hash) {
verifyDataUpload(hash);
});
}, 5000);
const verifyDataUpload = async hash => {
var confirmationServer = confirmationServers[Math.floor(Math.random() * confirmationServers.length)];
var url = confirmationServer + hash;
try {
const response = await fetch(url);
console.log("Data Confirmation Status: " + response.status + " Hash: " + hash);
if (response.status == 200) {
hashConfirmationCount++;
var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
updateUploadProgress(confirmationPercentage);
console.log("Data Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length);
$uploadMessage.innerText = "Upload Confirmation Received: " + hashConfirmationCount + "/" + hashVerificationArray.length;
if (confirmationPercentage >= 99) {
$uploadMessage.innerText = "Upload Complete";
document.getElementById("upload-status-message").textContent = "Complete";
if(!uploadCompleteFlag) {
uploadCompleteFlag = true;
updateContractTable();
finishUploadModal();
}
return;
}
} else {
var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
if (confirmationPercentage < 99) {
setTimeout(function () {
verifyDataUpload(hash)
}, 2000);
} else {
return;
}
}
} catch (error) {
console.log(error);
console.log("Data Confirmation Error: " + error.status);
var confirmationPercentage = Math.ceil((hashConfirmationCount / hashVerificationArray.length) * 100);
if (confirmationPercentage < 99) {
setTimeout(function () {
verifyDataUpload(hash)
}, 2000);
} else {
return;
}
}
};
}
function updateUploadProgress(width) {
var elem = document.getElementById("myBar");
width = round(width, 2);
if (width >= 100) {
width = 100;
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
}
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
}
function createMainHash() {
var contentHashString = GlobalChannelString;
for (i = 0; i < GlobalMainHashArray.length; i++) {
contentHashString += ":" + GlobalMainHashArray[i];
}
window.node.add(Buffer.from(contentHashString), (err, res) => {
if (err || !res) {
return console.error('ipfs add error', err, res)
}
res.forEach((file) => {
if (file && file.hash) {
GlobalMainContentHash = file.hash;
AddNewPin(GlobalUploadHash, GlobalUploadSize, document.getElementById('newcontractname').value, GlobalContractDuration);
}
});
});
}
/*****************************************************************************/
function AddNewPin(pinToAdd, pinSize, HostingContractName, HostingContractDuration) {
var contentHashString = GlobalChannelString;
var contentPathString = GlobalChannelString;
for (i = 0; i < GlobalMainHashArray.length; i++) {
contentHashString += ":" + GlobalMainHashArray[i];
contentPathString += ":" + GlobalMainPathArray[i];
}
var MainHashArray = GlobalMainHashArray;
GlobalUploadName = HostingContractName;
var contractCost = calculateCost(pinSize, HostingContractDuration, GlobalHostingCostWei);
var pinAdding = new web3.eth.Contract(GlobalControllerABI, GlobalControllerContractAddress);
const transactionObject = {
from: GlobalUserAddress,
value: contractCost
};
console.log("Contract Address: " + GlobalControllerContractAddress + " Value: " + contractCost);
if (privateKeyLogin == true) {
const tx = {
to: GlobalControllerContractAddress,
from: GlobalUserAddress,
value: contractCost,
gas: 4000000,
data: pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).encodeABI()
};
var privateKey = '0x' + GlobalPrivateKey;
console.log("Private Key: " + privateKey);
web3.eth.accounts.signTransaction(tx, privateKey)
.then(function (signedTransactionData) {
console.log("Signed TX Data: " + signedTransactionData.rawTransaction);
web3.eth.sendSignedTransaction(signedTransactionData.rawTransaction, function (error, result) {
if (!error) {
if (result) {
console.log("Result: " + result);
$('#minedBlockTrackerModal').modal('show');
$('#preparingUploadModal').modal('hide');
waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').modal('hide');
$('#nodeModal').modal('hide');
var filesForStream = MainFileArray;
streamFilesExternally(filesForStream, MainHashArray);
checkForUploadedContentAvailability(HostingContractName);
});
} else {
console.log("There was a problem adding new contract");
}
} else {
console.error(error);
}
});
});
} else {
pinAdding.methods.AddNewContract(GlobalMainContentHash, HostingContractName, HostingContractDuration, pinSize, pinSize, contentHashString, contentPathString).send(transactionObject, function (error, result) {
if (!error) {
if (result) {
$('#minedBlockTrackerModal').modal('show');
$('#preparingUploadModal').modal('hide');
waitForReceipt(result, function (receipt) {
console.log("Transaction Has Been Mined: " + receipt);
$('#minedBlockTrackerModal').modal('hide');
$('#nodeModal').modal('hide');
var filesForStream = MainFileArray;
streamFilesExternally(filesForStream, MainHashArray);
checkForUploadedContentAvailability(HostingContractName);
});
} else {
console.log("There was a problem adding new contract");
}
} else {
console.error(error);
}
});
}
}
/*****************************************************************************/
}
function resetUploadProcess() {
updateUploadProgress(0);
$uploadMessage.innerText = "Preparing Upload";
document.getElementById("upload-status-message").textContent = "";
MainFileArray = new Array();
GlobalUploadSize = 0;
}
function updateAnalyzeProgress(width) {
var elem = document.getElementById("myAnalyzeBar");
width = round(width, 2);
if (width >= 100) {
width = 100;
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
}
elem.style.width = width + '%';
elem.innerHTML = width * 1 + '%';
}
function onFileUpload(event) {
event.preventDefault()
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
MainFileArray.push([]);
let dirSelected = event.target.files;
let dirPath = dirSelected[0].path;
var streamCompareCount = 0;
var totalUploadItems = 0;
readDirectoryContents(dirPath);
function readDirectoryContents(directory) {
console.log("Directory Path: " + directory);
fs.readdir(directory, function (err, filesUploaded) {
if (!err) {
for (let i = 0; filesUploaded.length > i; i++) {
handleItem(filesUploaded[i], directory);
}
} else {
console.log("File Upload Error: " + err);
}
});
}
function handleItem(filename, relativePath) {
var filepath = relativePath.concat('\\', filename);
fs.stat(filepath, function (err, stats) {
if (!err) {
if (stats.isDirectory()) {
readDirectoryContents(filepath)
} else {
streamCompareCount++;
totalUploadItems++;
console.log("File Path: " + filepath);
fs.readFile(filepath, function (err, file) {
var filetowrite = {
path: filepath,
content: file
};
var filename = filepath;
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(stats.size);
fileSize += Number(stats.size);
var totalUploadSizeMB = GlobalUploadSize / 1000000;
appendFile(filepath, filename, stats.size, null);
console.log("Path: " + filepath + " Size: " + stats.size + " Total Size: " + GlobalUploadSize);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
contractDurationChange(document.getElementById('contract-duration').value);
streamCompareCount--;
updateAnalyzeProgress(((totalUploadItems - streamCompareCount) / totalUploadItems));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
}
} else {
console.log("File Stats Error: " + err);
}
});
}
}
function onDrop(event) {
MainFileArray.push([]);
document.getElementById("upload-hash").textContent = "ANALYZING UPLOAD DATA";
document.getElementById("upload-confirm-button").style.visibility = "hidden";
fileSize = 0;
resetProgress();
onDragLeave()
event.preventDefault()
if (GlobalUploadHash != "" && GlobalUploadPath != "") {
GlobalMainHashArray.push(GlobalUploadHash);
GlobalMainPathArray.push(GlobalUploadPath);
}
const dt = event.dataTransfer
const filesDropped = dt.files
const itemsDropped = dt.items
function readFileContents(file) {
return new Promise((resolve) => {
const reader = new window.FileReader()
reader.onload = (event) => resolve(event.target.result)
reader.readAsArrayBuffer(file)
})
}
var totalItemCount = 0;
var streamCompareCount = 0;
function initialHandleItems(items) {
const files = [];
totalItemCount = items.length;
streamCompareCount = items.length;
for (var item of items) {
var awaitHandleEntry = handleEntry(item.webkitGetAsEntry());
}
function handleEntry(entry) {
if (entry.isFile) {
getFile(entry);
function getFile(entry) {
entry.file(function (file) {
readFileContents(file)
.then((buffer) => {
var filePath = entry.fullPath;
var filetowrite = {
path: entry.fullPath,
content: Buffer.from(buffer)
};
MainFileArray[MainFileArray.length - 1].push(filetowrite);
GlobalUploadSize += Number(file.size);
fileSize += Number(file.size);
var totalUploadSizeMB = GlobalUploadSize / 1000000;
appendFile(entry.fullPath, entry.name, file.size, null);
document.getElementById("upload-size").textContent = totalUploadSizeMB;
contractDurationChange(document.getElementById('contract-duration').value);
streamCompareCount--;
updateAnalyzeProgress(((totalItemCount - streamCompareCount) / totalItemCount));
if (streamCompareCount == 0) {
document.getElementById("upload-hash").textContent = "READY FOR UPLOAD";
document.getElementById("upload-confirm-button").style.visibility = "visible";
}
});
});
}
} else if (entry.isDirectory) {
let directoryReader = entry.createReader();
directoryReader.readEntries(function (entries) {
streamCompareCount += entries.length - 1;
totalItemCount += entries.length - 1;
entries.forEach(function (newEntry) {
handleEntry(newEntry);
});
});
}
}
}
initialHandleItems(event.dataTransfer.items);
}
/* ===========================================================================
Peers handling
=========================================================================== */
function connectToPeer(event) {
const multiaddr = $multiaddrInput.value
if (!multiaddr) {
return onError('No multiaddr was inserted.')
}
window.node.swarm.connect(multiaddr)
.then(() => {
onSuccess(`Successfully connected to peer.`)
$multiaddrInput.value = ''
})
.catch(() => onError('An error occurred when connecting to the peer.'))
}
function updatePeerProgress(width, peercount) {
var backgroundcolor = "";
var elem = document.getElementById("myPeerBar");
width = round(width, 2);
if (width >= 100) {
width = 100;
}
if (width >= 80) {
backgroundcolor = '"#3CB371"';
} else if (width >= 40 && width < 80) {
backgroundcolor = '"#FFFF00"';
} else {
backgroundcolor = '"#FF0000"';
}
elem.style.width = width + '%';
}
function refreshPeerList() {
var updatedPeerCount = 0;
window.node.swarm.peers()
.then((peers) => {
const peersAsHtml = peers.reverse()
.map((peer) => {
if (peer.addr) {
const addr = peer.addr.toString()
if (addr.indexOf('ipfs') >= 0) {
return addr
} else {
return addr + peer.peer.id.toB58String()
}
}
})
.map((addr) => {
var splitString = addr.split("/");
addr = splitString[splitString.length - 1];
updatedPeerCount++;
if (!PeersForChannel.includes(addr)) {
PeersForChannel.push(addr);
}
return `