http/src/index.ts
/**
* HTTP Driver factory.
*
* This is a function which, when called, returns a HTTP Driver for Cycle.js
* apps. The driver is also a function, and it takes a stream of requests as
* input, and outputs an HTTP Source, an object with some functions to query for
* response streams.
*
* **Requests**. The stream of requests should emit either strings or objects.
* If the stream emits strings, those should be the URL of the remote resource
* over HTTP. If the stream emits objects, these should be instructions how
* superagent should execute the request. These objects follow a structure
* similar to superagent's request API itself. `request` object properties:
*
* - `url` *(String)*: the remote resource path. **required**
* - `method` *(String)*: HTTP Method for the request (GET, POST, PUT, etc).
* - `category` *(String)*: an optional and arbitrary key that may be used in
* the HTTP Source when querying for the response. E.g.
* `sources.http.select(category)`
* - `query` *(Object)*: an object with the payload for `GET` or `POST`.
* - `send` *(Object|String)*: an object or string with the payload for `POST`.
* - `headers` *(Object)*: object specifying HTTP headers.
* - `accept` *(String)*: the Accept header.
* - `type` *(String)*: a short-hand for setting Content-Type.
* - `user` *(String)*: username for authentication.
* - `password` *(String)*: password for authentication.
* - `field` *(Object)*: object where key/values are Form fields.
* - `progress` *(Boolean)*: whether or not to detect and emit progress events
* on the response Observable.
* - `attach` *(Array)*: array of objects, where each object specifies `name`,
* `path`, and `filename` of a resource to upload.
* - `withCredentials` *(Boolean)*: enables the ability to send cookies from the
* origin.
* - `agent` *(Object)*: an object specifying `cert` and `key` for SSL
* certificate authentication.
* - `redirects` *(Number)*: number of redirects to follow.
* - `lazy` *(Boolean)*: whether or not this request runs lazily, which means
* the request happens if and only if its corresponding response stream from the
* HTTP Source is subscribed to. By default this value is false: requests run
* eagerly, even if their response is ignored by the application.
* - `responseType` *(String)*: setting for XHR responseType.
* - `ok` *(Function): method to decide whether a response is an error or not.
* The callback to the ok function gets a response and returns true if the response should be interpreted as success.
*
* **Responses**. A metastream is a stream that emits streams. The HTTP Source
* manages response metastreams. These streams of responses have a `request`
* field attached to them (to the stream object itself) indicating which request
* (from the driver input) generated this response streams. The HTTP Source has
* functions `filter()` and `select()`, but is not itself a stream. So you can
* call `sources.HTTP.filter(request => request.url === X)` to get a new HTTP
* Source object which is filtered for response streams that match the condition
* given, and may call `sources.HTTP.select(category)` to get a metastream of
* response that match the category key. With an HTTP Source, you can also call
* `httpSource.select()` with no param to get the metastream. You should flatten
* the metastream before consuming it, then the resulting response stream will
* emit the response object received through superagent.
*
* @return {Function} the HTTP Driver function
* @function makeHTTPDriver
*/
export {makeHTTPDriver} from './http-driver';
export {
RequestOptions,
Attachment,
RequestInput,
Response,
ResponseStream,
HTTPSource,
} from './interfaces';