82 lines
1.4 KiB
JavaScript
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;
|