/**
* MIT License
*
* Copyright (c) 2020-present, Elastic NV
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
///
///
import { BrowserContextOptions, LaunchOptions, CDPSession, ChromiumBrowser, ChromiumBrowserContext, Page, APIRequestContext } from 'playwright-core';
import { Journey, Step } from './dsl';
import { BuiltInReporterName, ReporterInstance } from './reporters';
import { AlertConfig, MonitorConfig } from './dsl/monitor';
import { RunnerInfo } from './core/runner';
export type VoidCallback = () => void;
export type Location = {
file: string;
line: number;
column: number;
};
export type StackFrame = Location & {
function?: string;
};
export type Params = Record;
export type HooksArgs = {
env: string;
params: Params;
info: RunnerInfo;
};
export type HooksCallback = (args: HooksArgs) => void;
export type StatusValue = 'pending' | 'succeeded' | 'failed' | 'skipped';
export type NetworkConditions = {
offline: boolean;
downloadThroughput: number;
uploadThroughput: number;
latency: number;
};
export type Driver = {
browser: ChromiumBrowser;
context: ChromiumBrowserContext;
page: Page;
client: CDPSession;
request: APIRequestContext;
};
export type TraceOutput = {
name: string;
type: string;
start: MetricDuration;
duration?: MetricDuration;
score?: number;
};
type MetricDuration = {
us: number;
};
export type PerfMetrics = {
fcp: MetricDuration;
lcp: MetricDuration;
dcl: MetricDuration;
load: MetricDuration;
cls: number;
};
export type Filmstrip = {
start: MetricDuration;
blob: string;
mime: string;
};
export type DefaultPluginOutput = {
step?: Partial;
timestamp: number;
};
export type BrowserInfo = {
name: string;
version: string;
};
export type Screenshot = {
timestamp: number;
step: Step;
data: string;
};
export type SecurityDetails = {
issuer?: string;
protocol?: string;
subjectName?: string;
validFrom?: number;
validTo?: number;
};
export type Request = {
method: string;
url: string;
headers: Record;
bytes?: number;
body?: {
bytes: number;
};
referrer?: string;
};
export type Response = {
url?: string;
status: number;
statusText?: string;
mimeType?: string;
headers: Record;
bytes?: number;
body?: {
bytes: number;
};
transferSize?: number;
redirectURL?: string;
securityDetails?: SecurityDetails;
remoteIPAddress?: string;
remotePort?: number;
fromServiceWorker?: boolean;
};
export type NetworkInfo = {
url: string;
browser: BrowserInfo;
type: string;
request: Request;
response: Response;
isNavigationRequest: boolean;
requestSentTime: number;
loadEndTime: number;
responseReceivedTime: number;
resourceSize: number;
transferSize: number;
timings: {
blocked: number;
dns: number;
ssl: number;
connect: number;
send: number;
wait: number;
receive: number;
total: number;
};
} & DefaultPluginOutput;
export type PageMetrics = Record;
export type BrowserMessage = {
text: string;
type: string;
} & DefaultPluginOutput;
export type PluginOutput = {
filmstrips?: Array;
networkinfo?: Array;
browserconsole?: Array;
traces?: Array;
metrics?: PerfMetrics;
};
export type ScreenshotOptions = 'on' | 'off' | 'only-on-failure';
export type ThrottlingOptions = {
download?: number;
upload?: number;
latency?: number;
};
type GrepOptions = {
pattern?: string;
tags?: Array;
match?: string;
};
type BaseArgs = {
params?: Params;
screenshots?: ScreenshotOptions;
dryRun?: boolean;
config?: string;
auth?: string;
outfd?: number;
wsEndpoint?: string;
pauseOnError?: boolean;
playwrightOptions?: PlaywrightOptions;
quietExitCode?: boolean;
throttling?: MonitorConfig['throttling'];
schedule?: MonitorConfig['schedule'];
locations?: MonitorConfig['locations'];
privateLocations?: MonitorConfig['privateLocations'];
fields?: MonitorConfig['fields'];
spaces?: MonitorConfig['spaces'];
proxy?: ProxySettings;
namespace?: MonitorConfig['namespace'];
maintenanceWindows?: MonitorConfig['maintenanceWindows'];
};
export type CliArgs = BaseArgs & {
pattern?: string;
match?: string;
tags?: Array;
reporter?: BuiltInReporterName;
inline?: boolean;
require?: Array;
sandbox?: boolean;
richEvents?: boolean;
headless?: boolean;
capability?: Array;
ignoreHttpsErrors?: boolean;
};
export type RunOptions = BaseArgs & {
metrics?: boolean;
ssblocks?: boolean;
network?: boolean;
trace?: boolean;
filmstrips?: boolean;
environment?: string;
networkConditions?: NetworkConditions;
reporter?: BuiltInReporterName | ReporterInstance;
grepOpts?: GrepOptions;
};
export type PushOptions = Partial & Partial & {
auth: string;
kibanaVersion?: string;
yes?: boolean;
tags?: Array;
fields?: MonitorConfig['fields'];
alert?: AlertConfig;
retestOnFailure?: MonitorConfig['retestOnFailure'];
enabled?: boolean;
grepOpts?: GrepOptions;
spaces?: MonitorConfig['spaces'];
};
export type ProjectSettings = {
id: string;
url: string;
space: string;
};
export type PlaywrightOptions = LaunchOptions & BrowserContextOptions & {
testIdAttribute?: string;
actionTimeout?: number;
navigationTimeout?: number;
};
export type SyntheticsConfig = {
params?: Params;
playwrightOptions?: PlaywrightOptions;
monitor?: MonitorConfig;
project?: ProjectSettings;
proxy?: ProxySettings;
};
/** Runner Payload types */
export type JourneyResult = Partial & {
networkinfo?: PluginOutput['networkinfo'];
browserconsole?: PluginOutput['browserconsole'];
stepsresults?: Array;
};
export type TestError = {
message: string;
stack?: string;
location?: Location;
source?: string;
};
export type StepResult = {
pagemetrics?: PageMetrics;
filmstrips?: PluginOutput['filmstrips'];
metrics?: PluginOutput['metrics'];
traces?: PluginOutput['traces'];
};
/** Reporter and Runner contract */
export type StartEvent = {
numJourneys: number;
networkConditions?: NetworkConditions;
};
export type JourneyStartResult = {
timestamp: number;
params?: Params;
};
export type JourneyEndResult = JourneyStartResult & JourneyResult & {
browserDelay: number;
options: RunOptions;
};
export type StepEndResult = StepResult;
export type ProxySettings = {
uri?: string;
token?: string;
ca?: string | Buffer;
cert?: string | Buffer;
noVerify?: boolean;
};
export {};
//# sourceMappingURL=common_types.d.ts.map