Comparing version 4.2.0 to 4.3.0
@@ -0,3 +1,25 @@ | ||
function getType(v) { | ||
if (v === undefined || v === null || typeof v === 'function') { | ||
return 'any'; | ||
} else if (typeof v !== 'object') { | ||
return typeof v; | ||
} else { | ||
return Array.isArray(v) ? 'array' : (Buffer.isBuffer(v) ? 'buffer' : 'object'); | ||
} | ||
}; | ||
function formatBuffer(b) { | ||
return Buffer.isBuffer(b) ? {_base64: b.toString('base64')} : b; | ||
let type = getType(b); | ||
if (type === 'object') { | ||
return Object.keys(b).reduce(function (obj, key) { | ||
obj[key] = formatBuffer(b[key]); | ||
return obj; | ||
}, {}); | ||
} else if (type === 'array') { | ||
return b.map(elem => formatBuffer(elem)); | ||
} else { | ||
return Buffer.isBuffer(b) ? {_base64: b.toString('base64')} : b; | ||
} | ||
} | ||
@@ -4,0 +26,0 @@ |
@@ -1,4 +0,4 @@ | ||
const https = require('https'); | ||
const http = require('http'); | ||
const request = require('./request.js'); | ||
const HOST = 'api.stdlib.com'; | ||
@@ -11,22 +11,3 @@ const PORT = 443; | ||
function parseBuffers (value, contentType) { | ||
if (Buffer.isBuffer(value)) { | ||
var buffer = value; | ||
buffer.contentType = contentType || 'application/octet-stream'; | ||
return buffer; | ||
} else if (Array.isArray(value)) { | ||
return value.map(v => parseBuffers(v)); | ||
} else if (value && typeof value === 'object' && Object.keys(value).length === 1 && typeof value._base64 === 'string') { | ||
var buffer = Buffer.from(value._base64, 'base64'); | ||
buffer.contentType = contentType || 'application/octet-stream'; | ||
return buffer; | ||
} else if (value &&typeof value === 'object') { | ||
return Object.keys(value).reduce((n, key) => { | ||
n[key] = parseBuffers(value[key]); | ||
return n; | ||
}, {}); | ||
} else { | ||
return value; | ||
} | ||
}; | ||
const MAX_REDIRECTS = 1; | ||
@@ -87,69 +68,9 @@ module.exports = (cfg, names, params, callback) => { | ||
cfg.token && (headers['Authorization'] = `Bearer ${cfg.token}`); | ||
cfg.keys && (headers['X-Authorization-Keys'] = JSON.stringify(cfg.keys)); | ||
cfg.webhook && (headers['X-Webhook'] = cfg.webhook); // TODO: Deprecate | ||
cfg.convert && (headers['X-Convert-Strings'] = 'true'); | ||
headers['X-Stdlib-Stack-Trace'] = process.env.__STDLIB_STACK_TRACE || ''; | ||
cfg.bg && (pathname += `:bg${typeof cfg.bg === 'string' ? '=' + encodeURIComponent(cfg.bg) : ''}`); | ||
return request(cfg, 'POST', pathname, headers, body, names, MAX_REDIRECTS, (err, res, resHeaders) => { | ||
if (err) { | ||
return callback(err); | ||
} | ||
return callback(null, res, resHeaders); | ||
}) | ||
let responded = false; | ||
let req = (cfg.port === 443 ? https : http).request({ | ||
host: cfg.host, | ||
method: 'POST', | ||
headers: headers, | ||
port: cfg.port, | ||
path: `${cfg.path}${pathname}`, | ||
agent: false | ||
}, function (res) { | ||
let buffers = []; | ||
res.on('data', chunk => buffers.push(chunk)); | ||
res.on('end', () => { | ||
var response = Buffer.concat(buffers); | ||
var contentType = (res.headers['content-type'] || '').split(';')[0]; | ||
if (contentType === 'application/json') { | ||
response = response.toString(); | ||
try { | ||
response = JSON.parse(response); | ||
} catch(e) { | ||
response = null; | ||
} | ||
} else if (contentType === 'text/plain') { | ||
response = response.toString(); | ||
} | ||
response = parseBuffers(response, contentType); | ||
responded = true; | ||
if (((res.statusCode / 100) | 0) !== 2) { | ||
let message = typeof response === 'object' ? | ||
(response && response.error && response.error.message) || ('Unspecified error running remote Standard Library function "' + names.join('.') + '"') : | ||
response; | ||
let error = new Error(message); | ||
if (response.error && response.error.hasOwnProperty('details')) { | ||
error.details = response.error.details; | ||
} | ||
if (response.error && response.error.hasOwnProperty('type')) { | ||
error.type = response.error.type; | ||
} | ||
if (response.error && response.error.hasOwnProperty('stack')) { | ||
error.stack = response.error.stack; | ||
} | ||
return callback(error, response); | ||
} else { | ||
return callback(null, response, res.headers); | ||
} | ||
}); | ||
}); | ||
req.on('error', err => responded || callback(err)); | ||
req.write(body); | ||
req.end(); | ||
}; |
{ | ||
"name": "lib", | ||
"version": "4.2.0", | ||
"version": "4.3.0", | ||
"description": "StdLib: Standard Library for Microservices Node.js Bindings", | ||
@@ -5,0 +5,0 @@ "main": "lib.js", |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
18426
9
370
3