'use strict'
/**
* A structure containing the request and response context for a given FaunaDB request.
* Provided to an observer function optionally defined in the {@link Client} constructor.
*
* @param {'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'} method
* The HTTP method used in the request.
* @param {string} path
* The path that was queried. Relative to the client's domain.
* @param {string} query
* URL query parameters. Only set if `method` is "GET".
* @param {Object} requestRaw
* The JSON request string.
* @param {Object} requestContent
* The request data.
* @param {string} responseRaw
* The unparsed response data, as a string.
* @param {object | FaunaHttpErrorResponseContent} responseContent
* The response data parsed as JSON.
* @param {number} statusCode
* The HTTP response status code.
* @param {object} responseHeaders
* The HTTP headers returned in the response.
* @param {number} startTime
* The time the request was issued by the client.
* @param {number} endTime
* The time the response was received by the client.
* @constructor
*/
function RequestResult(
method,
path,
query,
requestRaw,
requestContent,
responseRaw,
responseContent,
statusCode,
responseHeaders,
startTime,
endTime
) {
/** @type {'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'} */
this.method = method
/** @type {string} */
this.path = path
/**
* URL query. Null unless `method == 'get'`.
* *Not* related to {@link Client.query}.
* @type {object}
*/
this.query = query
/** @type {string} */
this.requestRaw = requestRaw
/** @type {object} */
this.requestContent = requestContent
/** @type {string} */
this.responseRaw = responseRaw
/**
* Parsed value returned by the server.
* Includes "resource" wrapper dict, or may be an FaunaHttpErrorResponseContent instead
* @type {object | FaunaHttpErrorResponseContent}
*/
this.responseContent = responseContent
/** @type {number} */
this.statusCode = statusCode
/** @type {object} */
this.responseHeaders = responseHeaders
/** @type {number} */
this.startTime = startTime
/** @type {number} */
this.endTime = endTime
}
/**
* `this.endTime - this.startTime`: Time taken in milliseconds.
* @type {number}
*/
Object.defineProperty(RequestResult.prototype, 'timeTaken', {
get: function() {
return this.endTime - this.startTime
},
})
module.exports = RequestResult