Files
DefinitelyTyped/types/k6/http.d.ts
bookmoons 518db0303d [k6] Add type documentation (#37056)
* k6: Document fail

* k6: Remove docs link

Complete docs are included in the doc comment.

* k6: Document group

* k6: Document sleep

* k6: Order signature docs before remarks

Renders more usefully in Visual Studio Code.

* k6: Document check

* k6: Space documented declarations

* k6: Space section headers

* k6: Document method releases

* k6: Simplify check documentation

* k6: Simplify fail documentation

* k6: Simplify group documentation

* k6: Document package

* k6: Compress documentation

* k6: Document Checker

* k6: Document Checkers

* k6: Link to check docs

* k6: Link to fail docs

* k6: Link to group docs

* k6: Link to sleep docs

* k6: Correct returns tag

* k6: Document check type param

* k6: Document group return type

* k6: Document byte

* k6: Document bytes

* k6: Document JSON types

* k6: Configure API Extractor

Enables validating docs with:
mkdir -p etc; api-extractor run -c api-extractor.json -l

* k6: Ignore docs build

* k6: Document doc comment validation

* k6: Disable API report generation

* k6: Disable doc model generation

* k6: Disable .d.ts rollup generation

* k6: Disable TSDoc metadata generation

* k6: Document typeParam tag warnings

* k6/global: Document module

* k6/global: Normalize section comments

* k6/global: Document open

* k6/global: Document __ENV

* k6/global: Refine __ENV type

* k6/global: Document __VU

* k6/global: Document __ITER

* k6/global: Document console

* k6/global: Normalize VU logic references

* k6: Improve section header visibility

* k6/crypto: Document module

* k6/crypto: Document randomBytes

* k6/crypto: Document hmac

* k6/crypto: Document md4

* k6/crypto: Document md5

* k6/crypto: Document sha1

* k6/crypto: Document sha256

* k6/crypto: Document sha384

* k6/crypto: Document sha512

* k6/crypto: Document sha512_224

* k6/crypto: Document sha512_256

* k6/crypto: Document ripemd160

* k6/crypto: Document createHash

* k6/crypto: Document createHMAC

* k6/crypto: Link to createHash docs

* k6/crypto: Document Algorithm

* k6/crypto: Document StringEncoding

* k6/crypto: Document BinaryEncoding

* k6/crypto: Document OutputEncoding

* k6/crypto: Document Output

* k6/crypto: Document Hasher

* k6/crypto: Document Hasher#update

* k6/crypto: Document Hasher#digest

* k6/crypto: Update formatting

Repo formatter really wants it this way.

* k6/encoding: Document module

* k6/encoding: Document b64encode

* k6/encoding: Document b64decode

* k6/encoding: Document Base64Variant

* k6/html: Document module

* k6/html: Document parseHTML

* k6/html: Add section headers

* k6/html: Document Selection

* k6: Disable redundant JSDoc check

Incorrectly applies to our TSDoc doc comments.

* k6/global: Add missing semicolon

* k6/global: Correct test

* k6/html: Update tests

* k6/html: Accept overloads for documentation

The overloads in these cases produce more natural IntelliSense
rendering of the documentation.

* k6/html: Document FormValue

* k6/html: Document Tester

* k6/html: Document Handler

* k6/html: Document Mapper

* k6/html: Qualify FormValue description

* k6/html: Normalize section header language

* k6/html: Document Attribute

* k6/html: Document NodeType

* k6/html: Document Element

* k6/html: Document AnchorElement

* k6/html: Document AreaElement

* k6/html: Link to Element docs

* k6/html: Document AudioElement

* k6/html: Document BaseElement

* k6/html: Document ButtonElement

* k6/html: Document CanvasElement

* k6/html: Document DataElement

* k6/html: Document DataListElement

* k6/html: Document DelElement

* k6/html: Document EmbedElement

* k6/html: Document FieldSetElement

* k6/html: Document FormElement

* k6/html: Document FormFieldElement

* k6/html: Document HrefElement

* k6/html: Document IFrameElement

* k6/html: Document ImageElement

* k6/html: Document InputElement

* k6/html: Document InsElement

* k6/html: Document KeygenElement

* k6/html: Document LabelElement

* k6/html: Document LegendElement

* k6/html: Document LiElement

* k6/html: Document LinkElement

* k6/html: Document MapElement

* k6/html: Document MediaElement

* k6/html: Document MetaElement

* k6/html: Document MeterElement

* k6/html: Document ModElement

* k6/html: Document ObjectElement

* k6/html: Document OListElement

* k6/html: Document OptGroupElement

* k6/html: Document OptionElement

* k6/html: Document OutputElement

* k6/html: Document ParamElement

* k6/html: Document PreElement

* k6/html: Document ProgressElement

* k6/html: QuoteElement

* k6/html: Document ScriptElement

* k6/html: Document SelectElement

* k6/html: Document SourceElement

* k6/html: Document StyleElement

* k6/html: Document TableBodyElement

* k6/html: Document TableCellElement

* k6/html: Document TableColElement

* k6/html: Document TableDataCellElement

* k6/html: Document TableElement

* k6/html: Document TableFootElement

* k6/html: Document TableHeadElement

* k6/html: Document TableHeaderCellElement

* k6/html: Document TableRowElement

* k6/html: Document TableSectionElement

* k6/html: Document TextAreaElement

* k6/html: Document TimeElement

* k6/html: Document TitleElement

* k6/html: Document TrackElement

* k6/html: Correct MediaElement#textTracks return type

* k6/html: Document UListElement

* k6/html: Document VideoElement

* k6/html: Update HrefElement test

* k6/http: Document module

* k6/http: Add section headers

* k6/http: Normalize refined params type name

* k6/http: Normalize refined batch request type names

* k6/http: Remove generics justification

* k6/http: Document del

* k6/http: Document get

* k6/http: Document options

* k6/http: Document patch

* k6/http: Document post

* k6/http: Document put

* k6/http: Document request

* k6/http: Document batch

* k6/http: Document file

* k6/http: Document cookieJar

* k6/http: Include release tags

* k6/http: Document Params

* k6/http: Document RefinedParams

* k6/http: Document AuthMethod

* k6/http: Document ResponseType

* k6/http: Document ParamsCookieValue

* k6/http: Document RequestBody

* k6/http: Document StructuredRequestBody

* k6/http: Document batch request types

* k6/http: Document refined batch request types

* k6/http: Document BatchResponses

* k6/http: Document Response properties

* k6/http: Document Response.html

* k6/http: Document Response.json

* k6/http: Document Response.clickLink

* k6/http: Document Response.submitForm

* k6/http: Define SSL/TLS version constants

* k6/http: Define OCSP status constants

* k6/http: Document OCSP reason constants

* k6/http: Define CipherSuite

* k6/http: Document Protocol

* k6/http: Document CipherSuite

* k6/http: Document RefinedResponse

* k6/http: Document ResponseBody

* k6/http: Document RefinedResponseBody

* k6/http: Document RequestCookie

* k6/http: Document ResponseCookie

* k6/http: Correct Unix time specifications

* k6/http: Document FileData

* k6/http: Accept formatter changes

* k6/http: Link to FileData docs

* k6/http: Accept formatter changes

* k6/http: Document CookieJar

* k6/http: Document CookieJarCookies

* k6/http: CookieOptions

* k6/metrics: Document module

* k6/metrics: Document Metric

* k6/metrics: Document Counter

* k6/metrics: Document Gauge

* k6/metrics: Document Rate

* k6/metrics: Document Trend

* k6/ws: Document module

* k6/ws: Add section headers

* k6/ws: Document connect

* k6/ws: Document Params

* k6/ws: Document Executor

* k6/ws: Document Response

* k6/ws: Document Socket

* k6/ws: Document EventType

* k6/ws: Document TimerHandler

* k6/ws: Document event handlers

* k6/ws: Document WebSocketError

* k6/options: Document module

* k6/options: Document Options

* k6/options: Document CollectorOptions

* k6/options: Document Stage

* k6/options: Document threshold specifications

* k6/options: Document Certificate

* k6: Remove API Extractor config

No obvious way to get the repo test to accept it.
To be restored when an approach is discovered.
2019-07-22 17:29:26 -07:00

714 lines
17 KiB
TypeScript

/*
* HTTP client.
* https://docs.k6.io/docs/k6http
*/
import { bytes, JSONValue } from '.';
import { Selection } from './html';
// === Main ===
// ------------
/**
* Make DELETE request.
* https://docs.k6.io/docs/del-url-body-params
* @param url - Request URL.
* @param body - Discouraged. Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function del<RT extends ResponseType | undefined>(
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make GET request.
* https://docs.k6.io/docs/get-url-body-params
* @param url - Request URL.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function get<RT extends ResponseType | undefined>(
url: string,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make OPTIONS request.
* https://docs.k6.io/docs/options-url-body-params
* @param url - Request URL.
* @param body - Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function options<RT extends ResponseType | undefined>(
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make PATCH request.
* https://docs.k6.io/docs/patch-url-body-params
* @param url - Request URL.
* @param body - Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function patch<RT extends ResponseType | undefined>(
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make POST request.
* https://docs.k6.io/docs/post-url-body-params
* @param url - Request URL.
* @param body - Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function post<RT extends ResponseType | undefined>(
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make PUT request.
* https://docs.k6.io/docs/put-url-body-params
* @param url - Request URL.
* @param body - Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function put<RT extends ResponseType | undefined>(
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Make request.
* https://docs.k6.io/docs/request-method-url-body-params
* @param method - HTTP method.
* @param url - Request URL.
* @param body - Request body. Object form encoded.
* @param params - Request parameters.
* @returns Resulting response.
* @public
*/
export function request<RT extends ResponseType | undefined>(
method: string,
url: string,
body?: RequestBody | null,
params?: RefinedParams<RT> | null
): RefinedResponse<RT>;
/**
* Batch multiple HTTP requests together,
* to issue them in parallel over multiple TCP connections.
* https://docs.k6.io/docs/batch-requests
* @param requests - Request specifications.
* @returns Resulting responses.
* @public
*/
export function batch<Q extends BatchRequests>(requests: Q): BatchResponses<Q>;
/**
* Create a file object used for building multipart requests (file uploads).
* https://docs.k6.io/docs/file-data-filename-contenttype
* @param data - File data.
* @param filename - Filename. Included in MIME message.
* @param contentType - Content type. Included in MIME message.
* @returns File data object.
* @public
*/
export function file(data: string | bytes, filename?: string, contentType?: string): FileData;
/**
* Get active cookie jar.
* https://docs.k6.io/docs/cookiejar
* @returns Active cookie jar.
* @public
*/
export function cookieJar(): CookieJar;
// === SSL/TLS versions ===
// ------------------------
/** @public */
export const SSL_3_0 = 'ssl3.0';
/** @public */
export const TLS_1_0 = 'tls1.0';
/** @public */
export const TLS_1_1 = 'tls1.1';
/** @public */
export const TLS_1_2 = 'tls1.2';
// === OCSP statuses ===
// ---------------------
/** @public */
export const OCSP_STATUS_GOOD = 'good';
/** @public */
export const OCSP_STATUS_REVOKED = 'revoked';
/** @public */
export const OCSP_STATUS_SERVER_FAILED = 'server_failed';
/** @public */
export const OCSP_STATUS_UNKNOWN = 'unknown';
// === OCSP revocation reasons ===
// -------------------------------
/** @public */
export const OCSP_REASON_AA_COMPROMISE = 'aa_compromise';
/** @public */
export const OCSP_REASON_AFFILIATION_CHANGED = 'affiliation_changed';
/** @public */
export const OCSP_REASON_CA_COMPROMISE = 'ca_compromise';
/** @public */
export const OCSP_REASON_CERTIFICATE_HOLD = 'certificate_hold';
/** @public */
export const OCSP_REASON_CESSATION_OF_OPERATION = 'cessation_of_operation';
/** @public */
export const OCSP_REASON_KEY_COMPROMISE = 'key_compromise';
/** @public */
export const OCSP_REASON_PRIVILEGE_WITHDRAWN = 'privilege_withdrawn';
/** @public */
export const OCSP_REASON_REMOVE_FROM_CRL = 'remove_from_crl';
/** @public */
export const OCSP_REASON_SUPERSEDED = 'superseded';
/** @public */
export const OCSP_REASON_UNSPECIFIED = 'unspecified';
// === Params ===
// --------------
/**
* Request parameters.
* https://docs.k6.io/docs/params-k6http
* @public
*/
export interface Params {
/** Authentication method. */
auth?: AuthMethod;
/** Request scoped cookies. */
cookies?: { [name: string]: ParamsCookieValue };
/** Request headers. */
headers?: { [name: string]: string };
/** Cookie jar to override default VU cookie jar with. */
jar?: CookieJar;
/** Maximum redirects to follow. */
redirects?: number;
/** Response time metric tags. */
tags?: { [name: string]: string };
/** Request timeout. */
timeout?: number;
/** Response type. */
responseType?: ResponseType;
}
/**
* Request parameters with refined response type.
* Used to infer response body type.
* @public
*/
export interface RefinedParams<RT extends ResponseType | undefined> extends Params {
responseType?: RT;
}
/**
* Request authentication method.
* @public
*/
export type AuthMethod = 'basic' | 'digest' | 'ntlm';
/**
* Response type.
* @public
*/
export type ResponseType = 'binary' | 'none' | 'text';
/**
* Cookie value in request parameters.
* https://docs.k6.io/docs/params-k6http
* @public
*/
export type ParamsCookieValue = string | { value?: string; replace?: boolean };
// === Request body ===
// --------------------
/**
* Request body.
* @public
*/
export type RequestBody = string | StructuredRequestBody;
/**
* Structured request body. May include file uploads.
* @public
*/
export interface StructuredRequestBody {
[name: string]: string | FileData;
}
// === Batch request ===
// ---------------------
/**
* Batch request specification.
* https://docs.k6.io/docs/batch-requests
* @public
*/
export type BatchRequest = string | ArrayBatchRequest | ObjectBatchRequest;
/**
* Array form batch request specification.
* @public
*/
export type ArrayBatchRequest = [ string, string, (RequestBody | null)?, (Params | null)? ];
/**
* Object form batch request specification.
* @public
*/
export interface ObjectBatchRequest {
/** Request method. */
method: string;
/** Request URL. */
url: string;
/** Request body. */
body?: RequestBody | null;
/** Requset parameters. */
params?: Params | null;
}
/**
* Set of batch request specifications.
* @public
*/
export type BatchRequests = BatchRequest[] | { [name: string]: BatchRequest };
// === Refined batch request ===
// -----------------------------
/**
* Refined batch request specification.
* Used to infer response body type.
* @public
*/
export type RefinedBatchRequest<RT extends ResponseType | undefined> =
| string
| ArrayRefinedBatchRequest<RT>
| ObjectRefinedBatchRequest<RT>;
/**
* Array form refined batch request specification.
* @public
*/
export type ArrayRefinedBatchRequest<RT extends ResponseType | undefined> = [
string,
string,
(RequestBody | null)?,
(RefinedParams<RT> | null)?
];
/**
* Object form refined batch request specification.
* @public
*/
export interface ObjectRefinedBatchRequest<RT extends ResponseType | undefined> {
method: string;
url: string;
body?: RequestBody | null;
params?: RefinedParams<RT> | null;
}
// === Batch responses ===
// -----------------------
/**
* Set of batch responses. Array or object.
* @public
*/
export type BatchResponses<Q> = {
[K in keyof Q]: Q[K] extends RefinedBatchRequest<infer RT> ? RefinedResponse<RT> : never;
};
// === Response ===
// ----------------
/**
* Response.
* https://docs.k6.io/docs/response-k6http
* @public
*/
export interface Response {
/** Response body. */
body: ResponseBody;
/** Response cookies. */
cookies: { [name: string]: ResponseCookie[] };
/** Non-HTTP error message. */
error: string;
/** Error code. Present for 4xx 5xx responses and non-HTTP errors. */
error_code: number;
/** Response headers. */
headers: { [name: string]: string };
/** Online Certificate Status Protocol response. */
ocsp: {
/** When response signed by responder in millisecond Unix time. */
produced_at: number;
/** When indicated status was known correct in millisecond Unix time. */
this_update: number;
/** When response will be refreshed with the CA in millisecond Unix time. */
next_update: number;
/** Certificate revocation reason. One of `OCSP_REASON_*` constants. */
revocation_reason: string;
/** When certificate was revoked in millisecond Unix time. */
revoked_at: number;
/** Certificate status. One of `OCSP_STATUS_*` constants. */
status: string;
};
/** Protocol used to perform the transfer. */
proto: Protocol;
/** Server IP address. */
remote_ip: string;
/** Remote port connected to. */
remote_port: number;
/** Inciting request details. */
request: {
/** Request body. */
body: string;
/** Request cookies. */
cookies: { [name: string]: RequestCookie[] };
/** Request headers. */
headers: { [name: string]: string[] };
/** Request method. */
method: string;
/** Request URL. */
url: string;
};
/** HTTP status code. */
status: number;
/** Performance timing information. */
timings: {
/** Milliseconds spent blocked before initiating request. */
blocked: number;
/** Milliseconds spent setting up TCP connection to host. */
connecting: number;
/** Milliseconds spent handshaking TLS session with host. */
tls_handshaking: number;
/** Milliseconds spent sending request. */
sending: number;
/** Milliseconds spent waiting for server response (TTFB). */
waiting: number;
/** Milliseconds spent receiving response data. */
receiving: number;
/** Total time in milliseconds. `sending+waiting+receiving` */
duration: number;
};
/** TLS cipher suite used. */
tls_cipher_suite: CipherSuite;
/** TLS/SSL version used. One of `TLS_*` `SSL_*` constants. */
tls_version: string;
/** Fetched URL. May differ from request URL due to redirects. */
url: string;
/**
* Click link on page.
* https://docs.k6.io/docs/responseclicklink-params
* @param selector - Selector expression locating link to click.
* @param params - Parameters for link click request.
* @returns Link click response.
*/
clickLink<RT extends ResponseType | undefined>(args?: {
selector?: string;
params?: RefinedParams<RT> | null;
}): RefinedResponse<RT>;
/**
* Parse body as HTML. Optionally filter by selector.
* https://docs.k6.io/docs/response-k6http
* @param selector - Selector expression.
* @returns Document node or selected elements.
*/
html(selector?: string): Selection;
/**
* Parse body as JSON. Optionally filter by selector.
* https://docs.k6.io/docs/response-k6http
* @param selector - GJSON expression.
* @returns Parse result if successful, `undefined` if unsuccessful.
*/
json(selector?: string): JSONValue | undefined;
/**
* Submit form on page.
* https://docs.k6.io/docs/responsesubmitform-params
* @param formSelector - Selector expression locating form to submit.
* @param fields - Form field values.
* @param submitSelector - Selector expression locating submit button.
* @param params - Parameters for form submission request.
* @returns Form submission response.
*/
submitForm<RT extends ResponseType | undefined>(args?: {
formSelector?: string;
fields?: { [name: string]: string };
submitSelector?: string;
params?: RefinedParams<RT> | null;
}): RefinedResponse<RT>;
}
/**
* HTTP protocol.
* @public
*/
export type Protocol = 'HTTP/1.0' | 'HTTP/1.1' | 'HTTP/2.0';
/**
* TLS cipher suite.
* @public
*/
export type CipherSuite =
| 'TLS_RSA_WITH_RC4_128_SHA'
| 'TLS_RSA_WITH_3DES_EDE_CBC_SHA'
| 'TLS_RSA_WITH_AES_128_CBC_SHA'
| 'TLS_RSA_WITH_AES_256_CBC_SHA'
| 'TLS_RSA_WITH_AES_128_GCM_SHA256'
| 'TLS_RSA_WITH_AES_256_GCM_SHA384'
| 'TLS_ECDHE_ECDSA_WITH_RC4_128_SHA'
| 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA'
| 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA'
| 'TLS_ECDHE_RSA_WITH_RC4_128_SHA'
| 'TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA'
| 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA'
| 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA'
| 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256'
| 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256'
| 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384'
| 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384';
/**
* Refined response.
* Exposes body with best possible type.
* @public
*/
export interface RefinedResponse<RT extends ResponseType | undefined> extends Response {
body: RefinedResponseBody<RT>;
}
/**
* Response body.
* @public
*/
export type ResponseBody = string | bytes | null;
/**
* Refined response body.
* Best possible type given `responseType` from request parameters.
* @typeParam RT - `Params.responseType` value.
* @privateRemarks Default type is a union due to depending on program options.
* @public
*/
export type RefinedResponseBody<RT extends ResponseType | undefined> = RT extends 'binary'
? bytes
: RT extends 'none'
? null
: RT extends 'text'
? string
: RT extends undefined
? string | null
: never;
/**
* Request cookie description in response.
* @public
*/
export interface RequestCookie {
/** Name. */
name: string;
/** Value. */
value: string;
/** Whether configured to override VU cookie jar. */
replace: boolean;
}
/**
* Response cookie.
* @public
*/
export interface ResponseCookie {
/** Name. */
name: string;
/** Value. */
value: string;
/** Domain allowed to receive. */
domain: string;
/** Scope path. */
path: string;
/** HTTP only. */
httpOnly: boolean;
/** Secure. */
secure: boolean;
/** Seconds until expiration. */
maxAge: number;
/** Expiry time in millisecond Unix time. */
expires: number;
}
// === File data ===
// -----------------
/**
* File data for constructing a multipart request with file uploads.
* https://docs.k6.io/docs/filedata-k6http
* @public
*/
export abstract class FileData {
protected __brand: never;
/** File data. */
data: string | bytes;
/** Filename to include in MIME message. */
filename?: string;
/** Content type to include in MIME message. */
content_type?: string;
}
// === Cookie jar ===
// ------------------
/**
* Object for storing cookies.
* https://docs.k6.io/docs/cookiejar-k6http
* @public
*/
export abstract class CookieJar {
protected __brand: never;
/**
* Get cookies set for a particular URL.
* https://docs.k6.io/docs/cookiejarcookiesforurlurl
* @param url - URL for which to get cookies.
* @returns Cookies for URL.
*/
cookiesForURL(url: string): CookieJarCookies;
/**
* Set cookie.
* https://docs.k6.io/docs/cookiejarsetname-value-options
* @param name - Cookie name.
* @param value - Cookie value.
* @param options - Optional settings.
*/
set(name: string, value: string, options?: CookieOptions | null): void;
}
/**
* Cookies retrieved from cookie jar.
* @public
*/
export interface CookieJarCookies {
[name: string]: string[];
}
/**
* Optional settings when adding a cookie to a cookie jar.
* @public
*/
export interface CookieOptions {
/** Domain allowed to receive. */
domain?: string;
/** Scope path. */
path?: string;
/** Expiry time in RFC1123 format. */
expires?: string;
/** Seconds until expiration. */
max_age?: number;
/** Secure. */
secure?: boolean;
/** HTTP only. */
http_only?: boolean;
}