UNPKG

http-browserify-ws

Version:

http module compatability for browserify

157 lines (126 loc) 3.52 kB
var Stream = require('stream'); var Response = require('./response'); var Base64 = require('Base64'); var inherits = require('inherits'); var Request = module.exports = function (websecurify, params) { var self = this; self.writable = true; self.method = params.method || 'GET'; self.headers = []; self.body = []; self.credentials = params.credentials; self.uri = (params.scheme || 'http') + '://' + params.host + (params.port ? ':' + params.port : '') + (params.path || '/') ; if (params.headers) { var keys = objectKeys(params.headers); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = params.headers[key]; if (isArray(value)) { for (var j = 0; j < value.length; j++) { self.headers.push({name:key, value:value[j]}); } } else self.headers.push({name:key, value:value}); } } if (params.auth) { //basic auth self.headers.push(['Authorization', 'Basic ' + Base64.btoa(params.auth)]); } var res = new Response; self._res = res; res.on('close', function () { self.emit('close'); }); res.on('ready', function () { self.emit('response', res); }); }; inherits(Request, Stream); Request.prototype.setTimeout = function (timeout) { this.timeout = timeout; }; Request.prototype.setHeader = function (key, value) { if (isArray(value)) { for (var i = 0; i < value.length; i++) { this.headers.push({name:key, value:value[i]}); } } else { this.headers.push({name:key, value:value}); } }; Request.prototype.write = function (s) { if (s) { this.body.push(s); } }; Request.prototype.destroy = function (s) { if (this._req) { this._req.abort(); delete this._req; delete this._res; } this.emit('close'); }; Request.prototype.end = function (s) { var data; if (s) this.body.push(s); if (this.body.length === 0) { data = ''; } else { data = Buffer.concat(this.body.filter(function (part) { return part }).map(function (part) { return Buffer.from(part); })).toString(); } // TODO: should work with buffers var self = this; var headers = {} this.headers.forEach(function (header) { if (headers[header.name]) { if (!Array.isArray(headers[header.name])) { headers[header.name] = [headers[header.name]] } headers[header.name].push(header.value) } else { headers[header.name] = header.value } }) r = { method: this.method, uri: this.uri, headers: headers, body: data, credentials: this.credentials, }; if (this.timeout) { r.timeout = this.timeout } secappsExtensionAPI['2018-05-01'].makeRequest(r, function (err, req) { if (err) { self.emit('error', err); return; } self._req = req; self._res.handle(req); }); }; var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) keys.push(key); return keys; }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; var indexOf = function (xs, x) { if (xs.indexOf) return xs.indexOf(x); for (var i = 0; i < xs.length; i++) { if (xs[i] === x) return i; } return -1; };