stratumn-sdk
Version:
Stratumn SDK for Javascript
167 lines (130 loc) • 4.13 kB
JavaScript
import json from 'httpplease/plugins/json';
import httpplease from 'httpplease';
var request = httpplease.use(json);
function send(method, url, args) {
return new Promise(function (resolve, reject) {
request({ method: method, url: url, body: args }, function (err, res) {
var error = err || res.body && res.body.meta && res.body.meta.errorMessage;
if (error) {
reject(error);
} else {
resolve(res);
}
});
});
}
function get(url) {
return send('GET', url);
}
function post(url, args) {
return send('POST', url, args);
}
var config = {
baseUrl: 'https://stratumn.rocks',
applicationUrl: 'https://%s.stratumn.rocks'
};
function linkify(app, obj) {
Object.keys(app.agentInfo.functions).filter(function (key) {
return ['init', 'catchAll'].indexOf(key) < 0;
}).forEach(function (key) {
/*eslint-disable*/
obj[key] = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var url = config.applicationUrl.replace('%s', app.name) + '/links/' + obj.meta.linkHash + '/' + key;
/*eslint-enable*/
return post(url, args).then(function (res) {
return linkify(app, res.body);
});
};
});
/*eslint-disable*/
obj.getPrev = function () {
/*eslint-enable*/
if (obj.link.meta.prevLinkHash) {
return app.getLink(obj.link.meta.prevLinkHash);
}
return Promise.resolve(null);
};
/*eslint-disable*/
obj.getBranches = function (tags) {
/*eslint-enable*/
return app.getBranches(obj.meta.linkHash, tags);
};
/*eslint-disable*/
obj.load = function () {
/*eslint-enable*/
return app.getLink(obj.meta.linkHash);
};
return obj;
}
function createMap(app) {
var url = config.applicationUrl.replace('%s', app.name) + '/maps';
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return post(url, args).then(function (res) {
return linkify(app, res.body);
});
}
function getLink(app, linkHash) {
var url = config.applicationUrl.replace('%s', app.name) + '/links/' + linkHash;
return get(url).then(function (res) {
return linkify(app, res.body);
});
}
function getMap(app, mapId) {
var tags = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];
var query = '';
if (tags && tags.length) {
query = '?tags=' + tags.join('&tags=');
}
var url = config.applicationUrl.replace('%s', app.name) + '/maps/' + mapId + query;
return get(url).then(function (res) {
return res.body.map(function (link) {
return linkify(app, link);
});
});
}
function getMapIds(agent) {
return get(agent.url + '/maps').then(function (res) {
return res.body;
});
}
function getBranches(app, linkHash) {
var tags = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];
var query = '';
if (tags && tags.length) {
query = '?tags=' + tags.join('&tags=');
}
var url = config.applicationUrl.replace('%s', app.name) + '/branches/' + linkHash + query;
return get(url).then(function (res) {
return res.body.map(function (link) {
return linkify(app, link);
});
});
}
function getApplication(appName, appLocation) {
var url = appLocation || config.applicationUrl.replace('%s', appName);
return get(url).then(function (res) {
var app = res.body;
app.url = url;
app.createMap = createMap.bind(null, app);
app.getLink = getLink.bind(null, app);
app.getMap = getMap.bind(null, app);
app.getBranches = getBranches.bind(null, app);
app.getMapIds = getMapIds.bind(null, app);
return app;
});
}
function loadLink(segment) {
return getApplication(segment.meta.application, segment.meta.applicationLocation).then(function (app) {
var url = segment.meta.linkLocation;
return get(url).then(function (res) {
return linkify(app, res.body);
});
});
}
export { getApplication, loadLink, config };
//# sourceMappingURL=stratumn-sdk.mjs.map