UNPKG

2.32 kBJavaScriptView Raw
1var utils = require('./utils')
2 , logger = require('./logger')
3 , request = require('request')
4 , http = require('http')
5 , url = require('url')
6var pkgjson = require('./package.json')
7
8var API_CONFIG = {
9 allowUnverified: false
10 , key: process.env.FAAS_API_KEY
11 , secret: process.env.FAAS_API_SECRET
12 , hostname: 'api.faas.io'
13}
14
15var debug = logger('api') // Local logger.
16
17exports.config = function(config){
18 if (config) {
19 var apiConf = {}
20 if (config.apiKey) { apiConf.key = config.apiKey }
21 if (config.apiSecret) { apiConf.secret = config.apiSecret }
22 apiConfig(apiConf)
23 }
24}
25
26
27exports.apiConfig = apiConfig = function(config){
28 utils.extend(API_CONFIG, config)
29 return utils.shallowCopy(API_CONFIG)
30}
31
32
33////
34// Interface for performing API calls.
35////
36exports.api = function(options, callback){
37 debug('options', options)
38 callback = debug.wrap(callback)
39
40 var urlOpts = options.url
41 // Default the credentials.
42 var query = { apiKey: API_CONFIG.key, apiSecret: API_CONFIG.secret }
43 if (urlOpts.query) {
44 utils.extend(query, urlOpts.query)
45 }
46 query.npmVer = pkgjson.version
47 urlOpts.query = query
48 urlOpts.hostname = API_CONFIG.hostname
49 urlOpts.protocol = 'https:'
50
51 // Be clear about configuration errors.
52 var cfgErrors = []
53 if (!urlOpts.hostname) {
54 cfgErrors.push('blank api hostname')
55 }
56 if (!urlOpts.query.apiKey) {
57 cfgErrors.push('missing api key')
58 }
59 if (!urlOpts.query.apiSecret) {
60 cfgErrors.push('missing api secret')
61 }
62 if (cfgErrors.length > 0) {
63 debug('ERROR urlOpts', urlOpts)
64 callback('Invalid configuration options: '+cfgErrors.join('; '))
65 return
66 }
67
68 var reqOpts = {
69 uri: url.format(urlOpts)
70 , method: options.method || 'GET'
71 , json: options.data || true
72 , encoding: 'utf8'
73 , strictSSL: API_CONFIG.allowUnverified ? false : true // Disable SSL certificate checking.
74 }
75
76 debug('reqOpts', reqOpts)
77
78 request(reqOpts, function(err, res, body){
79 debug('response', res && res.statusCode, res && res.headers, body)
80 if (!err && res && (res.statusCode < 200 || res.statusCode >= 300)) {
81 err = body && body.error || (res.statusCode+": "+http.STATUS_CODES[res.statusCode])+': '+JSON.stringify(body)
82 }
83 if (body && body.data) {
84 body = body.data
85 }
86 callback(err, body)
87 })
88}