UNPKG

manuscript-api

Version:

A lightweight wrapper for the Manuscript API

72 lines (58 loc) 1.51 kB
/* global Proxy */ var rp = require('request-promise-native'); var urljoin = require('url-join'); var util = require('util'); module.exports = init; function init(site, token) { return new Manuscript(site, token).proxify(); } class Manuscript { constructor(site, token) { Object.assign(this, {token:token, site:site, url: urljoin(site + "/api/")}); } // // Core ES6 Proxy wrapper for the Manuscript JSON API // proxify() { let handler = { get(target, property, receiver) { return function() { if (property == util.inspect.custom){ // See https://stackoverflow.com/a/46928371/864027 return target; } if (property in target) { return target[property](...arguments); } return target.makeRequest(property, ...arguments); }; } }; return new Proxy(this, handler); } async makeRequest(command, options = {}) { options.token = this.token; try { let body = await rp({ method: 'POST', url: `${this.url}${command}`, json: options, }); return body.data; } catch(ex) { let errors = ex.error && ex.error.errors || []; throw {errors: errors}; } } // // Utility functions for common API interactions // async isValid() { try { let data = await this.makeRequest('logon'); return data.token === this.token; } catch (err) { return false; } } }