@bbc/http-transport
Version:
A flexible, modular REST client built for ease-of-use and resilience.
163 lines (132 loc) • 5.75 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>builder.js - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="HttpTransportBuilder.html">HttpTransportBuilder</a><ul class='methods'><li data-type='method'><a href="HttpTransportBuilder.html#createClient">createClient</a></li><li data-type='method'><a href="HttpTransportBuilder.html#retries">retries</a></li><li data-type='method'><a href="HttpTransportBuilder.html#retryDelay">retryDelay</a></li><li data-type='method'><a href="HttpTransportBuilder.html#use">use</a></li><li data-type='method'><a href="HttpTransportBuilder.html#userAgent">userAgent</a></li></ul></li><li><a href="HttpTransportClient.html">HttpTransportClient</a><ul class='methods'><li data-type='method'><a href="HttpTransportClient.html#asBody">asBody</a></li><li data-type='method'><a href="HttpTransportClient.html#asResponse">asResponse</a></li><li data-type='method'><a href="HttpTransportClient.html#delete">delete</a></li><li data-type='method'><a href="HttpTransportClient.html#get">get</a></li><li data-type='method'><a href="HttpTransportClient.html#head">head</a></li><li data-type='method'><a href="HttpTransportClient.html#headers">headers</a></li><li data-type='method'><a href="HttpTransportClient.html#patch">patch</a></li><li data-type='method'><a href="HttpTransportClient.html#post">post</a></li><li data-type='method'><a href="HttpTransportClient.html#put">put</a></li><li data-type='method'><a href="HttpTransportClient.html#query">query</a></li><li data-type='method'><a href="HttpTransportClient.html#redirect">redirect</a></li><li data-type='method'><a href="HttpTransportClient.html#retry">retry</a></li><li data-type='method'><a href="HttpTransportClient.html#retryDelay">retryDelay</a></li><li data-type='method'><a href="HttpTransportClient.html#timeout">timeout</a></li><li data-type='method'><a href="HttpTransportClient.html#use">use</a></li></ul></li></ul>
</nav>
<div id="main">
<h1 class="page-title">builder.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>'use strict';
const _ = require('lodash');
const HttpTransportClient = require('./client');
function validatePlugin(plugin) {
if (typeof plugin !== 'function') throw new TypeError('Plugin is not a function');
}
/** @class */
class HttpTransportBuilder {
/**
* Configures HttpTransport client
* @param {Transport} transport - Transport instance.
*/
constructor(transport) {
this._transport = transport;
this._defaults = {
plugins: []
};
}
/**
* Sets a default user agent
*
* @param {string} agent - user agent
* @return a HttpTransportBuilder instance
* @example
* const httpTransport = require('@bbc/http-transport');
*
* const builder = httpTransport.createBuilder();
* builder.userAgent('some-user-agent');
*/
userAgent(userAgent) {
_.set(this._defaults, 'ctx.userAgent', userAgent);
return this;
}
/**
* Set the default number of retries
*
* @param {integer} retries - number of retry attempts
* @return a HttpTransportBuilder instance
* @example
* const httpTransport = require('@bbc/http-transport');
*
* const builder = httpTransport.createBuilder();
* builder.retries(5);
*/
retries(retries) {
_.set(this._defaults, 'ctx.retries', retries);
return this;
}
/**
* default time delay between retries
*
* @param {integer} delay - delay time in ms
* @return a HttpTransportBuilder instance
* @example
* const httpTransport = require('@bbc/http-transport');
*
* const builder = httpTransport.createBuilder();
* builder.retryDelay(1000);
*/
retryDelay(delay) {
_.set(this._defaults, 'ctx.retryDelay', delay);
return this;
}
/**
* Registers a global plugin, which is used for all requests
*
* @param {function} fn - a global plugin
* @return a HttpTransportBuilder instance
* @example
* const toError = require('@bbc/http-transport-errors');
* const httpTransport = require('@bbc/http-transport');
*
* const client = httpTransport.createClient();
* client.useGlobal(toError(404));
*/
use(fn) {
validatePlugin(fn);
this._defaults.plugins.push(fn);
return this;
}
/**
* Instantiates a HttpTransport
*
* @return a HttpTransport instance
* @example
*
* const client = httpTransport.createClient();
*/
createClient() {
return new HttpTransportClient(this._transport, this._defaults);
}
}
module.exports = HttpTransportBuilder;
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.11</a> on Mon Feb 19 2024 16:02:59 GMT+0100 (Central European Standard Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
</body>
</html>