stratumn-sdk
Version:
Stratumn SDK for Javascript
179 lines (139 loc) • 4.75 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('httpplease/plugins/json'), require('httpplease')) :
typeof define === 'function' && define.amd ? define(['exports', 'httpplease/plugins/json', 'httpplease'], factory) :
(factory((global.StratumnSDK = global.StratumnSDK || {}),global.json,global.httpplease));
}(this, (function (exports,json,httpplease) { 'use strict';
json = 'default' in json ? json['default'] : json;
httpplease = 'default' in httpplease ? httpplease['default'] : 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);
});
});
}
exports.getApplication = getApplication;
exports.loadLink = loadLink;
exports.config = config;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=stratumn-sdk.js.map