Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a new transport that lets you define options on the request module #425

Merged
merged 3 commits into from Nov 7, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions index.js
Expand Up @@ -7,6 +7,7 @@ module.exports = {
IncomingWebhook: require('./lib/clients/incoming-webhook/client'),
LegacyRtmClient: require('./lib/clients/default/legacy-rtm'),
MemoryDataStore: require('./lib/data-store/memory-data-store'),
requestOptionsTransport: require('./lib/clients/transports/request').requestOptionsTransport,
CLIENT_EVENTS: {
WEB: events.CLIENT_EVENTS.WEB,
RTM: events.CLIENT_EVENTS.RTM
Expand Down
10 changes: 8 additions & 2 deletions lib/clients/transports/request.js
Expand Up @@ -5,9 +5,9 @@
var HttpsProxyAgent = require('https-proxy-agent');
var has = require('lodash').has;
var partial = require('lodash').partial;
var defaults = require('lodash').defaults;
var request = require('request');


var handleRequestTranportRes = function handleRequestTranportRes(cb, err, response, body) {
var headers;
var statusCode;
Expand Down Expand Up @@ -50,12 +50,18 @@ var proxiedRequestTransport = function proxiedRequestTransport(proxyURL) {
};
};

var requestOptionsTransport = function requestOptionsTransport(options) {
return function _requestOptionsTransport(args, cb) {
var requestArgs = defaults(options, getRequestTransportArgs(args));
request.post(requestArgs, partial(handleRequestTranportRes, cb));
};
};

var requestTransport = function requestTransport(args, cb) {
var requestArgs = getRequestTransportArgs(args);
request.post(requestArgs, partial(handleRequestTranportRes, cb));
};


module.exports.proxiedRequestTransport = proxiedRequestTransport;
module.exports.requestOptionsTransport = requestOptionsTransport;
module.exports.requestTransport = requestTransport;
32 changes: 32 additions & 0 deletions test/clients/web/client.js
Expand Up @@ -11,6 +11,7 @@ var retryPolicies = require('../../../lib/clients/retry-policies');
var defaultHTTPResponseHandler =
require('../../../lib/clients/transports/call-transport').handleHttpResponse;

var requestTransport = require('../../../lib/clients/transports/request');

var mockTransport = function (args, cb) {
cb(args.data.err, args.headers, args.data.statusCode, args.data.body);
Expand Down Expand Up @@ -109,6 +110,37 @@ describe('Web API Client', function () {
client._makeAPICall('test', { test: 'test' }, null, null);
});

it('should accept overriding of request options', function () {

// Add Basic Auth

var options = {
auth: {
user: 'slack',
pass: 'slack'
}
};

var requestOptionsTransport = requestTransport.requestOptionsTransport(options);

var client = new WebAPIClient('test-token', { transport: requestOptionsTransport });

// Mock a result where Basic Auth was passed

nock('https://slack.com/api', {
reqheaders: {
authorization: /Basic [0-9A-Za-z]+/i
}
})
.post('/test')
.reply(200, '{"test":"test"}');

client._makeAPICall('test', {}, null, function (e, results) {
expect(results.test).to.equal('test');
});

});

describe('it should retry failed or rate-limited requests', function () {

var attemptAPICall = function (done) {
Expand Down