UNPKG

oip-js

Version:

The core module of OIP written in Javascript!

441 lines (352 loc) 12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var low = require('lowdb'); var Memory = require('lowdb/adapters/Memory'); var _ = require('lodash'); var Artifact = require('./Artifact.js'); var Multipart = require('./Multipart.js'); var IndexFunction = function IndexFunction() { var Network = this.Network; var LocStorage = this.localStorage; var settings = this.settings; var Index = {}; Index.db = low(new Memory()); Index.db.defaults({ AllArtifacts: [], SupportedArtifacts: [], Publishers: [], Retailers: [], Promoters: [], Autominers: [], AutominerPools: [], shortHashToLong: [] }).write(); Index.addToDb = function (dbObject, insertObject) { var _Index$db$get; if (Array.isArray(insertObject)) (_Index$db$get = Index.db.get(dbObject)).push.apply(_Index$db$get, _toConsumableArray(insertObject)).write();else Index.db.get(dbObject).push(insertObject).write(); var newDbObj = Index.db.get(dbObject).uniqBy('txid').value(); Index.db.set(dbObject, newDbObj).write(); }; Index.getSupportedArtifacts = function (onSuccess, onError) { var SupportedArtifactList = Index.db.get("SupportedArtifacts").orderBy("timestamp", "desc").value(); if (SupportedArtifactList.length < 50) { Network.getArtifactsFromOIPd(function (artifacts) { var supported = Index.stripUnsupported(artifacts); var filtered = Index.filterArtifacts(supported); onSuccess([].concat(_toConsumableArray(filtered))); }, onError); } else { onSuccess(SupportedArtifactList); } }; Index.getArtifacts = function (pageNumber, onSuccess, onError) { var page = pageNumber || 1; if (isNaN(page) && page !== "*") { onError = onSuccess; onSuccess = pageNumber; page = 1; } var loadMore = function loadMore(newPageNumber, onSuccess, onError) { Network.getArtifactsFromOIPd(newPageNumber, function (artifacts, currentPageNumber) { var supported = Index.stripUnsupported(artifacts); var filtered = Index.filterArtifacts(supported); onSuccess([].concat(_toConsumableArray(filtered)), function (onSuccess, onError) { loadMore(currentPageNumber + 1, onSuccess, onError); }); }, onError); }; loadMore(page, onSuccess, onError); }; Index.getSuggestedContent = function (pageNumber, onSuccess, onError) { Index.getArtifacts(pageNumber, onSuccess, onError); }; Index.stripUnsupported = function (artifacts) { var supportedArtifacts = []; for (var x = artifacts.length - 1; x >= 0; x--) { var tmpArtifact = new Artifact(); try { var fromJS = tmpArtifact.fromJSON(artifacts[x]); var validate = tmpArtifact.isValid(); if (validate && validate.success) supportedArtifacts.push(tmpArtifact);else { if (settings.debug) { console.error(fromJS, validate, artifacts[x], tmpArtifact.toJSON()); } } } catch (e) { if (settings.debug) { console.error(e); } } } return [].concat(supportedArtifacts); }; Index.filterArtifacts = function (artifacts) { var filteredArtifacts = artifacts; if (Array.isArray(settings.artifactFilters)) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = settings.artifactFilters[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var filter = _step.value; filteredArtifacts = _.filter(filteredArtifacts, filter); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } else { filteredArtifacts = _.filter(filteredArtifacts, settings.artifactFilters); } Index.addToDb("SupportedArtifacts", filteredArtifacts); return [].concat(_toConsumableArray(filteredArtifacts)); }; Index.getArtifactFromID = function (id, onSuccess, onError) { var short = false; if (id.length < 11) { short = true; } var artifactInDb = Index.db.get("SupportedArtifacts").find(function (artifact) { if (artifact.getTXID().substr(0, id.length) === id) return true;else return false; }).value(); if (!artifactInDb) { Network.getArtifactFromOIPd(id, function (result) { var supported = Index.stripUnsupported([result]); var filtered = Index.filterArtifacts(supported); onSuccess(filtered[0]); }, onError); } else { onSuccess(artifactInDb); } }; Index.search = function (options, onSuccess, onError) { Network.searchOIPd(options, function (results) { // options.protocol might be undefined! It is not required to be passed. if (!options.protocol || options.protocol === "media") { var supported = Index.stripUnsupported(results); var filtered = Index.filterArtifacts(supported); onSuccess(filtered); } else { onSuccess(results); } }, function (error) { onError(error); }); }; Index.getRegisteredPublishers = function (onSuccess, onError) { var pubs = []; if (LocStorage.registeredPublishers) { pubs = JSON.parse(LocStorage.registeredPublishers).arr; } Network.getPublishersFromOIPd(function (results) { var newPubs = results; for (var i = 0; i < pubs.length; i++) { newPubs.push(pubs[i]); } Index.addToDb("Publishers", results); onSuccess(newPubs); }); }; Index.getRegisteredRetailers = function (onSuccess, onError) { Network.getRetailersFromOIPd(function (results) { Index.addToDb("Retailers", results); onSuccess(results); }); }; Index.getRegisteredPromoters = function (onSuccess, onError) { Network.getPromotersFromOIPd(function (results) { Index.addToDb("Promoters", results); onSuccess(results); }); }; Index.getPublisher = function (id, onSuccess, onError) { if (LocStorage.registeredPublishers) { var pubs = JSON.parse(LocStorage.registeredPublishers).arr; var found = false; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = pubs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var pub = _step2.value; if (pub.address.substr(0, id.length) === id) { found = true; onSuccess(pub); return; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } var publisherInDb = Index.db.get("Publishers").find({ address: id }).value(); if (publisherInDb) { onSuccess(publisherInDb); } else { Network.searchOIPd({ "protocol": "publisher", "search-on": "address", "search-for": id }, function (results) { var pub = results[0]['publisher-data']['alexandria-publisher']; Index.addToDb("Publishers", pub); onSuccess(pub); }, function (err) { onError(err); }); } }; Index.getRetailer = function (id, onSuccess, onError) { var retailerInDb = Index.db.get("Retailers").find({ address: id }).value(); if (retailerInDb) { onSuccess(retailerInDb); } else { Network.searchOIPd({ "protocol": "retailer", "search-on": "address", "search-for": id }, function (results) { var retailer = results[0]; Index.addToDb("Retailers", retailer); onSuccess(retailer); }, function (err) { onError(err); }); } }; Index.getPromoter = function (id, onSuccess, onError) { var retailerInDb = Index.db.get("Promoters").find({ address: id }).value(); if (retailerInDb) { onSuccess(retailerInDb); } else { Index.search({ "protocol": "retailer", "search-on": "address", "search-for": id }, function (results) { var retailer = results[0]; Index.addToDb("Retailers", retailer); onSuccess(retailer); }, function (err) { onError(err); }); } }; Index.getPublisherArtifacts = function (pubAddress, onSuccess, onError) { Index.search({ "protocol": "media", "search-on": "address", "search-for": pubAddress }, function (results) { onSuccess(results.data); }, function (err) { onError(err); }); }; Index.getRandomSuggested = function (onSuccess) { Index.getSupportedArtifacts(function (results) { var randomArt = [].concat(_toConsumableArray(results)).sort(function () { return 0.5 - Math.random(); }).slice(0, 15); onSuccess(randomArt); }); }; Index.stripIndexData = function (artJson) { var strippedArtJSON = { "oip-041": artJson["oip-041"] }; return strippedArtJSON; }; Index.getFloDataFromTXID = function (txid, onSuccess, onError) { Network.getTXFromFlosight(txid, function (tx) { if (tx) onSuccess(tx.floData);else onError("No Transaction Returned on Search!"); }, onError); }; Index.getMultipartsForArtifact = function (txid, onSuccess, onError) { if (!txid || typeof txid !== "string" || txid.length === 0) return onError("You must input a search txid!"); var onContinue = function onContinue(artifact) { var matched = []; var requestTXID = txid; if (txid.length <= 4 && artifact && artifact.txid) { txid = artifact.txid; } if (artifact && artifact.txid) { requestTXID = artifact.txid; if (txid.length <= 4) { txid = artifact.txid; } } Index.getFloDataFromTXID(requestTXID, function (txFloData) { var firstMp = new Multipart(txFloData, requestTXID); var valid = firstMp.isValid(); if (valid.success) { matched.push(firstMp); } else { try { var artJSON; if (txFloData.substr(0, 5) === "json:") artJSON = JSON.parse(txFloData.substr(5, txFloData.length));else artJSON = JSON.parse(txFloData); var tmpArt = new Artifact(artJSON); matched.push(tmpArt); } catch (e) { // Error } } var floDataSearch = txid; if (floDataSearch.length > 10) floDataSearch = floDataSearch.substr(0, 10); Network.searchFloData(floDataSearch, function (results) { if (results && results !== "null") { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = results[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var mp = _step3.value; var tmpMp = new Multipart(); tmpMp.fromString(mp.Message); tmpMp.setTXID(mp.Hash); // Get the shorter string var trimLength = txid.length; // Take whichever is shorter if (tmpMp.getFirstPartTXID().length < trimLength && tmpMp.getFirstPartTXID().length > 0) trimLength = tmpMp.getFirstPartTXID().length; if (txid.substr(0, trimLength) === tmpMp.getFirstPartTXID().substr(0, trimLength)) { matched.push(tmpMp); } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } matched.sort(function (a, b) { return a.getPartNumber() - b.getPartNumber(); }); onSuccess(matched); } else { onSuccess(matched); } }, onError); }, onError); }; Index.getArtifactFromID(txid, onContinue, onContinue); }; this.Index = Index; return this.Index; }; exports.default = IndexFunction;