node_npr/lib/one.js
2016-05-27 13:15:09 -04:00

82 lines
1.4 KiB
JavaScript

'use strict';
const bunyan = require('bunyan'),
helpers = require('./helpers'),
Swagger = require('swagger-client');
class One {
constructor(config) {
this.token = false;
this.swagger_url = 'https://api.npr.org/documentation/beryllium/api-docs';
this.log = false;
Object.assign(this, config || {});
if(! this.log)
this.log = bunyan.createLogger({name: 'npr-one'});
// silence swagger log output
process.env.NODE_ENV = 'test';
}
init(token) {
if(token)
this.setAccessToken(token);
return new Promise((resolve, reject) => {
const client = new Swagger({
url: this.swagger_url,
success: () => {
this.client = client;
helpers.processSwagger(this);
resolve(this);
},
failure: () => {
reject('swagger init failed');
}
});
});
}
setAccessToken(token) {
this.token = token;
return new Promise((resolve, reject) => {
if(! this.token)
return reject('no token supplied');
const auth = new Swagger.ApiKeyAuthorization('Authorization', `Bearer ${token}`, 'header');
this.client.clientAuthorizations.add('oauth2', auth);
resolve();
});
}
getAccessToken() {
return new Promise((resolve, reject) => {
if(! this.token)
return reject('no token supplied');
resolve(this.token);
});
}
}
exports = module.exports = One;