@bitbar/cloud-api-client 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/APIResourceUser.d.ts +2 -2
- package/dist/api/models/User.d.ts +3 -0
- package/dist/bitbar-cloud-api-client.js +2 -2
- package/dist/bitbar-cloud-api-client.js.map +1 -1
- package/dist/bitbar-cloud-api-client.min.js +2 -2
- package/dist/bitbar-cloud-api-client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitbar-cloud-api-client.min.js","sources":["../src/Filter.ts","../src/finka.ts","../src/FilterBuilder.ts","../src/api/models/HTTP.ts","../src/api/APIEntity.ts","../src/api/APIList.ts","../src/api/APIResource.ts","../src/api/APIListCleanupConfigurations.ts","../src/api/APIResourceCleanupConfiguration.ts","../src/api/APIAdminListDevices.ts","../src/api/APIAdminListRuns.ts","../src/api/APIAdminListServices.ts","../src/api/decorators/NonRequestable.ts","../src/api/APIAdminListStatistics.ts","../src/api/APIAdminResourceAccount.ts","../src/api/APIAdminResourceAccountService.ts","../src/api/APIAdminResourceCluster.ts","../src/api/APIAdminResourceDevice.ts","../src/api/APIAdminResourceDeviceModel.ts","../src/api/class/InputFileset.ts","../src/api/class/Images.filter.ts","../src/api/class/NonMedia.filter.ts","../src/api/APIListOutputFiles.ts","../src/api/class/OutputFileset.ts","../src/api/APIListScreenshots.ts","../src/api/APIResourceDeviceSessionCommon.ts","../src/api/APIAdminResourceDeviceSessionStandalone.ts","../src/api/factory/postAdminDeviceSessionChangeBillable.ts","../src/api/APIAdminResourceDeviceTime.ts","../src/api/APIAdminResourceFramework.ts","../src/api/APIAdminResourceLicense.ts","../src/api/factory/postDeviceRunIds.ts","../src/api/APIAdminResourceRunStandalone.ts","../src/api/APIAdminResourceService.ts","../src/api/APIAdminResourceUserAccount.ts","../src/api/APIResourceDeviceSessionStandalone.ts","../src/api/APIAdminResourceUser.ts","../src/api/APIResourceAccessGroup.ts","../src/api/APIResourceDeviceGroup.ts","../src/api/APIResourceFile.ts","../src/api/APIListTestCaseRuns.ts","../src/api/APIResourceDeviceSession.ts","../src/api/APIListTestRunDeviceSessions.ts","../src/api/APIResourceRunCommon.ts","../src/api/APIResourceRun.ts","../src/api/APIResourceProject.ts","../src/api/APIAdminResource.ts","../src/api/APIListDevices.ts","../src/api/APIListProperties.ts","../src/api/APIListServices.ts","../src/api/APIListUsers.ts","../src/api/APIResourceBillingPeriod.ts","../src/api/APIResourceAccount.ts","../src/api/APIResourceBroker.ts","../src/api/APIResourceDevice.ts","../src/api/APIResourceLabelGroup.ts","../src/api/APIListFiles.ts","../src/api/APIResourceChannel.ts","../src/api/APIListNotifications.ts","../src/api/APIListRuns.ts","../src/api/APIListSmartbearTunnels.ts","../src/api/APIResourceNotification.ts","../src/api/APIResourceUser.ts","../src/api/APIResourceUserSession.ts","../src/API.ts","../src/CloudAPIClient.ts","../src/api/models/AccessGroup.ts","../src/api/models/Account.ts","../src/api/models/AccountService.ts","../src/api/models/AdminDevice.ts","../src/api/models/AdminFrameworkStatistics.ts","../src/api/models/BillingPeriod.ts","../src/api/models/Broker.ts","../src/api/models/Cluster.ts","../src/api/models/Device.ts","../src/api/models/DeviceModelCriterion.ts","../src/api/models/DeviceModelPool.ts","../src/api/models/DeviceProblem.ts","../src/api/models/DeviceSession.ts","../src/api/models/Enum.ts","../src/api/models/License.ts","../src/api/models/Notification.ts","../src/api/models/Project.ts","../src/api/models/Screenshot.ts","../src/api/models/Service.ts","../src/api/models/SharedResource.ts","../src/api/models/TestCaseRun.ts","../src/api/models/TestRun.ts","../src/api/models/User.ts","../src/api/models/UserFile.ts","../src/api/models/VisualTest.ts"],"sourcesContent":["/**\n * Filter\n */\n\nexport class Filter<T = any> {\n name: string;\n value: T;\n operand: string;\n\n constructor(name: string, value: T, operand: string) {\n this.name = name;\n this.value = value;\n this.operand = operand;\n }\n}\n\nexport default Filter;\n","import finka from '@bitbar/finka';\n\nfinka();\n\nexport default {};\n","import {Filter} from './Filter';\nimport './finka';\n\n/**\n * FilterBuilder\n *\n * Builds filter string according to Bitbar Cloud backend convention\n */\nexport class FilterBuilder {\n\n private readonly filters: Array<Filter> = [];\n\n gt(name: string, value: number): this {\n return this.add(name, value, 'gt');\n }\n\n\n lt(name: string, value: number): this {\n return this.add(name, value, 'lt');\n }\n\n after(name: string, value: Date | number): this {\n return this.add(name, value, 'after', true);\n }\n\n afterorequal(name: string, value: Date | number): this {\n return this.add(name, value, 'afterorequal', true);\n }\n\n before(name: string, value: Date | number): this {\n return this.add(name, value, 'before', true);\n }\n\n beforeorequal(name: string, value: Date | number): this {\n return this.add(name, value, 'beforeorequal', true);\n }\n\n on(name: string, value: any): this {\n return this.add(name, value, 'on');\n }\n\n eq(name: string, value: any): this {\n return this.add(name, value, 'eq');\n }\n\n contains(name: string, value: string): this {\n return this.add(name, value, 'contains');\n }\n\n like(name: string, value: string): this {\n return this.add(name, value, 'like');\n }\n\n notlike(name: string, value: string): this {\n return this.add(name, value, 'notlike');\n }\n\n isnull(name: string): this {\n return this.add(name, undefined, 'isnull');\n }\n\n isnotnull(name: string): this {\n return this.add(name, undefined, 'isnotnull');\n }\n\n in(name: string, value: Array<any>): this {\n return this.add(name, value, 'in', true);\n }\n\n notin(name: string, value: Array<any>): this {\n return this.add(name, value, 'notin', true);\n }\n\n raw(filter: Filter | string | Filter[] | string[]): void {\n const filters = Array.wrap(filter);\n for (const filter of filters) {\n if (this.isFilterPart(<string>filter)) {\n this.filters.push(<Filter>filter);\n } else {\n throw new SyntaxError(`Filter ${filter} has invalid syntax`);\n }\n }\n }\n\n\n /**\n * Check if given string is proper filter part\n */\n isFilterPart(str: string): boolean {\n return /^[a-zA-Z0-9.]{2,12}_(?:isnull$|(?:gt|lt|(?:after|before)(?:orequal)?|on|eq|contains|like|(?:not)?in)_)/.test(<string>str);\n }\n\n toString(): string {\n const parts: Array<string> = [];\n\n let part: string,\n val: string;\n\n for (const filter of this.filters) {\n if (typeof filter === 'string') {\n part = filter;\n } else {\n val = '';\n if (filter.value.length > 1 || typeof filter.value[0] !== 'undefined') {\n val = `_${filter.value.join('|')}`;\n }\n part = `${filter.name}_${filter.operand}${val}`;\n }\n parts.push(part);\n }\n\n return parts.join(';');\n }\n\n /**\n * Add filter to filters list\n * @param name {string} Name\n * @param value {*} Value\n * @param operand {string} Operand\n * @param [checkNull=false] {boolean} Check null?\n * @returns {FilterBuilder}\n */\n private add<T = any>(name: string, value: T, operand: string, checkNull = false): this {\n\n let _value = Array.wrap(value);\n\n if (_value.length === 0) {\n return this;\n }\n\n // auto-convert\n for (let i = 0; i < _value.length; i++) {\n const v = _value[i];\n if (typeof v === 'object' && v instanceof Date) {\n _value[i] = v.getTime();\n }\n }\n\n let isNull = false;\n if (checkNull) {\n // check null existence\n for (const v of _value) {\n if (v !== null) {\n continue;\n }\n isNull = true;\n }\n\n if (isNull) {\n _value = _value.filter((item: any) => item !== null);\n operand += 'ornull';\n }\n }\n\n if (operand.endsWith('ornull') && _value.length === 0) {\n operand = 'isnull';\n }\n\n // add filter\n this.filters.push(new Filter<Array<T>>(name, _value, operand));\n\n return this;\n }\n}\n\n\nexport default FilterBuilder;\n","import {Method} from 'axios';\n\n\n/**\n * Allowed methods\n *\n * @type {Array}\n * @default\n */\nexport const ALLOWED_HTTP_METHODS: Array<Method> = ['GET', 'POST', 'DELETE'];\n\nexport type QueryParam = string | number | boolean;\nexport type QueryParams = Record<string, QueryParam | Array<QueryParam>>;\n\nexport enum APIOrder {\n asc = 'a',\n desc = 'd'\n}\n\nexport interface CollectionQueryParams extends QueryParams {\n filter: string;\n limit: number;\n offset: number;\n sort: string;\n search: string;\n}\n\nexport type CollectionBasicQueryParams = Omit<CollectionQueryParams, 'search'>\n\nexport type NoQueryParams = {\n [key in any]: never;\n}\n\nexport type CollectionResponse<T> = {\n data: Array<T>;\n empty: boolean;\n id: number;\n limit: number;\n next: string;\n offset: number;\n previous: string;\n search: string;\n sort: string;\n total: number;\n}\n\nexport type SimpleCollectionResponse<T> = Pick<CollectionResponse<T>, 'data' | 'id'>;\nexport type NoData = void;\n","import {AxiosRequestConfig, AxiosResponse, Method} from 'axios';\nimport {stringify} from 'qs';\nimport {API} from '../API';\nimport {ALLOWED_HTTP_METHODS, QueryParams} from './models/HTTP';\nimport {AbortController} from 'node-abort-controller';\n\n\n/**\n * @typeParam RESPONSE HTTP Response return type.\n * @typeParam QUERY_PARAMS Allowed Query Params\n * @typeParam DATA Allowed Data Object\n */\nexport class APIEntity<RESPONSE = any, QUERY_PARAMS extends QueryParams | void = QueryParams, DATA = any> {\n\n root: API;\n\n protected stack: Array<string | number> = [];\n protected requestConfig: AxiosRequestConfig = {};\n protected ALLOWED_HTTP_METHODS: Array<Method> = ALLOWED_HTTP_METHODS;\n protected abortController: AbortController;\n\n /**\n * Constructor\n * @param {APIEntity|object} [parent] - Specifies a parent from which should be inherited properties\n */\n constructor(parent: APIEntity<RESPONSE> | API) {\n if (parent instanceof APIEntity) {\n this.root = parent.root;\n\n if (Array.isArray(parent.stack)) { //???\n this.push(...parent.stack);\n }\n\n if (parent.requestConfig != null) {\n this.setRequestConfig(parent.requestConfig);\n }\n } else {\n this.root = parent;\n }\n this.abortController = new AbortController();\n }\n\n abortRequest() {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n push(...items: Array<string | number>): this {\n this.stack = this.stack.concat(items);\n return this;\n }\n\n shift(): this {\n this.stack.shift();\n return this;\n }\n\n restack(...items: Array<string | number>): this {\n this.stack = items;\n return this;\n }\n\n /**\n * Get first element of the stack\n */\n get first(): string | number {\n return this.stack[0];\n }\n\n /**\n * Get last element of the stack\n */\n get last(): string | number {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Set last element of the stack\n */\n set last(val) {\n this.stack[this.stack.length - 1] = val;\n }\n\n toUrl(absolute = false): string {\n let url = `/${this.stack.join('/')}`;\n\n if (absolute) {\n url = this.root.baseUrl + url;\n }\n\n return url;\n }\n\n setRequestConfig(requestConfig: AxiosRequestConfig): this {\n Object.deepAssign(this.requestConfig, requestConfig);\n return this;\n }\n\n removeRequestConfig(key: keyof AxiosRequestConfig): this {\n delete this.requestConfig[key];\n return this;\n }\n\n headers(headers: Record<string, string>): this {\n const _headers: Record<string, string> = {};\n\n // Unify/Standarize headers keys\n for (const key in headers) {\n const newKey = key.replace(/(?:^|-)([a-z])/g, (letter) => letter.toUpperCase());\n _headers[newKey] = headers[key];\n }\n\n return this.setRequestConfig({\n headers: _headers\n });\n }\n\n /**\n * Set HTTP method\n */\n method(name: Method): this {\n const NAME: Uppercase<Method> = <Uppercase<Method>>name.toLocaleUpperCase();\n const isAllowed: boolean = this.ALLOWED_HTTP_METHODS.indexOf(NAME) > -1;\n\n if (!isAllowed) {\n throw new Error(`Method '${NAME}' is not allowed! You can use: ${this.ALLOWED_HTTP_METHODS.join(', ')}`);\n }\n\n return this.setRequestConfig({\n method: NAME\n });\n }\n\n /**\n * Set GET as HTTP method\n */\n get(): this {\n return this.method('GET');\n }\n\n /**\n * Set POST as HTTP method\n */\n post(): this {\n return this.method('POST');\n }\n\n /**\n * Set DELETE as HTTP method\n */\n delete(): this {\n return this.method('DELETE');\n }\n\n /**\n * Set params\n */\n params<T extends keyof QUERY_PARAMS = keyof QUERY_PARAMS>(params: Pick<QUERY_PARAMS, T>): this {\n this.setRequestConfig({params});\n return this;\n }\n\n getParams(): Partial<QUERY_PARAMS> {\n return this.requestConfig.params == null ? {} : this.requestConfig.params;\n }\n\n removeParam(key: keyof QUERY_PARAMS): this {\n delete this.requestConfig.params[key];\n return this;\n }\n\n /**\n * Set data\n */\n data(data: DATA): this {\n this.setRequestConfig({data});\n return this;\n }\n\n /**\n * Set JSON data\n */\n jsonData(data: DATA): this {\n this.headers({\n 'Content-Type': 'application/json'\n }).data(data);\n return this;\n }\n\n /**\n * Set form data\n */\n formData(data: DATA): this {\n this.headers({\n 'Content-Type': 'multipart/form-data'\n }).data(data);\n return this;\n }\n\n /**\n * Send request\n */\n send<T = RESPONSE>(): Promise<AxiosResponse<T>> {\n const requestConfig = <AxiosRequestConfig>Object.deepAssign({}, this.requestConfig, {\n url: `/${this.stack.join('/')}`,\n signal: this.abortController.signal\n });\n\n // Set default headers\n if (requestConfig.headers == null) {\n requestConfig.headers = {};\n }\n\n if (requestConfig.headers['Content-Type'] == null) {\n requestConfig.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n }\n\n // Convert data if needed\n if (requestConfig.method === 'POST' &&\n (<string>requestConfig.headers['Content-Type']).startsWith('application/x-www-form-urlencoded') &&\n requestConfig.data != null) {\n requestConfig.data = this.paramsSerializer(requestConfig.data);\n }\n\n if (requestConfig.params) {\n requestConfig.paramsSerializer = {indexes: false};\n }\n\n // Send request\n return this.root.axios.request<T>(requestConfig);\n }\n\n protected paramsSerializer(params: DATA | QUERY_PARAMS): string {\n return stringify(params, {\n arrayFormat: 'brackets'\n });\n }\n}\n\n\nexport default APIEntity;\n","import {AxiosResponse} from 'axios';\nimport {FilterBuilder} from '../FilterBuilder'\nimport {APIEntity} from './APIEntity'\nimport {\n APIOrder,\n CollectionBasicQueryParams,\n CollectionQueryParams,\n CollectionResponse,\n NoQueryParams,\n SimpleCollectionResponse\n} from './models/HTTP';\n\n\nexport const DEFAULT_LIMIT: number = 20;\nexport const DEFAULT_OFFSET: number = 0;\n\nexport type APIListQuery = CollectionBasicQueryParams | CollectionQueryParams | NoQueryParams;\n\nexport class APIList<RESPONSE = any, QUERY_PARAMS extends APIListQuery = CollectionQueryParams, DATA = any>\n extends APIEntity<CollectionResponse<RESPONSE> | SimpleCollectionResponse<RESPONSE>, QUERY_PARAMS, DATA> {\n\n /**\n * Shortcut for sending data POST\n */\n create(data: DATA): Promise<AxiosResponse<RESPONSE>> {\n return this.post().data(data).send<RESPONSE>();\n }\n\n /**\n * Sets sorting\n *\n * @public\n * @param {string} name - Name of the column according to which the data will be sorted\n * @param {string} [order=a] - Sorting order. Possibilities: 'a', 'd'\n */\n sort(name: string, order: APIOrder = APIOrder.asc): this {\n return this.params<'sort'>({\n sort: `${name}_${order}`\n });\n }\n\n /**\n * Sets limit\n *\n * @public\n * @param {number} [limit=DEFAULT_LIMIT] - Limit to be set\n * @returns this\n */\n limit(limit = DEFAULT_LIMIT): this {\n if (!Number.isNatural(limit)) {\n throw new Error(`Limit '${limit}' is invalid!`);\n }\n\n return this.params<'limit'>({\n limit\n });\n }\n\n /**\n * Gets limit\n *\n * @public\n * @returns number\n */\n getLimit(): number {\n const params = this.getParams();\n return params.limit == null ? DEFAULT_LIMIT : <number>params.limit;\n }\n\n /**\n * Disables limit\n *\n * @public\n * @returns this\n */\n noLimit(): this {\n return this.limit(0);\n }\n\n /**\n * Sets offset\n *\n * @public\n * @param {number} [offset=DEFAULT_OFFSET] - Offset to be set\n * @returns this\n */\n offset(offset: number = DEFAULT_OFFSET): this {\n if (!Number.isNatural(offset)) {\n throw new Error(`Offset '${offset}' is invalid!`);\n }\n\n return this.params<'offset'>({\n offset\n });\n }\n\n /**\n * Sets limit and offset so that will request from BE records between range\n *\n * @public\n * @param {number} from - From index\n * @param {number} to - To index\n * @returns this\n */\n between(from: number, to: number): this {\n if (!Number.isNatural(from)) {\n throw new Error(`From '${from}' is invalid!`);\n }\n\n if (!Number.isNatural(to)) {\n throw new Error(`To '${to}' is invalid!`);\n }\n\n return this.params<'offset' | 'limit'>({\n offset: from,\n limit: 1 + (to - from)\n });\n }\n\n /**\n * Sets limit and offset so that will request from BE one record on given index\n *\n * @public\n * @param {number} idx - Index\n * @returns this\n */\n only(idx: number): this {\n if (!Number.isNatural(idx)) {\n throw new Error(`Index '${idx}' is invalid!`);\n }\n\n return this.params<'offset' | 'limit'>({\n offset: idx,\n limit: 1\n });\n }\n\n /**\n * Gets current limit and sets offset so that will request from BE one page of records\n *\n * @public\n * @param {number} [page=1] - Page number (counted from 1)\n * @returns this\n */\n page(page = 1): this {\n if (!Number.isNatural(page) || page == 0) {\n throw new Error(`Page '${page}' is invalid!`);\n }\n\n const limit = this.getLimit();\n const offset = (page - 1) * limit;\n\n return this.params<'offset' | 'limit'>({\n offset,\n limit\n });\n }\n\n /**\n * Sets search\n *\n * query param is working like SQL LIKE. BE sets wraps around query with %, and replaces every white character\n * with %. So e.g. if query='my device', then it's searching for '%my%device%' in DB.\n *\n * @public\n * @param {string} query - Query to search for\n * @returns this\n */\n search(query: string): this {\n if (typeof query !== 'string') {\n throw new Error('Search query must be a string!');\n }\n\n return this.params<'search'>({\n search: query\n });\n }\n\n /**\n * Sets filter\n *\n * @public\n * @param {FilterBuilder|string} filter - Filter\n * @returns this\n */\n filter(filter: FilterBuilder | string): this {\n const isFilterBuilder = filter instanceof FilterBuilder;\n\n if (typeof filter !== 'string' && !isFilterBuilder) {\n throw new Error('Filter must be either string or instance of FilterBuilder');\n }\n\n return this.params<'filter'>({\n filter: filter.toString()\n });\n }\n\n /**\n * Alias for 'noLimit'\n *\n * @public\n * @see noLimit\n * @returns this\n */\n all: typeof APIList.prototype.noLimit = this.noLimit;\n\n /**\n * Alias for 'between'\n *\n * @public\n * @param {number} from - From idx\n * @param {number} to - To idx\n * @returns this\n */\n cut: typeof APIList.prototype.between = this.between;\n}\n\nexport default APIList;\n","import {APIEntity} from './APIEntity'\nimport {QueryParams} from './models/HTTP';\n\n\n/**\n * APIResource\n *\n * @class\n * @extends APIEntity\n */\nexport class APIResource<RESPONSE = any, QUERY_PARAMS extends QueryParams | void = QueryParams, DATA = QUERY_PARAMS>\n extends APIEntity<RESPONSE, QUERY_PARAMS, DATA> {\n}\n\n\nexport default APIResource;\n","import {APIAdminListDevices} from './APIAdminListDevices';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {CleanupConfigurationData, SpecificCleanupConfigurationQueryParams} from './models/CleanupConfiguration';\nimport {DeviceCleanupConfiguration} from './models/Device';\nimport {CollectionQueryParams, NoData} from './models/HTTP';\n\n\nexport class APIListCleanupConfigurations extends APIList<DeviceCleanupConfiguration, CollectionQueryParams, CleanupConfigurationData> {\n\n /**\n * /cleanup-configurations\n */\n constructor(parent: APIAdminListDevices) {\n super(parent);\n this.push('cleanup-configurations');\n }\n\n // /cleanup-configurations/specific\n specific() {\n return new APIResource<DeviceCleanupConfiguration, Partial<SpecificCleanupConfigurationQueryParams>, NoData>(this)\n .push('specific');\n }\n\n}\n\nexport default APIListCleanupConfigurations\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIResource} from './APIResource'\nimport {CleanupConfigurationSpecificData, DeviceCleanupConfiguration} from './models/Device';\nimport {NoData} from './models/HTTP';\nimport APIList from './APIList';\n\n\nexport class APIResourceCleanupConfiguration extends APIResource<DeviceCleanupConfiguration> {\n //shuldn't it be APIAdminResourceCleanupConfiguration\n\n /**\n * admin/devices/cleanup-configurations/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('cleanup-configurations', id);\n }\n\n // admin/devices/cleanup-configurations/{id}/devices\n devices() {\n return new APIList<DeviceCleanupConfiguration, CleanupConfigurationSpecificData, NoData>(this).push('devices');\n }\n\n}\n\nexport default APIResourceCleanupConfiguration\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIListCleanupConfigurations} from './APIListCleanupConfigurations';\nimport {APIResourceCleanupConfiguration} from './APIResourceCleanupConfiguration';\nimport {AdminDevice, AdminDeviceData, AdminDevicesQueryParams} from './models/AdminDevice';\n\n\nexport class APIAdminListDevices extends APIList<AdminDevice, AdminDevicesQueryParams, AdminDeviceData> {\n\n /**\n * /admin/devices\n */\n constructor(parent: APIAdminResource | API) {\n super(parent);\n this.push('admin', 'devices');\n }\n\n // /admin/devices/cleanup-configurations\n cleanupConfigurations() {\n return new APIListCleanupConfigurations(this);\n }\n\n // /admin/devices/cleanup-configurations/{id}\n cleanupConfiguration(id: number) {\n return new APIResourceCleanupConfiguration(this, id);\n }\n\n}\n\nexport default APIAdminListDevices;\n","import {Method} from 'axios';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource';\nimport {AdminTestRun} from './models/AdminTestRun';\nimport {RunsConfigParams, TestRunConfig} from './models/TestRun';\n\nexport class APIAdminListRuns extends APIList<AdminTestRun> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET'];\n\n /**\n * /admin/runs\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'runs');\n }\n\n // /runs/config\n config() {\n const apiResource = new APIResource<TestRunConfig, RunsConfigParams, TestRunConfig>(this);\n apiResource.restack('runs', 'config');\n return apiResource;\n }\n\n}\n\n\nexport default APIAdminListRuns\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {AdminServicesParams, Service} from './models/Service';\n\n\nexport class APIAdminListServices extends APIList<Service, AdminServicesParams, Service> {\n\n /**\n * /admin/services\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'services');\n }\n\n active() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'notArchived'>({\n notArchived: true\n });\n return apiList;\n }\n\n activated() {\n const apiList = this.active();\n apiList.params<'filter' | 'limit' | 'sort'>({\n filter: 'activated_eq_true',\n limit: 0,\n sort: 'name_a'\n })\n return apiList;\n }\n\n inUse() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'inUse' | 'limit' | 'sort'>({\n inUse: true,\n limit: 0,\n sort: 'name_a'\n })\n return apiList;\n }\n\n byPrice() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'sort'>({\n sort: 'centPrice_a'\n })\n return apiList;\n }\n\n}\n\nexport default APIAdminListServices;\n","import {AxiosResponse} from 'axios';\n\nexport function NonRequestable<T extends {new(...args: any[]): object}>(constructor: T) {\n return class extends constructor {\n send(): Promise<AxiosResponse> {\n return Promise.reject();\n }\n };\n}\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AdminFrameworkStatistics, AdminStatisticsParams} from './models/AdminFrameworkStatistics';\nimport {NoData} from './models/HTTP';\n\n\n@NonRequestable\nexport class APIAdminListStatistics extends APIList {\n\n /**\n * /admin/statistics\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'statistics');\n }\n\n // /admin/statistics/frameworks\n frameworks() {\n return new APIList<AdminFrameworkStatistics, AdminStatisticsParams, NoData>(this).push('frameworks');\n }\n\n\n}\n\n\nexport default APIAdminListStatistics\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource'\nimport {\n Account, AccountData,\n AccountUsage,\n AccountUsageParams,\n AccountUsageSummary,\n AccountUsageSummaryParams\n} from './models/Account';\nimport {NoData, NoQueryParams, SimpleCollectionResponse} from './models/HTTP';\nimport {Role, RoleData, RoleParams} from './models/Role';\nimport {AccountService} from './models/AccountService';\nimport {AccountPreferences, AccountPreferencesData} from './models/AccountPreference';\n\n\nexport class APIAdminResourceAccount extends APIResource<Account, NoQueryParams, AccountData> {\n\n /**\n * /admin/accounts/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'accounts', id);\n }\n\n // /admin/accounts/{id}/roles\n roles() {\n return new APIList<Role, RoleParams, RoleData>(this).push('roles');\n }\n\n // /admin/accounts/{id}/roles/{id}\n role(id: number) {\n return new APIResource<Role, RoleParams, NoData>(this).push('roles', id);\n }\n\n // /admin/accounts/{id}/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('account-services');\n }\n\n // /accounts/{id}/preferences\n preferences() {\n return new APIResource<AccountPreferences, NoQueryParams, AccountPreferencesData>(this).push('preferences');\n }\n\n // /admin/accounts/{id}/usage\n usage() {\n return new APIList<SimpleCollectionResponse<AccountUsage>, AccountUsageParams>(this).push('usage');\n }\n\n // /admin/accounts/{id}/usage-summary\n usageSummary() {\n return new APIResource<AccountUsageSummary, AccountUsageSummaryParams>(this).push('usage-summary');\n }\n\n}\n\nexport default APIAdminResourceAccount\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {AccountService} from './models/AccountService';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\nexport class APIAdminResourceAccountService extends APIResource<AccountService, NoQueryParams, NoData> {\n\n /**\n * /admin/account-services/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'account-services', id);\n }\n\n // /account-services/{id}/activate\n activate() {\n return new APIResource<AccountService, NoQueryParams, NoData>(this).push('activate').post();\n }\n\n // /account-services/{id}/deactivate\n deactivate() {\n return new APIResource<AccountService, NoQueryParams, NoData>(this).push('deactivate').post();\n }\n\n}\n\nexport default APIAdminResourceAccountService\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {AdminDevice} from './models/AdminDevice';\nimport {Cluster, ClusterData, ClusterParams} from './models/Cluster';\n\n\nexport class APIAdminResourceCluster extends APIResource<Cluster, ClusterParams, ClusterData> {\n\n /**\n * /clusters/{id}\n */\n constructor(parent: API | APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('clusters', id);\n }\n\n // /clusters/{id}/devices\n devices() {\n return new APIList<AdminDevice>(this).push('devices');\n }\n\n}\n\nexport default APIAdminResourceCluster\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {AdminDevice, AdminDeviceData} from './models/AdminDevice';\nimport {AdminDeviceSession} from './models/AdminDeviceSession';\nimport {\n DeviceCleanupConfiguration,\n DeviceCleanupConfigurationData,\n DeviceLabelData,\n DeviceProperty\n} from './models/Device';\nimport {NoData, NoQueryParams, QueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceDevice extends APIResource<AdminDevice, NoQueryParams, AdminDeviceData> {\n\n /**\n * /admin/devices/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'devices', id);\n }\n\n // /admin/devices/{id}/cleanup-configuration\n cleanupConfiguration() {\n return new APIResource<DeviceCleanupConfiguration, QueryParams, DeviceCleanupConfigurationData>(this).push('cleanup-configuration');\n }\n\n // /admin/devices/{id}/labels\n labels() {\n return new APIList<DeviceProperty, NoQueryParams, DeviceLabelData>(this).push('labels');\n }\n\n // /admin/devices/{id}/labels/{id}\n label(id: number) {\n return new APIResource<DeviceProperty, NoQueryParams, NoData>(this).push('labels', id);\n }\n\n // /admin/devices/{id}/queue\n queue() {\n return new APIList<AdminDeviceSession>(this).push('queue');\n }\n\n}\n\nexport default APIAdminResourceDevice\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Browser, DeviceBrowserData} from './models/Browser';\nimport {DeviceModel, DeviceModelData} from './models/DeviceModel';\nimport {NoQueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceDeviceModel extends APIResource<DeviceModel, NoQueryParams, DeviceModelData> {\n\n /**\n * /admin/device-models/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'device-models', id);\n }\n\n // /admin/device-models/{id}/browsers\n browsers() {\n return new APIList<Browser, NoQueryParams, DeviceBrowserData>(this).push('browsers');\n }\n\n}\n\nexport default APIAdminResourceDeviceModel;\n","import {API} from '../../API';\nimport {APIEntity} from '../APIEntity';\nimport {APIList} from '../APIList'\nimport {APIResource} from '../APIResource'\nimport {NonRequestable} from '../decorators/NonRequestable';\nimport {NoData} from '../models/HTTP';\nimport {UserFile} from '../models/UserFile';\nimport {FilesQueryParams} from './FilesQueryParams';\n\n\n@NonRequestable\nexport class InputFileset extends APIResource<NoData> {\n\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('input-file-set');\n }\n\n /**\n * @remarks Endpoint /input-file-set/files\n */\n files() {\n return new APIList<UserFile, FilesQueryParams, NoData>(this).push('files');\n }\n\n /**\n * @remarks Endpoint /input-file-set/files.zip\n */\n filesZip() {\n return new APIResource<Blob, FilesQueryParams>(this).push('files.zip');\n }\n}\n\nexport default InputFileset\n","// Create image files filter\nimport FilterBuilder from '../../FilterBuilder';\n\nexport const IMAGE_FILES_FILTER = new FilterBuilder();\nIMAGE_FILES_FILTER.eq('state', 'READY');\nIMAGE_FILES_FILTER.in('mimetype', [\n 'image/png', 'image/jpg', 'image/jpeg', 'image/webp', 'image/gif'\n]);\nIMAGE_FILES_FILTER.notlike('name', 'action-%%');\n","// Create non-media files filter\nimport FilterBuilder from '../../FilterBuilder';\n\nexport const NON_MEDIA_FILES_FILTER = new FilterBuilder();\nNON_MEDIA_FILES_FILTER.eq('state', 'READY');\nNON_MEDIA_FILES_FILTER.notin('mimetype', [\n // no images\n 'image/png', 'image/jpg', 'image/jpeg', 'image/webp', 'image/gif',\n\n // no videos\n 'video/mp4', 'video/avi', 'video/webm', 'video/ogg', 'video/mpeg'\n]);\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {UserFile} from './models/UserFile';\nimport {FilesQueryParams} from './class/FilesQueryParams';\nimport {IMAGE_FILES_FILTER} from './class/Images.filter';\nimport {NON_MEDIA_FILES_FILTER} from './class/NonMedia.filter';\n\n\nexport class APIListOutputFiles extends APIList<UserFile, FilesQueryParams> {\n\n /**\n * /files\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('files');\n }\n\n performance(): this {\n return this.params({\n tag: ['performance']\n })\n }\n\n images(): this {\n return this.filter(IMAGE_FILES_FILTER);\n }\n\n // Filter files out by non-media\n nonMediaFiles(): this {\n return this.filter(NON_MEDIA_FILES_FILTER);\n }\n\n // Filter files out by ready videos\n videos(): this {\n return this.params({\n filter: 's_state_eq_READY',\n tag: ['video']\n });\n }\n}\n\nexport default APIListOutputFiles;\n","import {API} from '../../API';\nimport {APIEntity} from '../APIEntity';\nimport {APIList} from '../APIList'\nimport {APIResource} from '../APIResource'\nimport {NonRequestable} from '../decorators/NonRequestable';\nimport {Screenshot} from '../models/Screenshot';\nimport {UserFile} from '../models/UserFile';\nimport {FilesQueryParams} from './FilesQueryParams';\nimport APIListOutputFiles from '../APIListOutputFiles';\n\n\n@NonRequestable\nexport class OutputFileset extends APIResource<UserFile, FilesQueryParams> {\n\n /**\n * /output-file-set\n *\n * Constructor\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('output-file-set');\n }\n\n // /output-file-set/files\n files() {\n return new APIListOutputFiles(this);\n }\n\n // /output-file-set/files/{id}\n file(id: number) {\n return new APIResource<UserFile, FilesQueryParams>(this).push('files', id);\n }\n\n // /output-file-set/files.zip\n filesZip() {\n return new APIResource<Blob, FilesQueryParams>(this).push('files.zip');\n }\n\n // /output-file-set/screenshots\n screenshots() {\n return new APIList<Screenshot, FilesQueryParams>(this).push('screenshots');\n }\n\n // /output-file-set/screenshots/{id}\n screenshot(id: number) {\n return new APIResource<Screenshot, FilesQueryParams>(this).push('screenshots', id);\n }\n\n // /output-file-set/screenshots/{id}/file/{id}\n screenshotFile(id: number) {\n return this.screenshot(id).push('file');\n }\n}\n\nexport default OutputFileset\n","import {Screenshot} from './models/Screenshot';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport APIList from './APIList';\nimport APIResourceDeviceSessionCommon from './APIResourceDeviceSessionCommon';\n\n\nexport class APIListScreenshots extends APIList<Screenshot, CollectionBasicQueryParams, NoData> {\n\n /**\n * screenshots\n */\n constructor(parent: APIResourceDeviceSessionCommon) {\n super(parent);\n this.push('screenshots');\n }\n}\n\nexport default APIListScreenshots\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource'\nimport {InputFileset} from './class/InputFileset'\nimport {OutputFileset} from './class/OutputFileset'\nimport {DeviceSessionCommon} from './interface/DeviceSessionCommon';\nimport {\n DeviceSession,\n DeviceSessionCommand,\n DeviceSessionStep,\n SessionRunStepQueryParams,\n SessionStepQueryParams\n} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport APIListScreenshots from './APIListScreenshots';\n\n\nexport class APIResourceDeviceSessionCommon extends APIResource<DeviceSession> implements DeviceSessionCommon {\n\n /**\n * /device-sessions/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-sessions', id);\n }\n\n // /device-sessions/{id}/commands\n commands() {\n return new APIList<DeviceSessionCommand>(this).push('commands');\n }\n\n // /device-sessions/{id}/input-file-set\n input() {\n return new InputFileset(this);\n }\n\n // /device-sessions/{id}/output-file-set\n output() {\n return new OutputFileset(this);\n }\n\n // /device-sessions/{id}/release\n release() {\n return new APIResource<DeviceSession, NoQueryParams, void>(this).push('release').post();\n }\n\n // /device-sessions/{id}/screenshots\n screenshots() {\n return new APIListScreenshots(this);\n }\n\n // /device-sessions/{id}/screenshots/{id}\n screenshot(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource(this).push('screenshots', id);\n }\n\n // /device-sessions/{id}/steps\n steps() {\n return new APIList<DeviceSessionStep, CollectionBasicQueryParams | SessionRunStepQueryParams | SessionStepQueryParams, NoData>(this).push('steps');\n }\n\n // /device-sessions/{id}/steps/{id}\n step(id: number | 'current') {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<DeviceSessionStep, NoQueryParams, NoData>(this).push('steps', id);\n }\n\n // /device-sessions/{id}/steps/current\n currentStep() {\n return this.step('current');\n }\n\n // /device-sessions/{id}/connections\n connections() {\n return new APIList(this).push('connections');\n }\n\n logs() {\n return new APIResource(this).push('logs').setRequestConfig({\n responseType: 'text'\n });\n }\n\n clusterLogs() {\n return new APIResource(this).push('cluster-logs').setRequestConfig({\n responseType: 'text'\n });\n }\n\n}\n\nexport default APIResourceDeviceSessionCommon\n","import {APIResourceDeviceSessionCommon} from './APIResourceDeviceSessionCommon';\nimport {postAdminDeviceSessionChangeBillable} from './factory/postAdminDeviceSessionChangeBillable';\nimport {DeviceSessionCommon} from './interface/DeviceSessionCommon';\n\n\n/**\n * APIAdminResourceDevice\n *\n *\n * It will require more work to decouple from regular session\n */\nexport class APIAdminResourceDeviceSessionStandalone extends APIResourceDeviceSessionCommon implements DeviceSessionCommon {\n\n // /admin/device-sessions/{id}/changebillable\n changeBillable(billable: boolean) {\n return postAdminDeviceSessionChangeBillable(this, billable);\n }\n}\n\nexport default APIAdminResourceDeviceSessionStandalone;\n","import {APIResource} from '../APIResource';\nimport APIResourceDeviceSessionCommon from '../APIResourceDeviceSessionCommon';\nimport {DeviceSession} from '../models/DeviceSession';\n\nexport function postAdminDeviceSessionChangeBillable(parent: APIResourceDeviceSessionCommon, billable: boolean) {\n const apiResource = new APIResource<DeviceSession>(parent);\n const deviceSessionId = apiResource.last;\n\n return apiResource.restack('admin', 'device-sessions', deviceSessionId, 'changebillable').params({\n billable\n }).post();\n}\n\nexport default postAdminDeviceSessionChangeBillable;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {NoData} from './models/HTTP';\nimport {DeviceTimeParams, UserDeviceTime} from './models/UserDeviceTime';\n\nexport class APIAdminResourceDeviceTime extends APIList<UserDeviceTime, DeviceTimeParams, NoData> {\n\n /**\n * /admin/device-time\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'device-time');\n }\n}\n\nexport default APIAdminResourceDeviceTime\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Framework, FrameworkConfigData, FrameworkEditData} from './models/Framework';\nimport {NoQueryParams} from './models/HTTP';\nimport {ProjectJobConfig} from './models/ProjectJobConfig';\nimport {Role} from './models/Role';\n\nexport class APIAdminResourceFramework extends APIResource<Framework, NoQueryParams, FrameworkEditData> {\n\n /**\n * /admin/frameworks/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'frameworks', id);\n }\n\n // /admin/frameworks/{id}/config\n config() {\n return new APIResource<ProjectJobConfig, NoQueryParams, FrameworkConfigData>(this).push('config');\n }\n\n // /admin/frameworks/{id}/required-roles\n requiredRoles() {\n return new APIList<Role>(this).push('required-roles');\n }\n\n}\n\nexport default APIAdminResourceFramework\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {License} from './models/License';\n\nexport class APIAdminResourceLicense extends APIResource<License, NoQueryParams, NoData> {\n\n /**\n * /licenses/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'licenses', id);\n }\n\n // /licenses/{id}/activate\n activate() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('activate');\n }\n\n // /licenses/{id}/deactivate\n deactivate() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('deactivate');\n }\n\n // /licenses/{id}/resend\n resend() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('resend');\n }\n\n // /licenses/{id}/download\n download() {\n return new APIResource<Blob, NoQueryParams, NoData>(this).push('download');\n }\n\n}\n\nexport default APIAdminResourceLicense\n","import {APIEntity} from '../APIEntity';\nimport {APIResource} from '../APIResource';\nimport {BuildLogsData, BuildLogsParams} from '../models/UserFile';\n\nexport function postDeviceRunIds<T>(parent: APIEntity, name: string, ids?: Array<number>) {\n const a = new APIResource<T, BuildLogsParams, BuildLogsData>(parent).push(name);\n\n if (ids != null) {\n a.params<'deviceRunIds'>({\n deviceRunIds: ids\n });\n }\n\n return a.post();\n}\n\nexport default postDeviceRunIds;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {postDeviceRunIds} from './factory/postDeviceRunIds';\nimport {AdminTestRun, RunChangeBillableParams, RunChangePriorityParams} from './models/AdminTestRun';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceRunStandalone extends APIResource<AdminTestRun, NoQueryParams, NoData> {\n\n /**\n * /runs/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'runs', id);\n }\n\n // /runs/{id}/abort\n abort() {\n return new APIResource<AdminTestRun, NoQueryParams, NoData>(this).push('abort').post();\n }\n\n // /runs/{id}/changebillable\n changeBillable(billable: boolean) {\n return new APIResource<AdminTestRun, RunChangeBillableParams>(this).push('changebillable').post().params({\n billable\n });\n }\n\n // /runs/{id}/changepriority\n changePriority(priority?: number) {\n const resource = new APIResource<AdminTestRun, RunChangePriorityParams>(this).push('changepriority');\n if (priority) {\n resource.post().data({\n priority\n });\n }\n return resource;\n }\n\n // /admin/runs/{id}/retry\n retry(ids?: Array<number>) {\n return postDeviceRunIds<AdminTestRun>(this, 'retry', ids).setRequestConfig({\n timeout: 0\n });\n }\n\n}\n\nexport default APIAdminResourceRunStandalone;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {Service, ServiceActivateData} from './models/Service';\n\n\nexport class APIAdminResourceService extends APIResource<Service, NoQueryParams, NoData> {\n\n /**\n * /services/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'services', id);\n }\n\n // /services/{id}/activate\n activate() {\n return new APIResource<Service, ServiceActivateData>(this).push('activate').post();\n }\n\n}\n\nexport default APIAdminResourceService\n","import {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AccountService, AccountServiceData} from './models/AccountService';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Role, RoleData} from './models/Role';\nimport {User, UserUpdateAccount} from './models/User';\n\n@NonRequestable\nexport class APIAdminResourceUserAccount extends APIResource {\n\n /**\n * /account\n */\n constructor(parent: APIAdminResourceUser) {\n super(parent);\n this.push('account');\n }\n\n // /account/roles\n roles() {\n return new APIList<Role, NoQueryParams, RoleData>(this).push('roles');\n }\n\n // /account/roles/{id}\n role(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<Role, NoQueryParams, NoData>(this).push('roles', id);\n }\n\n // /account-services\n services() {\n const a = new APIList<AccountService, CollectionQueryParams, AccountServiceData>(this);\n a.last += '-services';\n return a;\n }\n\n // /update-account\n update() {\n const a = new APIResource<User, UserUpdateAccount>(this);\n a.last = 'update-account';\n return a.post();\n }\n\n}\n\nexport default APIAdminResourceUserAccount\n","import {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceUser} from './APIResourceUser';\nimport {InputFileset} from './class/InputFileset';\nimport {OutputFileset} from './class/OutputFileset';\nimport {DeviceSessionStandalone} from './interface/DeviceSessionStandalone';\nimport {Connection, ConnectionData} from './models/Connection';\nimport {DeviceSession, DeviceSessionRelease} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {VisualTest} from './models/VisualTest';\n\nexport class APIResourceDeviceSessionStandalone extends APIResource<DeviceSession> implements DeviceSessionStandalone {\n\n /**\n * /device-sessions/{id}\n */\n constructor(parent: APIResourceUser | APIAdminResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-sessions', id);\n }\n\n // /device-sessions/{id}/connections\n connections() {\n return new APIList<Connection, CollectionBasicQueryParams, ConnectionData>(this).push('connections');\n }\n\n // /device-sessions/{id}/connections/{id}\n connection(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<Connection, NoQueryParams, NoData>(this).push('connections', id);\n }\n\n // /device-sessions/{id}/input-file-set\n input() {\n return new InputFileset(this);\n }\n\n // /device-sessions/{id}/output-file-set\n output() {\n return new OutputFileset(this);\n }\n\n // /device-sessions/{id}/release\n release() {\n return new APIResource<DeviceSession, NoQueryParams, DeviceSessionRelease>(this).push('release').post();\n }\n\n // /device-sessions/{id}/visual-tests/images\n visualTestsImages() {\n return new APIList<VisualTest, NoQueryParams, NoData>(this).push('visual-tests', 'images');\n }\n\n}\n\nexport default APIResourceDeviceSessionStandalone\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIAdminResourceUserAccount} from './APIAdminResourceUserAccount';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceDeviceSessionStandalone} from './APIResourceDeviceSessionStandalone';\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {License} from './models/License';\nimport {Role, RoleData, RoleParams} from './models/Role';\nimport {User} from './models/User';\n\n\n@NonRequestable\nexport class APIAdminResourceUser extends APIResource<User> {\n\n /**\n * /admin/users/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'users', id);\n }\n\n // /admin/users/{id}/disable\n disable() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('disable');\n }\n\n // /admin/users/{id}/enable\n enable() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('enable');\n }\n\n // /admin/users/{id}/licenses\n licenses() {\n return new APIList<License, CollectionQueryParams, NoData>(this).push('licenses');\n }\n\n // /admin/users/{id}/resend-activation\n resendActivation() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('resend-activation').post();\n }\n\n // /admin/users/{id}/account\n account() {\n return new APIAdminResourceUserAccount(this);\n }\n\n // /admin/users/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSessionStandalone(this, id);\n }\n\n // /admin/users/{id}/roles\n roles() {\n return new APIList<Role, RoleParams, RoleData>(this).push('roles');\n }\n\n // /admin/users/{id}/roles/{id}\n role(id: number) {\n return new APIResource<Role, RoleParams, NoData>(this).push('roles', id);\n }\n\n}\n\nexport default APIAdminResourceUser;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {AccessGroup} from './models/AccessGroup';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {SharedResource} from './models/SharedResource';\nimport {User, UserData} from './models/User';\n\nexport class APIResourceAccessGroup extends APIResource<AccessGroup> {\n\n /**\n * /access-groups/{id}\n *\n */\n constructor(parent: APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('access-groups', id);\n }\n\n // /access-groups/{id}/users\n users() {\n return new APIList<User, CollectionBasicQueryParams, UserData>(this).push('users');\n }\n\n // /access-groups/{id}/users/{id}\n user(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id);\n }\n\n // /access-groups/{id}/resources\n resources() {\n return new APIList<SharedResource, CollectionBasicQueryParams, NoData>(this).push('resources');\n }\n\n // /access-groups/{id}/resources/{id}\n resource(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<SharedResource, NoQueryParams, NoData>(this).push('resources', id);\n }\n\n}\n\nexport default APIResourceAccessGroup\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport APIResourceUser from './APIResourceUser';\nimport {Device, DeviceProperty} from './models/Device';\nimport {DeviceGroup, DeviceGroupData, DeviceGroupParams, DeviceGroupSelectorData} from './models/DeviceGroup';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {ShareData, SharedResource} from './models/SharedResource';\n\nexport class APIResourceDeviceGroup extends APIResource<DeviceGroup> {\n\n /**\n * /device-groups/{id}\n */\n constructor(parent: APIAdminResource | APIResourceUser | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-groups', id);\n }\n\n // /device-groups/{id}/devices\n devices() {\n return new APIList<Device | DeviceGroup, DeviceGroupParams, DeviceGroupData>(this).push('devices');\n }\n\n // /device-groups/{id}/devices/{id}\n device(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<void, NoQueryParams, NoData>(this).push('devices', id);\n }\n\n // /device-groups/{id}/selectors\n selectors() {\n return new APIList<DeviceProperty | DeviceGroup, CollectionBasicQueryParams, DeviceGroupSelectorData>(this).push('selectors');\n }\n\n // /device-groups/{id}/selectors/{id}\n selector(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource(this).push('selectors', id);\n }\n\n // /device-groups/{id}/share\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n}\n\nexport default APIResourceDeviceGroup\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport {Property} from './models/Property';\nimport {ShareData, SharedResource} from './models/SharedResource';\nimport {FileSizeData, UserFile, UserFileTag} from './models/UserFile';\n\n\nexport class APIResourceFile extends APIResource<UserFile> {\n\n /**\n * /files/{id}\n */\n constructor(parent: API | APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('files', id);\n }\n\n // use this to download file content\n // /files/{id}/file\n file() {\n return new APIResource<UserFile, FileSizeData, NoData>(this).push('file');\n }\n\n // /files/{id}/icon\n icon() {\n return new APIResource(this).push('icon');\n }\n\n // /files/{id}/tags\n tags() {\n return new APIList<UserFileTag, CollectionBasicQueryParams, NoData>(this).push('tags');\n }\n\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n property(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<Property>(this).push('properties', id);\n }\n\n}\n\nexport default APIResourceFile\n","import {NoData} from './models/HTTP';\nimport {TestCaseRun} from './models/TestCaseRun';\nimport APIList, {APIListQuery} from './APIList';\nimport {SessionQueryParams} from './models/DeviceSession';\nimport APIResourceDeviceSessionCommon from './APIResourceDeviceSessionCommon';\n\n\nexport class APIListTestCaseRuns<Q extends APIListQuery = SessionQueryParams> extends APIList<TestCaseRun, Q, NoData> {\n\n /**\n * /test-case-runs\n */\n constructor(parent: APIResourceDeviceSessionCommon) {\n super(parent);\n this.push('test-case-runs');\n }\n}\n\nexport default APIListTestCaseRuns\n","import {APIResource} from './APIResource';\nimport {APIResourceDeviceSessionCommon} from './APIResourceDeviceSessionCommon';\nimport {DeviceSession as DeviceSessionModel, SessionQueryParams} from './models/DeviceSession';\nimport APIListTestCaseRuns from './APIListTestCaseRuns';\nimport {APIListQuery} from './APIList';\n\nexport class APIResourceDeviceSession<QUERY_PARAMS extends APIListQuery = SessionQueryParams> extends APIResourceDeviceSessionCommon {\n\n // /device-sessions/{id}/abort\n abort() {\n return new APIResource<DeviceSessionModel>(this).push('abort').post();\n }\n\n // /device-sessions/{id}/retry\n retry() {\n return new APIResource<DeviceSessionModel>(this).push('retry').post();\n }\n\n // /device-sessions/{id}/test-case-runs\n testCaseRuns() {\n return new APIListTestCaseRuns<QUERY_PARAMS>(this);\n }\n}\n\nexport default APIResourceDeviceSession\n","import {DeviceSession} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport APIList from './APIList';\nimport APIResourceRunCommon from './APIResourceRunCommon';\n\n\nexport class APIListTestRunDeviceSessions extends APIList<DeviceSession, CollectionBasicQueryParams, NoData> {\n\n /**\n * device-sessions\n */\n constructor(parent: APIResourceRunCommon) {\n super(parent);\n this.push('device-sessions');\n }\n}\n\nexport default APIListTestRunDeviceSessions\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {postDeviceRunIds} from './factory/postDeviceRunIds';\nimport {AdminTestRun} from './models/AdminTestRun';\nimport {DeviceSessionStep} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {RunData, RunQueryParam, TestRun, TestRunData} from './models/TestRun';\nimport {TestRunDataAvailability, TestRunDataAvailabilityQueryParams} from './models/TestRunDataAvailability';\nimport {UserFile} from './models/UserFile';\nimport APIListTestRunDeviceSessions from './APIListTestRunDeviceSessions';\n\n\nexport class APIResourceRunCommon extends APIResource<TestRun, RunQueryParam, TestRunData | RunData> {\n\n /**\n * /runs/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('runs', id);\n }\n\n // /runs/{id}/abort\n abort() {\n return new APIResource<AdminTestRun | TestRun, NoQueryParams, RunData>(this).push('abort').post();\n }\n\n // /runs/{id}/build-logs.zip\n buildLogsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'build-logs.zip', ids);\n }\n\n // /runs/{id}/data-availability\n dataAvailability() {\n return new APIResource<TestRunDataAvailability, TestRunDataAvailabilityQueryParams, NoData>(this).push('data-availability');\n }\n\n // /runs/{id}/device-sessions\n deviceSessions() {\n return new APIListTestRunDeviceSessions(this);\n }\n\n // /runs/{id}/files.zip\n filesZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'files.zip', ids);\n }\n\n // /runs/{id}/logs.zip\n logsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'logs.zip', ids);\n }\n\n // /runs/{id}/performance.zip\n performanceZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'performance.zip', ids);\n }\n\n // /runs/{id}/retry\n retry(ids?: Array<number>) {\n return postDeviceRunIds<TestRun>(this, 'retry', ids).setRequestConfig({\n timeout: 0\n });\n }\n\n // /runs/{id}/screenshots.zip\n screenshotsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'screenshots.zip', ids);\n }\n\n // /runs/{id}/steps\n steps() {\n return new APIList<DeviceSessionStep, CollectionBasicQueryParams, NoData>(this).push('steps');\n }\n\n}\n\nexport default APIResourceRunCommon\n","import {APIResourceDeviceSession} from './APIResourceDeviceSession'\nimport {APIResourceRunCommon} from './APIResourceRunCommon'\nimport {CollectionQueryParams} from './models/HTTP';\n\nexport class APIResourceRun extends APIResourceRunCommon {\n\n // /runs/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSession<CollectionQueryParams>(this, id);\n }\n\n}\n\nexport default APIResourceRun\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceRun} from './APIResourceRun'\nimport {APIResourceUser} from './APIResourceUser';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Project} from './models/Project';\nimport {ShareData, SharedResource} from './models/SharedResource';\nimport {TestRun} from './models/TestRun';\n\nexport class APIResourceProject extends APIResource<Project> {\n\n /**\n * /projects/{id}\n */\n constructor(parent: API | APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('projects', id);\n }\n\n // /projects/{id}/runs\n runs() {\n return new APIList<TestRun, CollectionBasicQueryParams, NoData>(this).push('runs');\n }\n\n // /projects/{id}/runs/{id}\n run(id: number) {\n return new APIResourceRun(this, id);\n }\n\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n // /unarchive\n unarchive() {\n return new APIResource<void, NoQueryParams, NoData>(this).push('unarchive');\n }\n\n}\n\nexport default APIResourceProject\n","import {API} from '../API';\nimport {APIAdminListDevices} from './APIAdminListDevices';\nimport {APIAdminListRuns} from './APIAdminListRuns';\nimport {APIAdminListServices} from './APIAdminListServices';\nimport {APIAdminListStatistics} from './APIAdminListStatistics';\nimport APIAdminResourceAccount from './APIAdminResourceAccount';\nimport {APIAdminResourceAccountService} from './APIAdminResourceAccountService';\nimport {APIAdminResourceCluster} from './APIAdminResourceCluster';\nimport {APIAdminResourceDevice} from './APIAdminResourceDevice';\nimport {APIAdminResourceDeviceModel} from './APIAdminResourceDeviceModel';\nimport {APIAdminResourceDeviceSessionStandalone} from './APIAdminResourceDeviceSessionStandalone';\nimport {APIAdminResourceDeviceTime} from './APIAdminResourceDeviceTime';\nimport {APIAdminResourceFramework} from './APIAdminResourceFramework';\nimport {APIAdminResourceLicense} from './APIAdminResourceLicense';\nimport {APIAdminResourceRunStandalone} from './APIAdminResourceRunStandalone';\nimport {APIAdminResourceService} from './APIAdminResourceService';\nimport {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceAccessGroup} from './APIResourceAccessGroup';\nimport {APIResourceDeviceGroup} from './APIResourceDeviceGroup';\nimport {APIResourceFile} from './APIResourceFile'\nimport {APIResourceProject} from './APIResourceProject';\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AccessGroup, AccessGroupData} from './models/AccessGroup';\nimport {Account} from './models/Account';\nimport {AccountService} from './models/AccountService';\nimport {Activity} from './models/Activity';\nimport {AdminDeviceSession, AdminInteractiveDeviceSession} from './models/AdminDeviceSession';\nimport {AdminDeviceType, DeviceTypeData} from './models/AdminDeviceType';\nimport {AdminEmail} from './models/AdminEmail';\nimport {Administrator} from './models/Administrator';\nimport {AdminOverview} from './models/AdminOverview';\nimport {BillingPeriod} from './models/BillingPeriod';\nimport {Browser, BrowserData} from './models/Browser';\nimport {DeviceModelCriterion, DeviceModelCriterionData} from './models/DeviceModelCriterion';\nimport {DeviceModelPool, DeviceModelPoolData} from './models/DeviceModelPool';\nimport {Framework, FrameworkData} from './models/Framework';\nimport {License, LicenseData} from './models/License';\nimport {Maintenance, MaintenanceData} from './models/Maintenance';\nimport {Project} from './models/Project';\nimport {Role, RoleParams} from './models/Role';\nimport {Settings, SettingsParams} from './models/Settings';\nimport {User, UserData, UserParams} from './models/User';\nimport {DeviceTimeSummaryParams, UserDeviceTimeSummary} from './models/UserDeviceTimeSummary';\nimport {UserFile, UserFileData, UserFileParams} from './models/UserFile';\nimport {Cluster} from './models/Cluster';\nimport {DeviceProperty} from './models/Device';\nimport {DeviceGroup} from './models/DeviceGroup';\nimport {DeviceModel} from './models/DeviceModel';\nimport {DeviceProblem} from './models/DeviceProblem';\nimport {DeviceStatus} from './models/DeviceStatus';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\n\n@NonRequestable\nexport class APIAdminResource extends APIResource {\n\n /**\n * /admin\n */\n constructor(parent: API) {\n super(parent);\n }\n\n // /access-groups\n accessGroups() {\n return new APIList<AccessGroup, CollectionQueryParams, AccessGroupData>(this).push('access-groups');\n }\n\n // /access-groups/{id}\n accessGroup(id: number) {\n return new APIResourceAccessGroup(this, id);\n }\n\n // /admin/accounts\n accounts() {\n return new APIList<Account>(this).push('admin', 'accounts');\n }\n\n // /admin/accounts/{id}\n account(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIAdminResourceAccount(this, id);\n }\n\n // /admin/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('admin', 'account-services');\n }\n\n // /admin/account-services/{id}\n accountService(id: number) {\n return new APIAdminResourceAccountService(this, id);\n }\n\n // activities\n activities() {\n return new APIList<Activity>(this).push('admin', 'activities');\n }\n\n // admin/administrators\n administrators() {\n return new APIList<Administrator>(this).push('admin', 'administrators');\n }\n\n // /admin/billing-periods\n billingPeriods() {\n return new APIList<BillingPeriod>(this).push('admin', 'billing-periods');\n }\n\n // /admin/billing-periods/{id}\n billingPeriod(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<BillingPeriod>(this).push('admin', 'billing-periods', id);\n }\n\n // /admin/browsers\n browsers() {\n return new APIList<Browser, CollectionQueryParams, BrowserData>(this).push('admin', 'browsers');\n }\n\n // /clusters\n clusters() {\n return new APIList<Cluster>(this).push('clusters');\n }\n\n // /clusters/{id}\n cluster(id: number) {\n return new APIAdminResourceCluster(this, id);\n }\n\n // /admin/devices\n devices() {\n return new APIAdminListDevices(this);\n }\n\n // /admin/devices/{id}\n device(id: number) {\n return new APIAdminResourceDevice(this, id);\n }\n\n devicesForModel(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n const apiList = this.devices();\n apiList.params({\n filter: 'deviceModelId_eq_' + id\n });\n return apiList;\n }\n\n // /admin/device/statuses\n deviceStatuses() {\n return new APIList<DeviceStatus>(this).push('admin', 'device', 'statuses');\n }\n\n // /admin/device-models\n deviceModels() {\n return new APIList<DeviceModel>(this).push('admin', 'device-models');\n }\n\n // /admin/device-models/{id}\n deviceModel(id: number) {\n return new APIAdminResourceDeviceModel(this, id);\n }\n\n // /admin/device-problems\n deviceProblems() {\n return new APIList<DeviceProblem>(this).push('admin', 'device-problems');\n }\n\n // /admin/device-model-criteria\n deviceModelCriterias() {\n return new APIList<DeviceModelCriterion, CollectionQueryParams, DeviceModelCriterionData>(this).push('admin', 'device-model-criteria');\n }\n\n // /admin/device-model-criteria/{id}\n deviceModelCriteria(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<DeviceModelCriterion>(this).push('admin', 'device-model-criteria', id);\n }\n\n // /device-sessions\n deviceSessions() {\n return new APIList<AdminDeviceSession>(this).push('admin', 'device-sessions');\n }\n\n // /device-sessions/{id}\n deviceSession(id: number) {\n return new APIAdminResourceDeviceSessionStandalone(this, id);\n }\n\n // /device-time\n deviceTime() {\n return new APIAdminResourceDeviceTime(this);\n }\n\n // /device-time-summary\n deviceTimeSummary() {\n return new APIList<UserDeviceTimeSummary, DeviceTimeSummaryParams>(this).push('admin', 'device-time-summary');\n }\n\n // /device-types\n deviceTypes() {\n return new APIList<AdminDeviceType>(this).push('admin', 'device-types');\n }\n\n // /device-types/{id}\n deviceType(id: number) {\n return new APIResource<AdminDeviceType, NoQueryParams, DeviceTypeData>(this).push('admin', 'device-types', id);\n }\n\n // /device-groups\n deviceGroups() {\n return new APIList<DeviceGroup>(this).push('device-groups');\n }\n\n // /device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /admin/emails\n emails() {\n return new APIList<AdminEmail>(this).push('admin', 'emails');\n }\n\n // /admin/emails/{id}/resend\n resendEmail(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<AdminEmail>(this).push('admin', 'emails', id, 'resend').post();\n }\n\n // /files\n files() {\n return new APIList<UserFile, UserFileParams, UserFileData>(this).push('files');\n }\n\n // /files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /admin/frameworks\n frameworks<T = Framework, U extends CollectionQueryParams = CollectionQueryParams, W = FrameworkData>() {\n return new APIList<T, U, W>(this).push('admin', 'frameworks');\n }\n\n // /admin/frameworks/{id}\n framework(id: number) {\n return new APIAdminResourceFramework(this, id);\n }\n\n // /admin/frameworks/available-labels\n frameworkAvailableLabels() {\n const apiList = this.frameworks<DeviceProperty, CollectionQueryParams, NoData>();\n apiList.push('available-labels');\n return apiList;\n }\n\n // /admin/interactive-queue\n interactiveQueue() {\n return new APIList<AdminInteractiveDeviceSession>(this).push('admin', 'interactive-queue');\n }\n\n // /admin/licenses\n licenses() {\n return new APIList<License, CollectionQueryParams, LicenseData>(this).push('admin', 'licenses');\n }\n\n // /admin/licenses/{id}\n license(id: number) {\n return new APIAdminResourceLicense(this, id);\n }\n\n // /admin/maintenance\n maintenance() {\n return new APIResource<Maintenance, NoQueryParams, MaintenanceData>(this).push('admin', 'maintenance');\n }\n\n // /admin/overview\n overview() {\n return new APIResource<AdminOverview>(this).push('admin', 'overview');\n }\n\n pools() {\n return new APIList<DeviceModelPool>(this).push('admin', 'pools');\n }\n\n pool(id: number) {\n return new APIResource<DeviceModelPool, NoQueryParams, DeviceModelPoolData>(this).push('admin', 'pools', id);\n }\n\n // /projects\n projects() {\n return new APIList<Project>(this).push('projects');\n }\n\n // /projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /admin/roles\n roles() {\n return new APIList<Role, RoleParams, NoData>(this).push('admin', 'roles');\n }\n\n // /admin/runs\n runs() {\n return new APIAdminListRuns(this);\n }\n\n // /runs/{id}\n run(id: number) {\n return new APIAdminResourceRunStandalone(this, id);\n }\n\n // /admin/samples\n samples() {\n return new APIList<UserFile, CollectionQueryParams, Pick<UserFileData, 'file'>>(this).push('admin', 'samples');\n }\n\n // /admin/samples/{id}\n sample(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<UserFile>(this).push('admin', 'samples', id);\n }\n\n // /admin/services\n services() {\n return new APIAdminListServices(this);\n }\n\n // /admin/services/{id}\n service(id: number) {\n return new APIAdminResourceService(this, id);\n }\n\n // /admin/settings\n settings() {\n return new APIResource<Settings, SettingsParams>(this).push('admin', 'settings');\n }\n\n // /admin/statistics\n statistics() {\n return new APIAdminListStatistics(this);\n }\n\n // /users\n users() {\n return new APIList<User, UserParams, UserData>(this).push('users');\n }\n\n // /admin/users\n createUser() {\n return new APIList<User, NoQueryParams, UserData>(this).push('admin', 'users').post();\n }\n\n // /users/{id}\n user(id: number) {\n return new APIAdminResourceUser(this, id);\n }\n\n}\n\nexport default APIAdminResource;\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {DesktopBrowserCapabilities} from './models/DesktopBrowserCapabilities';\nimport {Device, DevicesQueryParams} from './models/Device';\nimport {DevicePicker} from './models/DeviceFilter';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\n\n\nexport class APIListDevices extends APIList<Device, DevicesQueryParams> {\n\n /**\n * /devices\n */\n constructor(parent: API) {\n super(parent);\n this.push('devices');\n }\n\n // /devices/filters\n filters() {\n return new APIResource<DevicePicker, CollectionQueryParams, Pick<DevicePicker, 'deviceFilterGroups'>>(this).push('filters');\n }\n\n // /devices/desktop-browser-capabilities\n desktopBrowserCapabilities() {\n return new APIResource<DesktopBrowserCapabilities, NoQueryParams, NoData>(this).push('desktop-browser-capabilities');\n }\n\n}\n\nexport default APIListDevices;\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {CollectionQueryParams} from './models/HTTP';\nimport {Property, PropertyData} from './models/Property';\n\n\nexport class APIListProperties extends APIList<Property, CollectionQueryParams, PropertyData> {\n\n /**\n * /properties\n */\n constructor(parent: API) {\n super(parent);\n this.push('properties');\n }\n\n maintenance() {\n return new APIList<Property>(this).params({\n filter: 'name_eq_CLOUD_HEADER_ANNOUNCEMENT',\n limit: 1,\n sort: 'updateTime_d'\n });\n }\n\n}\n\nexport default APIListProperties\n","import {Method} from 'axios';\nimport {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResourceUser} from './APIResourceUser';\nimport {AccountService, ServicePaymentStatus} from './models/AccountService';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Service, ServiceData} from './models/Service';\n\n\nexport class APIListServices extends APIList<ServicePaymentStatus, NoQueryParams, ServiceData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['POST'];\n\n /**\n * /services\n */\n constructor(parent: API | APIResourceUser) {\n super(parent);\n this.push('services');\n }\n\n // /services/available\n available() {\n return new APIList<Service, CollectionQueryParams, NoData>(this).push('available');\n }\n\n active() {\n const apiList = new APIList<AccountService, CollectionQueryParams, NoData>(this);\n if (this.first === 'me') {\n apiList.push('active');\n } else {\n apiList.params({\n notArchived: true\n });\n }\n return apiList;\n }\n\n byPrice() {\n return new APIList<AccountService, CollectionQueryParams, void>(this).sort('centPrice');\n }\n\n availableByPrice() {\n return new APIList<AccountService, CollectionQueryParams, void>(this).push('available').sort('centPrice');\n }\n\n}\n\nexport default APIListServices\n","import {Method} from 'axios';\nimport {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {NoQueryParams} from './models/HTTP';\nimport {Message} from './models/Message';\nimport {\n User,\n UserActivateData,\n UserData,\n UserPasswordData,\n UserRecoveryQueryParams,\n} from './models/User';\n\n\nexport class APIListUsers extends APIList<User, NoQueryParams, UserData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET', 'POST'];\n\n /**\n * /users\n */\n constructor(parent: API) {\n super(parent);\n this.push('users');\n }\n\n // /users/activate\n activate() {\n return new APIResource<User, NoQueryParams, UserActivateData>(this).push('activate').post();\n }\n\n // /users/recoveries\n recoveries() {\n return new APIResource<User | Message, UserRecoveryQueryParams, UserData>(this).push('recoveries');\n }\n\n // /users/passwordRecovery\n passwordRecovery() {\n return new APIResource<User, NoQueryParams, UserPasswordData>(this).push('password-recovery');\n }\n\n}\n\nexport default APIListUsers;\n","import {APIResource} from './APIResource'\nimport {BillingPeriod} from './models/BillingPeriod';\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {APIResourceAccount} from './APIResourceAccount';\n\n\n\n\nexport class APIResourceBillingPeriod extends APIResource<BillingPeriod, NoQueryParams, NoData> {\n\n /**\n * /billing-periods/{id}\n */\n constructor(parent: APIResourceAccount, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('billing-periods', id);\n }\n\n // /billing-periods/{id}/receipt\n receipt() {\n return new APIResource<void, NoQueryParams, NoData>(this).push('receipt').setRequestConfig({\n responseType: 'arraybuffer'\n });\n }\n\n}\n\nexport default APIResourceBillingPeriod\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceBillingPeriod} from './APIResourceBillingPeriod';\nimport {\n Account,\n AccountData,\n AccountSessionUsage,\n AccountSessionUsageSummary,\n AccountUserSessionUsage\n} from './models/Account';\nimport {AccountConcurrencyStatusMap} from './models/AccountConcurrencyStatusMap';\nimport {AccountPreferences} from './models/AccountPreference';\nimport {AccountService, ServicePaymentStatus} from './models/AccountService';\nimport {AccountServicePayment} from './models/AccountServicePayment';\nimport {BillingPeriod, BillingPeriodQueryParams} from './models/BillingPeriod';\nimport {DeviceTimeSummaryQueryParams} from './models/Device';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams, QueryParams, SimpleCollectionResponse} from './models/HTTP';\nimport {User, UserData} from './models/User';\nimport {DeviceTimeQueryParams, UserDeviceTime} from './models/UserDeviceTime';\nimport {UserDeviceTimeSummary} from './models/UserDeviceTimeSummary';\nimport {VisualTestAccess} from './models/VisualTest';\n\n\nexport class APIResourceAccount extends APIResource<Account, QueryParams, AccountData> {\n\n /**\n * /accounts/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('accounts', id);\n }\n\n // /accounts/{id}/concurrency-status\n concurrencyStatus() {\n return new APIResource<AccountConcurrencyStatusMap, NoQueryParams, NoData>(this).push('concurrency-status');\n }\n\n // /accounts/{id}/device-time\n deviceTime() {\n return new APIList<UserDeviceTime, DeviceTimeQueryParams, NoData>(this).push('device-time');\n }\n\n // /accounts/{id}/device-time-summary\n deviceTimeSummary() {\n return new APIList<UserDeviceTimeSummary, DeviceTimeSummaryQueryParams, NoData>(this).push('device-time-summary');\n }\n\n // /accounts/{id}/preferences\n preferences() {\n return new APIResource<AccountPreferences, NoQueryParams, SimpleCollectionResponse<AccountPreferences>>(this).push('preferences');\n }\n\n // /accounts/{id}/users\n users() {\n return new APIList<User, CollectionBasicQueryParams, UserData>(this).push('users');\n }\n\n // /accounts/{accountId}/users/{userId}\n removeUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id);\n }\n\n // /accounts/{accountId}/users/{userId}/disable\n disableUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'disable').post();\n }\n\n // /accounts/{accountId}/users/{userId}/enable\n enableUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'enable').post();\n }\n\n // /accounts/{accountId}/users/{userId}/resend-activation\n resendActivation(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'resend-activation').post();\n }\n\n // /accounts/{accountId}/billing-periods\n billingPeriods() {\n return new APIList<BillingPeriod, CollectionBasicQueryParams, NoData>(this).push('billing-periods');\n }\n\n // /accounts/{accountId}/billing-periods/{id}\n billingPeriod(id: number) {\n return new APIResourceBillingPeriod(this, id);\n }\n\n // /account-services/{id}/billing-period\n serviceBillingPeriod(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<AccountServicePayment, BillingPeriodQueryParams, NoData>(this).push('account-services', id, 'billing-period');\n }\n\n // /accounts/{accountId}/visual-test/access\n visualTestAccess() {\n return new APIResource<VisualTestAccess, NoQueryParams, VisualTestAccess>(this).push('visual-tests', 'access');\n }\n\n // /accounts/{accountId}/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('account-services');\n }\n\n // /accounts/{accountId}/account-services/{id}\n accountService(id: number) {\n return new APIList<AccountService>(this).push('account-services', id);\n }\n\n // /accounts/{accountId}/services\n services() {\n return new APIResource<ServicePaymentStatus>(this).push('services');\n }\n\n // /accounts/{accountId}/user-usage-details\n userUsageDetails() {\n return new APIList<AccountUserSessionUsage>(this).push('user-usage-details');\n }\n\n // /accounts/{accountId}/usage-details\n usageDetails() {\n return new APIList<AccountSessionUsage>(this).push('usage-details');\n }\n\n // /accounts/{accountId}/usage-details-summary\n usageDetailsSummary() {\n return new APIResource<AccountSessionUsageSummary>(this).push('usage-details-summary');\n }\n\n}\n\nexport default APIResourceAccount;\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Broker} from './models/Broker';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\nexport class APIResourceBroker extends APIResource {\n\n /**\n * /broker\n */\n constructor(parent: API) {\n\n super(parent);\n this.push('broker');\n }\n\n // /broker/hubs\n hubs() {\n return new APIList<Broker, NoQueryParams, NoData>(this).push('hubs');\n }\n\n}\n\nexport default APIResourceBroker\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Browser} from './models/Browser';\nimport {Device, DeviceProperiesData, DeviceProperty} from './models/Device';\nimport {CollectionBasicQueryParams} from './models/HTTP';\n\n\nexport class APIResourceDevice extends APIResource<Device> {\n\n /**\n * /devices/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('devices', id);\n }\n\n // /devices/{id}/properties\n properties() {\n return new APIList<DeviceProperty, CollectionBasicQueryParams, DeviceProperiesData>(this).push('properties');\n }\n\n browsers() {\n return new APIList<Browser>(this).push('browsers');\n }\n\n}\n\nexport default APIResourceDevice\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {DeviceProperty} from './models/Device';\nimport {CollectionBasicQueryParams, NoQueryParams} from './models/HTTP';\nimport {LabelData, LabelGroup} from './models/LabelGroup';\n\nexport class APIResourceLabelGroup extends APIResource<LabelGroup> {\n\n /**\n * /label-groups/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('label-groups', id);\n }\n\n // /label-groups/{id}/labels\n labels() {\n return new APIList<DeviceProperty, CollectionBasicQueryParams, LabelData>(this).push('labels');\n }\n\n // /label-groups/{id}/labels/{id}\n label(id: number) {\n return new APIResource<DeviceProperty, NoQueryParams, LabelData>(this).push('labels', id);\n }\n\n}\n\nexport default APIResourceLabelGroup\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {FilesQueryParams} from './class/FilesQueryParams';\nimport {FileData, UploadObj, UserFile} from './models/UserFile';\n\n\nexport class APIListFiles extends APIList<UserFile, FilesQueryParams, FileData | FormData> {\n\n /**\n * /files\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('files');\n }\n\n /**\n * Simplifies process of uploading\n * /files\n */\n upload(obj: UploadObj): this {\n // For NodeJS\n // @ts-ignore\n if (global.isNodeJs) {\n return this.nodeUpload(obj);\n } else {\n /**\n * Browser\n * @todo\n */\n throw new Error('Not supported yet!');\n }\n }\n\n private nodeUpload(file: UploadObj): this {\n const fs = require('fs');\n const FormData = require('form-data');\n const form = new FormData();\n form.append('file', fs.createReadStream(file.dir + '/' + file.filename), {\n filename: file.filename\n });\n return this.post().headers(form.getHeaders()).data(form);\n }\n\n}\n\nexport default APIListFiles\n","import {APIList} from './APIList'\nimport {APIListNotifications} from './APIListNotifications';\nimport {APIResource} from './APIResource'\n\n\nexport class APIResourceChannel extends APIResource {\n\n /**\n * /users/{id}/notifications/channels/{type}\n */\n constructor(parent: APIListNotifications, type: string) {\n if (type == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('channels', type);\n }\n\n // /channels/{type}/scopes\n scopes() {\n return new APIList(this).push('scopes');\n }\n\n}\n\nexport default APIResourceChannel;\n","import {APIList} from './APIList';\nimport {APIResourceChannel} from './APIResourceChannel';\nimport {APIResourceUser} from './APIResourceUser';\nimport {Enum} from './models/Enum';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Notification, NotificationsData} from './models/Notification';\n\n\nexport class APIListNotifications extends APIList<Notification, CollectionQueryParams, NotificationsData> {\n\n /**\n * /notifications\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('notifications');\n }\n\n // /notifications/scopes\n scopes() {\n return new APIList<Enum, NoQueryParams, NoData>(this).push('scopes');\n }\n\n // /notifications/channels\n channels() {\n return new APIList<Enum, NoQueryParams, NoData>(this).push('channels');\n }\n\n channel(type: string) {\n return new APIResourceChannel(this, type);\n }\n\n}\n\nexport default APIListNotifications\n","import {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceUser} from './APIResourceUser';\nimport {\n RunsConfigParams,\n TestRun,\n TestRunConfig,\n TestRunsQueryParams\n} from './models/TestRun';\n\n\nexport class APIListRuns extends APIList<TestRun, TestRunsQueryParams, TestRunConfig> {\n\n /**\n * /runs\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('runs');\n }\n\n // /runs/config\n config() {\n return new APIResource<TestRunConfig, RunsConfigParams, TestRunConfig>(this).push('config');\n }\n\n}\n\nexport default APIListRuns\n","import {Method} from 'axios';\nimport {APIList} from './APIList';\nimport {APIResourceUser} from './APIResourceUser';\nimport {NoData} from './models/HTTP';\nimport {SmartbearTunnel, TunnelQueryParams} from './models/SmartbearTunnel';\n\n\nexport class APIListSmartbearTunnels extends APIList<SmartbearTunnel, TunnelQueryParams, NoData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET'];\n\n /**\n * /tunnels\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('tunnels');\n }\n\n /**\n * Sets tunnel activity parameter\n */\n active(active: boolean): this {\n return this.params({active: active});\n }\n}\n\nexport default APIListSmartbearTunnels;\n","\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {Message} from './models/Message';\nimport {Notification, NotificationData} from './models/Notification';\n\nexport class APIResourceNotification extends APIResource<Notification, NoQueryParams, NotificationData> {\n\n /**\n * /notifications/{id}\n */\n constructor(parent: APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('notifications', id);\n }\n\n // /notifications/{id}/test\n test() {\n return new APIResource<Message, NoQueryParams, NoData>(this).push('test');\n }\n\n}\n\nexport default APIResourceNotification\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIListFiles} from './APIListFiles';\nimport {APIListNotifications} from './APIListNotifications';\nimport {APIListRuns} from './APIListRuns';\nimport {APIListServices} from './APIListServices';\nimport {APIListSmartbearTunnels} from './APIListSmartbearTunnels';\nimport {APIResource} from './APIResource';\nimport {APIResourceAccessGroup} from './APIResourceAccessGroup';\nimport {APIResourceDeviceGroup} from './APIResourceDeviceGroup';\nimport {APIResourceDeviceSessionStandalone} from './APIResourceDeviceSessionStandalone';\nimport {APIResourceFile} from './APIResourceFile';\nimport {APIResourceNotification} from './APIResourceNotification';\nimport {APIResourceProject} from './APIResourceProject';\nimport {AccessGroup, AccessGroupsData} from './models/AccessGroup';\nimport {DeviceGroup, DeviceGroupData, DeviceGroupIdsData, DeviceGroupWithPublicParams} from './models/DeviceGroup';\nimport {DeviceStatistics} from './models/DeviceStatistics';\nimport {DeviceUsage} from './models/DeviceUsage';\nimport {Framework} from './models/Framework';\nimport {Project, UserProjectData, UserProjectQueryParams} from './models/Project';\nimport {User, UserDeleteData} from './models/User';\nimport {UiPreferencesData, UserPreference, UserPreferenceData} from './models/UserPreference';\nimport {StatisticQueryParams, UserStatistics} from './models/UserStatistics';\nimport {DeviceSession, DeviceSessionData, DeviceSessionQueryParams} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams, QueryParams} from './models/HTTP';\nimport {DeviceStatisticQueryParam, DeviceUsageQueryParams} from './models/Device';\n\nexport class APIResourceUser extends APIResource<User> {\n\n /**\n * /users/{id} | /me\n */\n constructor(parent: API, id: number | 'me') {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n\n if (id === 'me') {\n this.push('me');\n } else if (typeof id === 'number') {\n this.push('users', id);\n } else {\n throw new TypeError('id is not a number');\n }\n }\n\n // /users/{id}/services\n services() {\n return new APIListServices(this);\n }\n\n // /users/{id}/device-groups\n deviceGroups() {\n return new APIList<DeviceGroup, DeviceGroupWithPublicParams, DeviceGroupIdsData | Omit<DeviceGroupData, 'displayName'>>(this).push('device-groups');\n }\n\n // /users/{id}/device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /users/{id}/device-sessions\n deviceSessions() {\n return new APIList<DeviceSession, DeviceSessionQueryParams, DeviceSessionData>(this).push('device-sessions');\n }\n\n // /users/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSessionStandalone(this, id);\n }\n\n // /users/{id}/mark-account-owner\n markAccountOwner() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('mark-account-owner').post();\n }\n\n // /users/{id}/projects\n projects() {\n return new APIList<Project, UserProjectQueryParams, UserProjectData>(this).push('projects');\n }\n\n // /users/{id}/projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /users/{id}/files\n files() {\n return new APIListFiles(this);\n }\n\n // /users/{id}/files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /users/{id}/runs\n runs() {\n return new APIListRuns(this);\n }\n\n // /users/{id}/available-frameworks\n availableFrameworks() {\n return new APIList<Framework, CollectionBasicQueryParams, NoData>(this).push('available-frameworks');\n }\n\n /**\n * /users/{id}/reset-api-key\n */\n resetApiKey() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('reset-api-key');\n }\n\n // /users/{id}/restore\n restore() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('restore');\n }\n\n // /users/{id}/feedback\n feedback() {\n return new APIResource<void, QueryParams, FormData>(this).push('feedback');\n }\n\n // /users/{id}/notifications\n notifications() {\n return new APIListNotifications(this);\n }\n\n // /users/{id}/notifications/{id}\n notification(id: number) {\n return new APIResourceNotification(this, id);\n }\n\n // /users/{id}/preferences\n preferences() {\n return new APIResource<UserPreference, NoQueryParams, UserPreferenceData>(this).push('preferences');\n }\n\n // /users/{id}/ui-preferences\n uiPreferences() {\n return new APIResource<string, NoQueryParams, UiPreferencesData>(this).push('ui-preferences');\n }\n\n // /users/{id}/device-usage\n deviceUsage() {\n return new APIList<DeviceUsage, DeviceUsageQueryParams, NoData>(this).push('device-usage');\n }\n\n // /users/{id}/statistics\n statistics() {\n return new APIResource<UserStatistics, StatisticQueryParams, NoData>(this).push('statistics');\n }\n\n // /users/{id}/device-statistics\n deviceStatistics() {\n return new APIList<DeviceStatistics, DeviceStatisticQueryParam, NoData>(this).push('device-statistics');\n }\n\n // /users/{id}/access-groups\n accessGroups() {\n return new APIList<AccessGroup, CollectionBasicQueryParams, AccessGroupsData>(this).push('access-groups');\n }\n\n // /users/{id}/access-groups/{id}\n accessGroup(id: number) {\n return new APIResourceAccessGroup(this, id);\n }\n\n // /users/{id}/tunnels/{id}\n smartbearTunnel(id: number) {\n return new APIResource(this).push('tunnels', id);\n }\n\n // /users/{id}/tunnels\n smartbearTunnels() {\n return new APIListSmartbearTunnels(this);\n }\n\n deleteAccount() {\n return new APIResource<User, void, UserDeleteData>(this).push('delete');\n }\n}\n\nexport default APIResourceUser\n","import {API} from '../API';\nimport {APIResource} from './APIResource'\nimport {NoQueryParams} from './models/HTTP';\nimport {LoginData, User} from './models/User';\n\nexport class APIResourceUserSession extends APIResource {\n\n // /user-sessions\n constructor(parent: API) {\n super(parent);\n this.push('user-sessions');\n }\n\n // /user-sessions/login\n login(data: LoginData) {\n return new APIResource<User, NoQueryParams, LoginData>(this).push('login').post().data(data);\n }\n\n // /user-sessions/logout\n logout() {\n return new APIResource(this).push('logout').post();\n }\n\n // /user-sessions/oauth/authorize/{name}-login\n sso(name: string) {\n return new APIResource(this).push('oauth', 'authorize', name + '-login');\n }\n\n // /user-sessions/oauth/authorize/sbid-login\n sbidCallbackUrl() {\n return new APIResource(this).push('oauth', 'authorize', 'sbid-login').toUrl(true);\n }\n\n}\n\nexport default APIResourceUserSession\n","import {AxiosInstance} from 'axios';\n\n// this version of axios has some issue paired with rollup and is not handling default import correctly\n// as a workaround we need to use require instead of import until migrating to newer axios version.\n//\n// Axios has been updated to version 1.13.2. Due to issues related to how axios exports are handled between CommonJS and ES Module\n// as a workaround we need to use require instead of import in case we want to support both CJS and ESM.\n// For CommonJS output in the consumer project (f.ex cloud-frontend), the workaround may still be needed. For ESM, the default import should work.\nconst axios = require('axios').default;\n// @ts-ignore\nimport {version} from '../package.json';\nimport {APIAdminResource} from './api/APIAdminResource';\nimport {APIAdminResourceCluster} from './api/APIAdminResourceCluster';\nimport {APIList} from './api/APIList';\nimport {APIListDevices} from './api/APIListDevices';\nimport {APIListProperties} from './api/APIListProperties';\nimport {APIListServices} from './api/APIListServices';\nimport {APIListUsers} from './api/APIListUsers';\nimport {APIResource} from './api/APIResource';\nimport {APIResourceAccount} from './api/APIResourceAccount';\nimport {APIResourceBroker} from './api/APIResourceBroker';\nimport {APIResourceDevice} from './api/APIResourceDevice';\nimport {APIResourceDeviceGroup} from './api/APIResourceDeviceGroup';\nimport {APIResourceDeviceSession} from './api/APIResourceDeviceSession';\nimport {APIResourceFile} from './api/APIResourceFile';\nimport {APIResourceLabelGroup} from './api/APIResourceLabelGroup';\nimport {APIResourceProject} from './api/APIResourceProject';\nimport {APIResourceRun} from './api/APIResourceRun';\nimport {APIResourceUser} from './api/APIResourceUser';\nimport {APIResourceUserSession} from './api/APIResourceUserSession';\nimport {Cluster} from './api/models/Cluster';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './api/models/HTTP';\nimport {License} from './api/models/License';\nimport {Project} from './api/models/Project';\nimport {Property} from './api/models/Property';\nimport {UserFile, UserFileData, UserFileParams} from './api/models/UserFile';\nimport {ApiConfig} from './ApiConfig';\nimport './finka';\nimport {LabelGroup} from './api/models/LabelGroup';\n\n// @ts-ignore\nif (globalThis.isNodeJs) {\n // Set User-Agent\n axios.defaults.headers.common['User-Agent'] = `Bitbar Cloud API Client for JavaScript v${version}`;\n}\n\n// Disable max content length\naxios.defaults.maxContentLength = 1073741824; // 1GB\n\n/**\n * API\n * Root for other API resources\n */\nexport class API {\n axios: AxiosInstance;\n\n private axiosConfig: ApiConfig = <ApiConfig>{};\n\n get baseUrl(): string {\n return this.axiosConfig.baseURL;\n }\n\n\n constructor(private config: ApiConfig) {\n if (config == null) {\n throw new Error('config cannot be empty');\n } else if (this.config.cloudUrl == null) {\n throw new TypeError('cloudUrl cannot be empty');\n } else if (typeof this.config.cloudUrl !== 'string') {\n throw new TypeError('cloudUrl must be a string');\n } else if (!/^https?:\\/\\/.{2,}/.test(this.config.cloudUrl)) {\n throw new Error(`cloudUrl doesn't look like a URL`);\n }\n\n // Validate and correct cloudUrl if needed\n this.axiosConfig.baseURL = this.config.cloudUrl.replace(/\\/+$/, '') + '/api'\n\n // Check v2\n this.config.v2 = !!this.config.v2;\n if (this.config.v2) {\n this.axiosConfig.baseURL += '/v2';\n }\n\n // Check if apiKey is set\n if (this.config.apiKey) {\n if (typeof this.config.apiKey !== 'string') {\n throw new TypeError('apiKey must be a string');\n } else if (!/^[A-Za-z0-9]{32}$/.test(this.config.apiKey)) {\n throw new Error('apiKey is in the wrong format');\n }\n\n this.axiosConfig.auth = {\n username: <string>this.config.apiKey,\n password: ''\n };\n }\n\n // With XSRFToken\n this.axiosConfig.withXSRFToken = true;\n // With credentials\n this.axiosConfig.withCredentials = config.withCredentials == null ? false : config.withCredentials;\n\n // Create axios instance\n this.axios = axios.create(this.axiosConfig);\n }\n\n\n // --- Resources starts here --- //\n\n // /account/{id}\n account(id: number) {\n return new APIResourceAccount(this, id);\n }\n\n // /admin\n admin() {\n return new APIAdminResource(this);\n }\n\n // /broker\n broker() {\n return new APIResourceBroker(this);\n }\n\n // /clusters\n clusters() {\n return new APIList<Cluster>(this).push('clusters');\n }\n\n // /clusters/{id}\n cluster(id: number) {\n return new APIAdminResourceCluster(this, id);\n }\n\n // /devices/{id}\n device(id: number) {\n return new APIResourceDevice(this, id);\n }\n\n // /device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /device-groups\n deviceGroups() {\n return new APIList(this).push('device-groups');\n }\n\n // /devices\n devices() {\n return new APIListDevices(this);\n }\n\n // /device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSession(this, id);\n }\n\n // /device-sessions\n deviceSessions() {\n return new APIList(this).push('device-sessions');\n }\n\n // /device-statistics\n deviceStatistics() {\n return new APIList(this).push('device-statistics');\n }\n\n // /enums\n enums() {\n return new APIResource(this).push('enums');\n }\n\n // /files\n files() {\n return new APIList<UserFile, UserFileParams, UserFileData>(this).push('files');\n }\n\n // /files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /label-groups\n labelGroups() {\n return new APIList<LabelGroup, CollectionQueryParams, NoData>(this).push('label-groups');\n }\n\n // /label-groups/{id}\n labelGroup(id: number) {\n return new APIResourceLabelGroup(this, id);\n }\n\n // /labels\n labels() {\n return new APIList(this).push('labels');\n }\n\n // /licenses\n licenses() {\n return new APIResource(this).push('licenses');\n }\n\n // /license\n license() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('license');\n }\n\n /*\n /me or /admin\n Requires prototype extension covering ACL check\n */\n ma(): APIAdminResource | APIResourceUser {\n throw new Error('Requires prototype extension covering ACL check');\n }\n\n // /me\n me() {\n return this.user('me');\n }\n\n // /projects\n projects() {\n return new APIList<Project>(this).push('projects');\n }\n\n // /projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /properties\n properties() {\n return new APIListProperties(this);\n }\n\n // /properties/{id}\n property(id: number) {\n return new APIResource<Property>(this).push('properties', id);\n }\n\n // /runs/{id}\n run(id: number) {\n return new APIResourceRun(this, id);\n }\n\n // /services\n services() {\n return new APIListServices(this);\n }\n\n // /user/{id}\n user(id: number | 'me') {\n return new APIResourceUser(this, id);\n }\n\n // /users\n users() {\n return new APIListUsers(this);\n }\n\n // /user-sessions\n userSession() {\n return new APIResourceUserSession(this);\n }\n\n}\n\n\nexport default API;\n","/* istanbul ignore file */\n\nimport {API} from './API';\nimport {FilterBuilder} from './FilterBuilder';\n\nexport {API} from './API';\nexport {FilterBuilder} from './FilterBuilder';\n\n/**\n * Cloud API Client\n */\nexport const CloudAPIClient = {\n API,\n FilterBuilder\n}\n\nexport default CloudAPIClient;\n","export enum AccessGroupScope {\n USER = 'USER',\n ACCOUNT = 'ACCOUNT',\n GLOBAL = 'GLOBAL'\n}\n\nexport type AccessGroup = {\n id: number;\n name: string;\n scope: AccessGroupScope;\n userEmail: string;\n userId: number;\n}\n\nexport type AccessGroupData = Pick<AccessGroup, 'name' | 'scope' | 'userId'>;\n\nexport type AccessGroupsData = Omit<AccessGroupData, 'userId'>;\n","import {CollectionQueryParams} from './HTTP';\n\n\nexport type Account = {\n activeServiceName: string,\n comment: string,\n createTime: number,\n dedicatedDevicesConcurrency: number,\n dedicatedDevicesCount: number,\n dedicatedDevicesRatio: number,\n dedicatedDevicesUsage: number,\n id: number,\n invoiceDetails: Invoice,\n name: string,\n publicDevicesConcurrency: number,\n publicDevicesRatio: number,\n publicDevicesUsage: number,\n slmOrganizationId: string,\n userName: string\n}\n\nexport type Invoice = {\n address: string,\n city: string,\n code: string,\n country: string,\n state: string\n}\n\nexport type AccountData = Partial<{\n comment: string,\n invoiceDetails: Invoice,\n name: string,\n slmOrganizationId: string;\n userName: string\n}>\n\nexport type AccountUsageSummary = {\n sessionsCount: number,\n duration: number,\n deviceModelsCount: number,\n tunnelEnabledCount: number,\n osVersionsCount: number,\n projectsCount: number,\n usersCount: number,\n}\n\nexport type AccountUsage = {\n timestamp: number,\n timestampLabel: string,\n sessionsCount: number,\n automatedConcurrency: number,\n automatedUsage: number,\n dedicatedConcurrency: number,\n dedicatedUsage: number,\n manualConcurrency: number,\n manualUsage: number\n}\n\nexport type AccountUserSessionUsage = {\n devices: number,\n duration: number,\n osVersions: number,\n sessions: number,\n sessionShare: number\n userId: number,\n userName: string,\n}\n\nexport type AccountSessionUsage = {\n createTime: number,\n deviceModelName: string,\n duration: number,\n osVersion: string,\n type: SessionUsageType,\n userId: number,\n userName: string\n}\n\nexport type AccountSessionUsageSummary = {\n totalTime: number,\n usage: Record<SessionUsageType, number>\n}\n\nexport enum SessionUsageType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL = 'MANUAL',\n DEDICATED_AUTOMATIC = 'DEDICATED_AUTOMATIC',\n DEDICATED_MANUAL = 'DEDICATED_MANUAL'\n}\n\nexport enum UtilizationType {\n ALL = 'all',\n PUBLIC = 'public',\n DEDICATED = 'dedicated'\n}\n\nexport enum SessionType {\n ALL = 'all',\n AUTOMATED = 'automated',\n MANUAL = 'manual'\n}\n\nexport enum TimeResolution {\n HOUR = 'hour',\n DAY = 'day'\n}\n\nexport type AccountUsageParams = CollectionQueryParams & {\n grouping?: TimeResolution,\n sessionType?: SessionType,\n utilizationType?: UtilizationType,\n}\n\nexport type AccountUsageSummaryParams = CollectionQueryParams & {\n grouping?: TimeResolution,\n}\n","import {ServiceUnit} from './Service';\n\nexport enum PaymentStatus {\n SUCCEEDED = 'SUCCEEDED',\n FAILED = 'FAILED',\n REDIRECTED = 'REDIRECTED'\n}\n\nexport enum PaymentMethod {\n PAYPAL = 'PAYPAL',\n BRAINTREE = 'BRAINTREE',\n STRIPE = 'STRIPE',\n INVOICE = 'INVOICE',\n PROMOTION = 'PROMOTION',\n AWS = 'AWS'\n}\n\nexport enum DeactivateReason {\n INITIAL_FAILURE = 'INITIAL_FAILURE',\n SCA_FAILURE = 'SCA_FAILURE',\n CHARGE_FAILURE = 'CHARGE_FAILURE',\n CANCEL = 'CANCEL',\n SUSPENDED = 'SUSPENDED',\n ANOTHER_PURCHASE = 'ANOTHER_PURCHASE'\n}\n\nexport type ServicePaymentStatus = {\n accountService: AccountService;\n message: string;\n redirectUrl: string;\n status: PaymentStatus;\n}\n\nexport type AccountService = {\n accountId: number;\n accountName: string;\n activatedById: number;\n activatedByName: string;\n active: boolean;\n braintreeId: string;\n createTime: number;\n deactivateReason: DeactivateReason;\n deactivatedById: number;\n deactivatedByName: string;\n endTime: number;\n finished: boolean;\n id: number;\n lastPaymentTime: number;\n paymentMethod: PaymentMethod;\n price: number;\n serviceCount: number;\n serviceId: number;\n serviceName: string;\n slmLicenseId: string;\n startTime: number;\n subscriptionManagementURL: string;\n unit: ServiceUnit;\n unitCount: number;\n vatRate: number;\n}\n\nexport type AccountServiceData = Pick<AccountService, 'endTime' | 'serviceId' | 'slmLicenseId'> & {count: number};\n","import {DevicesQueryParams, Platform, SoftwareVersion} from './Device';\nimport {OsType} from './Enum';\nimport {CollectionQueryParams} from './HTTP';\nimport {Cluster} from './Cluster';\n\n\nexport enum InitStep {\n SKIP = 'SKIP',\n REBOOT = 'REBOOT',\n REBOOT_WITH_UNLOCK = 'REBOOT_WITH_UNLOCK',\n UNLOCK_ONLY = 'UNLOCK_ONLY'\n}\n\nexport enum DeviceState {\n OFFLINE_CLEANING = 'OFFLINE_CLEANING',\n OFFLINE_DIRTY = 'OFFLINE_DIRTY',\n OFFLINE_FREE = 'OFFLINE_FREE',\n OFFLINE_TESTING = 'OFFLINE_TESTING',\n ONLINE_CLEANING = 'ONLINE_CLEANING',\n ONLINE_DIRTY = 'ONLINE_DIRTY',\n ONLINE_FREE = 'ONLINE_FREE',\n ONLINE_TESTING = 'ONLINE_TESTING'\n}\n\nexport type AdminDevice = {\n accountId: number | null;\n accountName: string | null;\n cluster: Cluster;\n comment: string;\n dedicationEndTime: number | null;\n deviceModelId: number;\n deviceModelName: string;\n enabled: boolean;\n fingerprint: string;\n forceRestore: boolean;\n id: number;\n initStep: InitStep;\n ipAddress: string;\n lastOnlineTime: number;\n location: string;\n locked: boolean;\n manufacturer: string;\n name: string;\n osType: OsType;\n ownerHasAccountService: boolean;\n platform: Platform;\n serialId: string;\n softwareVersion: SoftwareVersion;\n state: DeviceState;\n stateChangeTime: number;\n stateTime: number;\n testTimeLimit: number;\n unlockGesture: string;\n}\n\nexport type AdminDevicesQueryParams = Pick<DevicesQueryParams, 'withDisabled'> & CollectionQueryParams;\n\nexport type AdminDeviceData = Pick<AdminDevice, 'accountId' | 'enabled' | 'initStep' | 'ipAddress' | 'name' |\n 'serialId' | 'testTimeLimit' | 'unlockGesture' | 'comment' | 'forceRestore' | 'dedicationEndTime'> & {\n apiLevel: number;\n releaseVersion: string;\n};\n","import {CollectionQueryParams} from './HTTP';\nimport {DeviceSessionState} from './DeviceSession';\nimport {OsType} from './Enum';\n\nexport enum FrameworkType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL_APP = 'MANUAL_APP',\n MANUAL_WEB = 'MANUAL_WEB',\n REMOTE = 'REMOTE'\n}\n\nexport type AdminFrameworkStatistics = {\n cloudName: string;\n count: number;\n day: number;\n deviceModelId: number;\n deviceModelName: string;\n frameworkId: number;\n frameworkName: string;\n id: number;\n osType: OsType;\n releaseVersion: string;\n state: DeviceSessionState;\n type: FrameworkType;\n userEmail: string;\n userId: number;\n}\n\nexport interface AdminStatisticsParams extends CollectionQueryParams {\n days: number;\n}\n","import {PaymentMethod} from './AccountService';\nimport {DeviceSessionType} from './DeviceSession';\nimport {OsType} from './Enum';\nimport {QueryParams} from './HTTP';\n\nexport enum BillingType {\n BUY = 'BUY',\n CHARGE = 'CHARGE',\n CANCEL = 'CANCEL'\n}\n\nexport type BillingPeriod = {\n accountId: number;\n accountName: string;\n accountServiceId: number;\n additionalHours: number;\n additionalHoursPrice: number;\n apiBillingPeriodType: BillingType;\n createTime: number;\n endBillingPeriod: number;\n id: number;\n lastPaymentDate: number;\n paid: boolean;\n paymentMethod: PaymentMethod;\n plan: string;\n servicePrice: number;\n startBillingPeriod: number;\n subscriptionEnd: number;\n subscriptionStart: number;\n totalPrice: number;\n usages: Array<BillingPeriodUsage>;\n}\n\nexport type BillingPeriodUsage = {\n duration: number;\n id: number;\n osType: OsType;\n type: DeviceSessionType;\n}\n\nexport interface BillingPeriodQueryParams extends QueryParams {\n onDate: number;\n}\n","export enum BrokerType {\n MOBILE = 'MOBILE',\n DESKTOP = 'DESKTOP'\n}\n\nexport type Broker = {\n id: number;\n location: string;\n type: BrokerType;\n url: string;\n}\n","\nimport {AdminDevice} from './AdminDevice';\nimport {CollectionResponse, QueryParams} from './HTTP';\n\nexport type Cluster = {\n devices: CollectionResponse<AdminDevice>;\n enabled: boolean;\n id: number;\n ipAddress: string;\n jenkinsUrl: string;\n jenkinsVersion: string;\n location: string;\n name: string;\n pluginVersion: string;\n region: string;\n state: ClusterState;\n stateChangeTime: number;\n stateTime: number;\n type: ClusterType;\n url: string;\n}\n\nexport enum ClusterState {\n 'OFFLINE',\n ONLINE = 'ONLINE',\n RESTARTING = 'RESTARTING',\n QUIET_DOWN = 'QUIET_DOWN',\n MAINTENANCE = 'MAINTENANCE'\n}\n\nexport enum ClusterType {\n BARE_METAL = 'BARE_METAL',\n EC2 = 'EC2',\n VM = 'VM'\n}\n\nexport interface ClusterParams extends QueryParams {\n withDevices: boolean;\n}\n\nexport type ClusterData = Pick<Cluster, 'enabled' | 'url'> & {\n quietDown: boolean;\n restart: boolean;\n turnMaintenance: boolean;\n}\n","import {Browser} from './Browser';\nimport {OsType} from './Enum';\nimport {CollectionBasicQueryParams, CollectionQueryParams, CollectionResponse, QueryParams} from './HTTP';\nimport {TestRunsQueryParams} from './TestRun';\n\n\nexport enum DeviceGroupOrigin {\n STATIC = 'STATIC',\n DYNAMIC = 'DYNAMIC',\n HYBRID = 'HYBRID'\n}\n\nexport enum Platform {\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n WINDOWS = 'WINDOWS',\n MAC = 'MAC',\n LINUX = 'LINUX',\n UNDEFINED = 'UNDEFINED'\n}\n\nexport enum SupportedCreators {\n MANUAL = 'MANUAL',\n ROBOT = 'ROBOT',\n AUTOMATIC = 'AUTOMATIC'\n}\n\nexport enum PoolSize {\n XL= 'XL',\n L = 'L',\n M = 'M',\n S = 'S'\n}\n\nexport enum Code {\n HIGH = 'HIGH',\n MODERATE = 'MODERATE',\n LOW = 'LOW',\n NONE = 'NONE',\n}\n\nexport type DeviceAvailability = {\n poolSize: PoolSize,\n code: Code\n}\n\nexport type DeviceProperty = {\n displayName: string;\n id: number;\n labelGroupName: string;\n name: string;\n propertyGroupId: number;\n propertyGroupName: string;\n}\n\nexport type SoftwareVersion = {\n apiLevel: number;\n id: number;\n releaseVersion: string;\n}\n\nexport enum LockReason {\n TESTING = 'TESTING',\n CLEANING = 'CLEANING',\n NOT_OPERATIONAL = 'NOT_OPERATIONAL'\n}\n\nexport type Device = {\n accountId: number;\n accountName: string;\n available: boolean;\n availability: DeviceAvailability;\n browsers: CollectionResponse<Browser>;\n creditsPrice: number;\n deviceGroupOrigin: DeviceGroupOrigin;\n displayName: string;\n enabled: boolean;\n frame100Url: string;\n frame160Url: string;\n frame400Url: string;\n frame80Url: string;\n frameExtraWidth: number;\n id: number;\n imageCornerRadius: number;\n imageHeight: number;\n imageLeft: number;\n imagePrefix: string;\n imageTop: number;\n imageWidth: number;\n locked: boolean;\n lockReason: LockReason;\n manufacturer: string;\n online: boolean;\n osType: OsType;\n platform: Platform;\n properties: CollectionResponse<DeviceProperty>;\n softwareVersion: SoftwareVersion;\n supportedCreators: Array<SupportedCreators>;\n}\n\nexport type DeviceCleanupConfiguration = {\n content: string;\n createTime: number;\n createdByEmail: string;\n createdById: number;\n description: string;\n name: string;\n enabled: boolean;\n global: boolean;\n example: true;\n id: number;\n lastModificationTime: number;\n osType: OsType;\n}\n\nexport type DeviceCleanupConfigurationData = {\n deviceCleanupConfigurationId: number;\n}\n\nexport type DeviceLabelData = {\n labelId: number;\n}\n\nexport interface DeviceProperiesData extends QueryParams {\n labelId: number;\n}\n\nexport interface CleanupConfigurationSpecificData extends QueryParams {\n serialId: string;\n}\n\nexport interface DeviceTimeSummaryQueryParams extends CollectionBasicQueryParams {\n forWholeAccount: boolean;\n}\nexport interface DeviceUsageQueryParams extends TestRunsQueryParams {\n startTime: number;\n}\n\nexport interface DeviceStatisticQueryParam extends TestRunsQueryParams {\n mode: string;\n}\n\nexport interface DevicesQueryParams extends CollectionQueryParams {\n labelIds: Array<number>;\n liveTestingOnly: boolean;\n withBrowsers: boolean;\n withDedicated: boolean;\n withDisabled: boolean;\n withProperties: boolean;\n withSupportedCreators: boolean;\n}\n","export enum CriterionField {\n NAME = 'NAME',\n FINGERPRINT = 'FINGERPRINT',\n SERIAL_ID = 'SERIAL_ID',\n UNLOCK_GESTURE = 'UNLOCK_GESTURE',\n SOFTWARE_VERSION = 'SOFTWARE_VERSION',\n INIT_STEP = 'INIT_STEP',\n ACCOUNT = 'ACCOUNT',\n BROWSERS = 'BROWSERS'\n}\n\nexport type DeviceModelCriterion = {\n createTime: number;\n field: CriterionField;\n id: number;\n labelGroupDisplayName: string;\n labelGroupId: number;\n labelGroupName: string;\n}\n\nexport type DeviceModelCriterionData = Pick<DeviceModelCriterion, 'field' | 'labelGroupId'>;\n","export enum RetentionStrategy {\n CLUSTER_ON_OFF = 'CLUSTER_ON_OFF',\n MIN_FREE_MAX_TOTAL = 'MIN_FREE_MAX_TOTAL',\n POOL_MANAGER_AWARE = 'POOL_MANAGER_AWARE'\n}\n\nexport type DeviceModelPool = {\n createTime: number;\n enabled: boolean;\n id: number;\n location: string;\n maxTotal: number;\n minAvailable: number;\n name: string;\n numberOfBrowsers: number;\n osVersion: string;\n retentionStrategy: RetentionStrategy;\n running: number;\n}\n\nexport type DeviceModelPoolData = Pick<DeviceModelPool, 'maxTotal' | 'minAvailable'>;\n","export enum ProblemType {\n CLEANING = 'CLEANING',\n DIRTY = 'DIRTY',\n OFFLINE = 'OFFLINE',\n LOW_BATTERY = 'LOW_BATTERY',\n HIGH_FAIL_RATE = 'HIGH_FAIL_RATE',\n NO_INTERNET_CONNECTION = 'NO_INTERNET_CONNECTION'\n}\n\nexport type DeviceProblem = {\n clusterId: number;\n clusterName: string;\n deviceId: number;\n deviceModelId: number;\n deviceModelName: string;\n deviceName: string;\n id: number;\n problems: Array<DeviceProblemPair>;\n location: string;\n}\n\nexport type DeviceProblemPair = {\n id: number;\n type: ProblemType;\n value: any;\n}\n","import {Device} from './Device';\nimport {CollectionBasicQueryParams} from './HTTP';\n\nexport type TunnelSettings = {\n domain: string;\n email: string;\n}\n\nexport enum DeviceSessionType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL_APP = 'MANUAL_APP',\n MANUAL_WEB = 'MANUAL_WEB'\n}\n\nexport enum RetryState {\n NONE = 'NONE',\n MANUAL = 'MANUAL',\n AUTO = 'AUTO'\n}\n\nexport enum DeviceSessionState {\n ABORTED = 'ABORTED',\n EXCLUDED = 'EXCLUDED',\n FAILED = 'FAILED',\n RUNNING = 'RUNNING',\n SUCCEEDED = 'SUCCEEDED',\n TIMEOUT = 'TIMEOUT',\n WAITING = 'WAITING',\n WARNING = 'WARNING'\n}\n\nexport enum DeviceSessionStepType {\n WAITING = 'WAITING',\n PREPARING = 'PREPARING',\n UNINSTALL = 'UNINSTALL',\n INSTALL = 'INSTALL',\n RUNNING = 'RUNNING',\n SENDING_RESULTS = 'SENDING_RESULTS',\n PROCESSING_RESULTS = 'PROCESSING_RESULTS'\n}\n\nexport type DeviceSessionConfig = {\n adbVersion: string;\n browserName: string;\n browserVersion: string;\n deviceModelId: number;\n id: number;\n screenResolution: string;\n tunnelSettings: TunnelSettings;\n type: DeviceSessionConfig;\n url: string;\n}\n\nexport type DeviceSession = {\n abortTime: number;\n accountId: number;\n autoRetriesLeftCount: number;\n biometricInstrumentation: boolean;\n config: DeviceSessionConfig;\n createTime: number;\n clientSideId: string;\n device: Device;\n deviceInstanceId: number;\n deviceRunId: number;\n duration: number;\n endTime: number;\n excludeReason: string;\n externalId: string;\n id: number;\n installTime: number;\n name: string;\n projectId: number;\n projectName: string;\n retryable: boolean;\n retryState: RetryState;\n startTime: number;\n state: DeviceSessionState;\n successRatio: number;\n testCaseAllCount: number;\n testCaseFailedCount: number;\n testCasePassedCount: number;\n testCaseSkippedCount: number;\n testCaseSuccessCount: number;\n testRunId: number;\n testRunName: string;\n timeLimit: number;\n type: DeviceSessionType;\n uiLink: string;\n userEmail: string;\n userId: number;\n}\n\nexport type DeviceSessionCommand = {\n duration: number;\n httpMethod: string;\n id: number;\n requestBody: string;\n responseBody: string;\n responseCode: number;\n timestamp: number;\n uri: string;\n}\n\nexport type DeviceSessionStep = {\n deviceSessionId: number;\n excludeReason: string;\n failReason: string;\n finishTimeMS: number;\n id: number;\n startTimeMS: number;\n type: DeviceSessionStepType;\n}\n\nexport type DeviceSessionConnection = {\n createTime: number;\n deviceSessionId: number;\n endTime: number;\n externalId: string;\n host: string;\n id: number;\n password: string;\n path: string;\n port: number;\n type: string;\n urlSchema: string;\n}\n\nexport type DeviceSessionData = Omit<DeviceSessionConfig, 'adbVersion' | 'id' | 'tunnelSettings' | 'type'> & {configuration: DeviceSessionConfig};\n\nexport interface DeviceSessionQueryParams extends CollectionBasicQueryParams {\n withProperties: boolean;\n}\n\nexport interface SessionQueryParams extends CollectionBasicQueryParams {\n projectId: number;\n testRunId: number;\n}\n\nexport interface SessionRunStepQueryParams extends CollectionBasicQueryParams {\n runId: number;\n}\n\nexport interface SessionStepQueryParams extends SessionRunStepQueryParams {\n projectId: number;\n}\n\nexport enum SessionReleaseReason {\n INACTIVITY = 'INACTIVITY',\n TIMEOUT = 'TIMEOUT',\n USER_ACTION = 'USER_ACTION',\n CHANGE_DEVICE = 'CHANGE_DEVICE',\n WEBSOCKET_CLOSED = 'WEBSOCKET_CLOSED'\n}\n\nexport type DeviceSessionRelease = {\n reason: SessionReleaseReason;\n}\n","export enum OsType {\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n DESKTOP = 'DESKTOP',\n UNDEFINED = 'UNDEFINED'\n}\n\nexport type Enum = {\n id: number;\n value: string;\n}\n","export enum LicenseStatus {\n ACTIVE = 'ACTIVE',\n EXPIRED = 'EXPIRED',\n INACTIVE = 'INACTIVE',\n CLOSED = 'CLOSED'\n}\n\nexport type BaseLicense = {\n enabled: boolean;\n};\n\nexport type FeatureLicense = {\n deviceLimit: number;\n deviceLimited: boolean;\n projectLimit: number;\n projectLimited: boolean;\n};\n\nexport type AndroidLicense = BaseLicense & FeatureLicense & {\n cts: CTSLicense;\n uiAutomator: UIAutomatorLicense;\n};\n\nexport type BuildLicense = BaseLicense & {\n limit: number;\n limited: boolean;\n};\n\nexport type DesktopLicense = BaseLicense & FeatureLicense;\n\nexport type GlobalLicense = FeatureLicense;\n\nexport type InspectorLicense = BaseLicense;\n\nexport type IOSLicense = BaseLicense & FeatureLicense;\n\nexport type RecorderLicense = BaseLicense & {\n limit: number;\n limited: boolean;\n};\n\nexport type ServerLicense = BaseLicense & {\n androidEnabled: boolean;\n iosEnabled: boolean;\n};\n\nexport type CTSLicense = BaseLicense;\n\nexport type UIAutomatorLicense = BaseLicense;\n\nexport type License = {\n activateTime: number;\n android: AndroidLicense;\n build: BuildLicense;\n closeTime: number;\n desktop: DesktopLicense;\n expireTime: number;\n global: GlobalLicense;\n id: number;\n inspector: InspectorLicense;\n ios: IOSLicense;\n privateInstance: boolean;\n recorder: RecorderLicense;\n server: ServerLicense;\n status: LicenseStatus;\n userEmail: string;\n userId: number;\n}\n\nexport type LicenseData = Pick<License, 'privateInstance' | 'userId'> & {\n androidDeviceLimit: number;\n androidEnabled: boolean;\n androidProjectLimit: number;\n buildEnabled: boolean;\n buildLimit: number;\n desktopDeviceLimit: number;\n desktopEnabled: boolean;\n desktopProjectLimit: number;\n globalDeviceLimit: number;\n globalProjectLimit: number;\n inspectorEnabled: boolean;\n iosDeviceLimit: number;\n iosEnabled: boolean;\n iosProjectLimit: number;\n privateInstance: boolean;\n unit: string;\n unitCount: number;\n}\n","import {QueryParams} from './HTTP';\n\n\nexport enum NotificationChannel {\n SLACK = 'SLACK',\n EMAIL = 'EMAIL',\n WEBHOOK = 'WEBHOOK'\n}\n\nexport enum NotificationScope {\n ALL = 'ALL',\n TEST_RUN = 'TEST_RUN',\n TEST_RUN_FAILURE = 'TEST_RUN_FAILURE',\n TEST_RUN_SUCCEEDED = 'TEST_RUN_SUCCEEDED',\n SYSTEM = 'SYSTEM',\n CHECK = 'CHECK',\n}\n\nexport type Notification = {\n channel: NotificationChannel;\n destination: string;\n id: number;\n projectId?: number;\n projectName?: string;\n scope: NotificationScope;\n userEmail: string;\n userId: number;\n}\n\nexport interface NotificationData extends QueryParams {\n scope: NotificationScope;\n}\n\nexport type NotificationsData = Pick<Notification, 'channel' | 'destination' | 'projectId' | 'scope'>;\n","import {OsType} from './Enum';\nimport {TestRunConfig, TestRunsQueryParams} from './TestRun';\n\nexport enum ArchivingStrategy {\n NEVER = 'NEVER',\n DAYS = 'DAYS',\n RUNS = 'RUNS'\n}\n\nexport type Project = {\n archiveTime: number;\n archivingItemCount: number;\n archivingStrategy: ArchivingStrategy;\n common: boolean;\n createTime: number;\n description: string;\n id: number;\n name: string;\n osType: OsType;\n readOnly: boolean;\n rowIndex: number;\n shared: boolean;\n sharedWithCaller: boolean;\n successRatio: number;\n testRunConfig: TestRunConfig;\n userEmail: string;\n userId: number;\n}\n\nexport type UserProjectData = Pick<Project, 'name'>;\n\nexport interface UserProjectQueryParams extends TestRunsQueryParams {\n showStatistics: boolean;\n}\n","import {CollectionBasicQueryParams} from './HTTP';\n\nexport enum ScreenshotType {\n LANDSCAPE = 'LANDSCAPE',\n PORTRAIT = 'PORTRAIT'\n}\n\nexport type Screenshot = {\n fail: boolean;\n id: number;\n originalName: string;\n takeTimestamp: number;\n type: ScreenshotType;\n}\n\nexport interface ScreenshotQueryParams extends CollectionBasicQueryParams {\n name: string;\n}\n","import {PaymentMethod} from './AccountService';\nimport {CollectionQueryParams} from './HTTP';\nimport {Role} from './Role';\n\n\nexport type Service = {\n activateTime: number;\n activated: boolean;\n archiveTime: number;\n centPrice: number;\n commonId: string;\n customPlan: boolean;\n defaultConcurrences: Array<number>;\n description: string;\n externalId: string;\n features: string;\n id: number;\n name: string;\n priceString: string;\n roles: Array<Role>;\n unit: ServiceUnit;\n}\n\nexport enum ServiceUnit {\n DAY = 'DAY',\n HOUR = 'HOUR',\n MONTH = 'MONTH',\n PROJECT = 'PROJECT',\n RUN = 'RUN',\n YEAR = 'YEAR'\n}\n\nexport interface AdminServicesParams extends CollectionQueryParams {\n activeOnly: boolean;\n inUse: boolean;\n notArchive: boolean;\n}\n\nexport type ServiceActivateData = {\n activateTime: number;\n}\n\nexport interface ServiceData {\n address?: string;\n cardNumber?: string;\n city?: string;\n count?: number;\n country?: string;\n cvv?: string;\n email?: string;\n expirationDate?: string;\n firstName?: string;\n lastName?: string;\n organization?: string;\n paymentMethod: PaymentMethod;\n phone?: string;\n serviceId: number;\n state?: string;\n stripeToken?: string;\n vatId?: string;\n zip?: string;\n}\n","import {QueryParams} from './HTTP';\n\n\nexport enum SharedResourceType {\n DEVICE_GROUP = 'DEVICE_GROUP',\n FILE = 'FILE',\n PROJECT = 'PROJECT',\n}\n\nexport type SharedResource = {\n id: number;\n name: string;\n resourceId: number;\n type: SharedResourceType;\n}\n\nexport interface ShareWithGroup extends QueryParams {\n accessGroupId: number;\n}\n\nexport interface ShareWithEmail extends QueryParams {\n email: string;\n}\n\nexport type ShareData = ShareWithGroup | ShareWithEmail;\n","import {Method} from 'axios';\nimport {CollectionResponse} from './HTTP';\n\n\nexport enum TestResult {\n PASSED = 'PASSED',\n FAILED = 'FAILED',\n SKIPPED = 'SKIPPED',\n NOT_AVAILABLE = 'NOT_AVAILABLE'\n}\n\nexport type TestCaseRun = {\n className: string;\n createTime: number;\n duration: number;\n errorMessage: string;\n id: number;\n methodName: string;\n result: TestResult;\n stacktrace: string;\n steps: CollectionResponse<TestCaseRunStep>;\n suiteName: string;\n}\n\nexport type TestCaseRunStep = {\n description: string;\n duration: number;\n httpMethod: Uppercase<Method>;\n id: number;\n requestBody: string;\n responseBody: string;\n responseCode: number;\n timestamp: number;\n uri: string;\n}\n","import {Device} from './Device';\nimport {TunnelSettings} from './DeviceSession';\nimport {OsType} from './Enum';\nimport {CollectionBasicQueryParams, QueryParams} from './HTTP';\nimport {UserFile} from './UserFile';\nimport {DeviceGroup} from './DeviceGroup';\nimport {Framework} from './Framework';\n\n\nexport enum LimitationType {\n PACKAGE = 'PACKAGE',\n CLASS = 'CLASS'\n}\n\nexport enum TestScheduler {\n PARALLEL = 'PARALLEL',\n SERIAL = 'SERIAL',\n SINGLE = 'SINGLE',\n ALL_INSTANCES = 'ALL_INSTANCES'\n}\n\nexport enum TestState {\n WAITING = 'WAITING',\n RUNNING = 'RUNNING',\n FINISHED = 'FINISHED'\n}\n\n\nexport type TestRun = {\n abortedDeviceCount: number;\n config: TestRunConfig;\n createTime: number;\n deviceCount: number;\n displayName: string;\n errorsDeviceCount: number;\n excludedDeviceCount: number;\n executedTestCaseCount: number;\n executionRatio: number;\n failedTestCaseCount: number;\n finishedDeviceCount: number;\n frameworkId: number;\n frameworkName: string;\n id: number;\n logsFileId: number;\n message: string;\n 'number': number;\n projectId: number;\n projectName: string;\n retryable: boolean;\n rowIndex: number;\n runningDeviceCount: number;\n screenshotsFileId: number;\n startTime: number;\n startedByDisplayName: string;\n startedById: number;\n state: TestState;\n succeededDeviceCount: number;\n successRatio: number;\n successfulTestCaseCount: number;\n testCaseCount: number;\n timeoutedDeviceCount: number;\n uiLink: string;\n userId: number;\n waitingDeviceCount: number;\n warningDeviceCount: number;\n}\n\nexport enum TestRunConfigFileAction {\n COPY_TO_DEVICE = 'COPY_TO_DEVICE',\n INSTALL = 'INSTALL',\n RUN_TEST = 'RUN_TEST',\n}\n\nexport type TestRunConfigFile = {\n action: TestRunConfigFileAction;\n availableActions: Array<TestRunConfigFileAction>;\n file: UserFile;\n id: number;\n};\n\nexport type TestRunParameter = {\n name?: string;\n key: string;\n value: string;\n label?: string;\n}\n\nexport type TRCDefaultSettings = {\n deviceLanguageCode: string;\n disableResigning: boolean;\n hookURL: string;\n instrumentationRunner: string;\n limitationType: string;\n limitationValue: string;\n scheduler: string;\n screenshotDir: string;\n withAnnotation: string;\n withoutAnnotation: string;\n timeout: string;\n projectName: string;\n testRunName: string;\n testRunParameters?: TestRunParameter[];\n biometricInstrumentation: boolean;\n}\n\nexport type TestRunConfig = TRCDefaultSettings & {\n appCrawlerRun: boolean;\n appiumBrokerAddress: string;\n appiumBrokerQueueName: string;\n applicationPassword: string;\n applicationUsername: string;\n availableDeviceGroups: DeviceGroup[];\n availableDevices: Array<Device>;\n availableFrameworks: Framework[];\n availableOsTypes: Array<OsType>;\n clientSideTestConfig: any;\n computedDevices: Array<number>;\n creditsPrice: number;\n deviceGroupId?: number;\n deviceIds: any;\n deviceNamePattern: string;\n files: Array<TestRunConfigFile> | null;\n frameworkId: number;\n id: number;\n loadedPrevious: boolean;\n maxAutoRetriesCount: number;\n maxTestTimeout: any;\n maxWaitTime: number;\n osType: OsType;\n projectId: number;\n resignFiles: boolean;\n runAvailable: boolean;\n status: string;\n statusCode: number;\n testRunId: number;\n testRunNameGrouping: string;\n tunnelSettings: TunnelSettings;\n useSamples: boolean;\n usedDeviceGroupId: number;\n usedDeviceGroupName: string;\n videoRecordingEnabled: boolean;\n withAnnotation: string;\n}\n\nexport interface TestRunData extends QueryParams {\n displayName: string;\n}\n\nexport interface RunData extends TestRunData {\n projectId: number;\n}\n\nexport interface RunQueryParam extends QueryParams {\n projectId: number;\n}\n\n\nexport type TestRunsIncludes = {\n includeDeviceGroups: boolean;\n includeDevices: boolean;\n includeFrameworks: boolean;\n}\n\nexport type RunsConfigParams = TestRunsIncludes & QueryParams;\n\n// for users/{userid}/runs\nexport interface TestRunsQueryParams extends CollectionBasicQueryParams {\n forWholeAccount: boolean;\n skipCommonProject: boolean;\n skipShared: boolean;\n}\n","import {CollectionQueryParams, QueryParams} from './HTTP';\nimport {Role} from './Role';\n\n\nexport enum UserStatus {\n INACTIVE = 'INACTIVE',\n DISABLED = 'DISABLED',\n ENABLED = 'ENABLED'\n}\n\nexport type User = {\n accountId: number;\n accountName: string;\n userAccountName: string;\n accountServiceIds: Array<number>;\n address: string;\n apiKey: string;\n city: string;\n code: string;\n country: string;\n createTime: number;\n createdByEmail: string;\n createdById: number;\n deleteTime: number;\n email: string;\n enabled: boolean;\n firstName: string;\n id: number;\n isAccountOwner: boolean;\n lastLaunchedTestTime: number;\n lastLoginTime: number;\n lastName: string;\n organization: string;\n phone: string;\n registrationIP: string;\n roles: Array<Role>;\n serviceIds: Array<number>;\n state: string;\n status: UserStatus;\n timeZone: string;\n}\n\nexport type UserData = Pick<User, 'email'>;\n\nexport interface UserParams extends CollectionQueryParams {\n WITH_ADDRESS: boolean;\n WITH_USER_INFO: boolean;\n onlyMainUsers: boolean;\n onlyWithDisabledServices: boolean;\n withRole: string;\n withRoles: boolean;\n}\n\nexport type UserUpdateAccount = Pick<User, 'accountId'>;\n\nexport type UserDeleteData = {\n password: string;\n}\n\nexport interface LoginData {\n username: string;\n password: string;\n}\n\n\nexport type UserPasswordData = {\n key: string;\n password: string;\n};\nexport type UserActivateData = {\n zip: string;\n} & UserPasswordData\n & Pick<User, 'address' | 'city' | 'country' | 'email' | 'firstName' | 'lastName' | 'organization' | 'phone' | 'state'>;\n\nexport interface UserRecoveryQueryParams extends QueryParams {\n recoveryKey: string;\n}\n","import {CollectionQueryParams, QueryParams} from './HTTP';\n\n\nexport enum FileDirection {\n INPUT = 'INPUT',\n OUTPUT = 'OUTPUT'\n}\n\nexport enum FileInputType {\n APPLICATION = 'APPLICATION',\n TEST = 'TEST',\n DATA = 'DATA'\n}\n\nexport enum FileState {\n PREPARING = 'PREPARING',\n READY = 'READY'\n}\n\nexport type FileProperty = {\n id: number;\n key: string;\n value: string;\n};\n\nexport type UserFileTag = {\n id: number;\n name: string;\n}\n\nexport type UserFile = {\n createTime: number;\n directUrl: string;\n direction: FileDirection;\n duplicate: boolean;\n fileProperties: Array<FileProperty>;\n iconDirectUrl: string;\n id: number;\n inputType: FileInputType;\n mimetype: string;\n name: string;\n shared: boolean;\n size: number;\n state: FileState;\n userEmail: string;\n userId: number;\n};\n\nexport interface UserFileParams extends CollectionQueryParams {\n tag: Array<string>;\n}\n\nexport type UserFileData = {\n file: FormData;\n global: boolean;\n}\n\nexport type BuildLogsData = {\n deviceRunIds: Array<number>;\n projectId: number;\n userId: number;\n}\n\nexport type BuildLogsParams = BuildLogsData;\n\nexport interface FileSizeData extends QueryParams {\n height: number;\n width: number;\n}\n\nexport type UploadObj = {\n dir: string;\n filename: string;\n}\n\nexport interface FileData {\n file: Blob;\n global: boolean;\n}\n","export enum VisualTestImageType {\n FULL_PAGE = 'FULL_PAGE',\n VIEWPORT = 'VIEWPORT',\n ELEMENT_SCREENSHOT = 'ELEMENT_SCREENSHOT'\n}\n\nexport type VisualTestAccess = {\n enabled: boolean;\n apiKey: string | null;\n}\n\nexport type VisualTest = {\n comparisonStatus:\tstring;\n appUrl:\tstring;\n createdAt:\tstring;\n id: number;\n imageName:\tstring;\n imageThumbnailUrl:\tstring;\n imageType:\tVisualTestImageType;\n imageUrl:\tstring;\n sessionId:\tstring;\n testUrl:\tstring;\n}\n"],"names":["Filter","constructor","name","value","operand","this","finka","FilterBuilder","filters","gt","add","lt","after","afterorequal","before","beforeorequal","on","eq","contains","like","notlike","isnull","undefined","isnotnull","notin","raw","filter","Array","wrap","isFilterPart","SyntaxError","push","str","test","toString","parts","part","val","length","join","checkNull","_value","i","v","Date","getTime","isNull","item","endsWith","ALLOWED_HTTP_METHODS","APIOrder","APIEntity","parent","stack","requestConfig","root","isArray","setRequestConfig","abortController","AbortController","abortRequest","abort","items","concat","shift","restack","first","last","toUrl","absolute","url","baseUrl","Object","deepAssign","removeRequestConfig","key","headers","_headers","replace","letter","toUpperCase","method","NAME","toLocaleUpperCase","indexOf","Error","get","post","params","getParams","removeParam","data","jsonData","formData","send","signal","startsWith","paramsSerializer","indexes","axios","request","stringify","arrayFormat","APIList","all","noLimit","cut","between","create","sort","order","asc","limit","Number","isNatural","getLimit","offset","from","to","only","idx","page","search","query","APIResource","APIListCleanupConfigurations","super","specific","APIResourceCleanupConfiguration","id","devices","APIAdminListDevices","cleanupConfigurations","cleanupConfiguration","APIAdminListRuns","config","apiResource","APIAdminListServices","active","apiList","notArchived","activated","inUse","byPrice","NonRequestable","Promise","reject","APIAdminListStatistics","frameworks","__decorate","APIAdminResourceAccount","roles","role","accountServices","preferences","usage","usageSummary","APIAdminResourceAccountService","activate","deactivate","APIAdminResourceCluster","APIAdminResourceDevice","labels","label","queue","APIAdminResourceDeviceModel","browsers","InputFileset","files","filesZip","exports","IMAGE_FILES_FILTER","in","NON_MEDIA_FILES_FILTER","APIListOutputFiles","performance","tag","images","nonMediaFiles","videos","OutputFileset","file","screenshots","screenshot","screenshotFile","APIListScreenshots","APIResourceDeviceSessionCommon","commands","input","output","release","steps","step","currentStep","connections","logs","responseType","clusterLogs","APIAdminResourceDeviceSessionStandalone","changeBillable","billable","deviceSessionId","postAdminDeviceSessionChangeBillable","APIAdminResourceDeviceTime","APIAdminResourceFramework","requiredRoles","APIAdminResourceLicense","resend","download","postDeviceRunIds","ids","a","deviceRunIds","APIAdminResourceRunStandalone","changePriority","priority","resource","retry","timeout","APIAdminResourceService","APIAdminResourceUserAccount","services","update","APIResourceDeviceSessionStandalone","connection","visualTestsImages","APIAdminResourceUser","disable","enable","licenses","resendActivation","account","deviceSession","APIResourceAccessGroup","users","user","resources","APIResourceDeviceGroup","device","selectors","selector","share","APIResourceFile","icon","tags","property","APIListTestCaseRuns","APIResourceDeviceSession","testCaseRuns","APIListTestRunDeviceSessions","APIResourceRunCommon","buildLogsZip","dataAvailability","deviceSessions","logsZip","performanceZip","screenshotsZip","APIResourceRun","APIResourceProject","runs","run","unarchive","APIAdminResource","accessGroups","accessGroup","accounts","accountService","activities","administrators","billingPeriods","billingPeriod","clusters","cluster","devicesForModel","deviceStatuses","deviceModels","deviceModel","deviceProblems","deviceModelCriterias","deviceModelCriteria","deviceTime","deviceTimeSummary","deviceTypes","deviceType","deviceGroups","deviceGroup","emails","resendEmail","framework","frameworkAvailableLabels","interactiveQueue","license","maintenance","overview","pools","pool","projects","project","samples","sample","service","settings","statistics","createUser","APIListDevices","desktopBrowserCapabilities","APIListProperties","APIListServices","available","availableByPrice","APIListUsers","recoveries","passwordRecovery","APIResourceBillingPeriod","receipt","APIResourceAccount","concurrencyStatus","removeUser","disableUser","enableUser","serviceBillingPeriod","visualTestAccess","userUsageDetails","usageDetails","usageDetailsSummary","APIResourceBroker","hubs","APIResourceDevice","properties","APIResourceLabelGroup","APIListFiles","upload","obj","global","isNodeJs","nodeUpload","fs","require","form","append","createReadStream","dir","filename","getHeaders","APIResourceChannel","type","scopes","APIListNotifications","channels","channel","APIListRuns","APIListSmartbearTunnels","APIResourceNotification","APIResourceUser","TypeError","markAccountOwner","availableFrameworks","resetApiKey","restore","feedback","notifications","notification","uiPreferences","deviceUsage","deviceStatistics","smartbearTunnel","smartbearTunnels","deleteAccount","APIResourceUserSession","login","logout","sso","sbidCallbackUrl","default","globalThis","defaults","common","maxContentLength","API","axiosConfig","baseURL","cloudUrl","v2","apiKey","auth","username","password","withXSRFToken","withCredentials","admin","broker","enums","labelGroups","labelGroup","ma","me","userSession","CloudAPIClient","AccessGroupScope","SessionUsageType","UtilizationType","SessionType","TimeResolution","PaymentStatus","PaymentMethod","DeactivateReason","InitStep","DeviceState","FrameworkType","BillingType","BrokerType","ClusterState","ClusterType","DeviceGroupOrigin","Platform","SupportedCreators","PoolSize","Code","LockReason","CriterionField","RetentionStrategy","ProblemType","DeviceSessionType","RetryState","DeviceSessionState","DeviceSessionStepType","SessionReleaseReason","OsType","LicenseStatus","NotificationChannel","NotificationScope","ArchivingStrategy","ScreenshotType","ServiceUnit","SharedResourceType","TestResult","LimitationType","TestScheduler","TestState","TestRunConfigFileAction","UserStatus","FileDirection","FileInputType","FileState","VisualTestImageType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bitbar-cloud-api-client.min.js","sources":["../src/Filter.ts","../src/finka.ts","../src/FilterBuilder.ts","../src/api/models/HTTP.ts","../src/api/APIEntity.ts","../src/api/APIList.ts","../src/api/APIResource.ts","../src/api/APIListCleanupConfigurations.ts","../src/api/APIResourceCleanupConfiguration.ts","../src/api/APIAdminListDevices.ts","../src/api/APIAdminListRuns.ts","../src/api/APIAdminListServices.ts","../src/api/decorators/NonRequestable.ts","../src/api/APIAdminListStatistics.ts","../src/api/APIAdminResourceAccount.ts","../src/api/APIAdminResourceAccountService.ts","../src/api/APIAdminResourceCluster.ts","../src/api/APIAdminResourceDevice.ts","../src/api/APIAdminResourceDeviceModel.ts","../src/api/class/InputFileset.ts","../src/api/class/Images.filter.ts","../src/api/class/NonMedia.filter.ts","../src/api/APIListOutputFiles.ts","../src/api/class/OutputFileset.ts","../src/api/APIListScreenshots.ts","../src/api/APIResourceDeviceSessionCommon.ts","../src/api/APIAdminResourceDeviceSessionStandalone.ts","../src/api/factory/postAdminDeviceSessionChangeBillable.ts","../src/api/APIAdminResourceDeviceTime.ts","../src/api/APIAdminResourceFramework.ts","../src/api/APIAdminResourceLicense.ts","../src/api/factory/postDeviceRunIds.ts","../src/api/APIAdminResourceRunStandalone.ts","../src/api/APIAdminResourceService.ts","../src/api/APIAdminResourceUserAccount.ts","../src/api/APIResourceDeviceSessionStandalone.ts","../src/api/APIAdminResourceUser.ts","../src/api/APIResourceAccessGroup.ts","../src/api/APIResourceDeviceGroup.ts","../src/api/APIResourceFile.ts","../src/api/APIListTestCaseRuns.ts","../src/api/APIResourceDeviceSession.ts","../src/api/APIListTestRunDeviceSessions.ts","../src/api/APIResourceRunCommon.ts","../src/api/APIResourceRun.ts","../src/api/APIResourceProject.ts","../src/api/APIAdminResource.ts","../src/api/APIListDevices.ts","../src/api/APIListProperties.ts","../src/api/APIListServices.ts","../src/api/APIListUsers.ts","../src/api/APIResourceBillingPeriod.ts","../src/api/APIResourceAccount.ts","../src/api/APIResourceBroker.ts","../src/api/APIResourceDevice.ts","../src/api/APIResourceLabelGroup.ts","../src/api/APIListFiles.ts","../src/api/APIResourceChannel.ts","../src/api/APIListNotifications.ts","../src/api/APIListRuns.ts","../src/api/APIListSmartbearTunnels.ts","../src/api/APIResourceNotification.ts","../src/api/APIResourceUser.ts","../src/api/APIResourceUserSession.ts","../src/API.ts","../src/CloudAPIClient.ts","../src/api/models/AccessGroup.ts","../src/api/models/Account.ts","../src/api/models/AccountService.ts","../src/api/models/AdminDevice.ts","../src/api/models/AdminFrameworkStatistics.ts","../src/api/models/BillingPeriod.ts","../src/api/models/Broker.ts","../src/api/models/Cluster.ts","../src/api/models/Device.ts","../src/api/models/DeviceModelCriterion.ts","../src/api/models/DeviceModelPool.ts","../src/api/models/DeviceProblem.ts","../src/api/models/DeviceSession.ts","../src/api/models/Enum.ts","../src/api/models/License.ts","../src/api/models/Notification.ts","../src/api/models/Project.ts","../src/api/models/Screenshot.ts","../src/api/models/Service.ts","../src/api/models/SharedResource.ts","../src/api/models/TestCaseRun.ts","../src/api/models/TestRun.ts","../src/api/models/User.ts","../src/api/models/UserFile.ts","../src/api/models/VisualTest.ts"],"sourcesContent":["/**\n * Filter\n */\n\nexport class Filter<T = any> {\n name: string;\n value: T;\n operand: string;\n\n constructor(name: string, value: T, operand: string) {\n this.name = name;\n this.value = value;\n this.operand = operand;\n }\n}\n\nexport default Filter;\n","import finka from '@bitbar/finka';\n\nfinka();\n\nexport default {};\n","import {Filter} from './Filter';\nimport './finka';\n\n/**\n * FilterBuilder\n *\n * Builds filter string according to Bitbar Cloud backend convention\n */\nexport class FilterBuilder {\n\n private readonly filters: Array<Filter> = [];\n\n gt(name: string, value: number): this {\n return this.add(name, value, 'gt');\n }\n\n\n lt(name: string, value: number): this {\n return this.add(name, value, 'lt');\n }\n\n after(name: string, value: Date | number): this {\n return this.add(name, value, 'after', true);\n }\n\n afterorequal(name: string, value: Date | number): this {\n return this.add(name, value, 'afterorequal', true);\n }\n\n before(name: string, value: Date | number): this {\n return this.add(name, value, 'before', true);\n }\n\n beforeorequal(name: string, value: Date | number): this {\n return this.add(name, value, 'beforeorequal', true);\n }\n\n on(name: string, value: any): this {\n return this.add(name, value, 'on');\n }\n\n eq(name: string, value: any): this {\n return this.add(name, value, 'eq');\n }\n\n contains(name: string, value: string): this {\n return this.add(name, value, 'contains');\n }\n\n like(name: string, value: string): this {\n return this.add(name, value, 'like');\n }\n\n notlike(name: string, value: string): this {\n return this.add(name, value, 'notlike');\n }\n\n isnull(name: string): this {\n return this.add(name, undefined, 'isnull');\n }\n\n isnotnull(name: string): this {\n return this.add(name, undefined, 'isnotnull');\n }\n\n in(name: string, value: Array<any>): this {\n return this.add(name, value, 'in', true);\n }\n\n notin(name: string, value: Array<any>): this {\n return this.add(name, value, 'notin', true);\n }\n\n raw(filter: Filter | string | Filter[] | string[]): void {\n const filters = Array.wrap(filter);\n for (const filter of filters) {\n if (this.isFilterPart(<string>filter)) {\n this.filters.push(<Filter>filter);\n } else {\n throw new SyntaxError(`Filter ${filter} has invalid syntax`);\n }\n }\n }\n\n\n /**\n * Check if given string is proper filter part\n */\n isFilterPart(str: string): boolean {\n return /^[a-zA-Z0-9.]{2,12}_(?:isnull$|(?:gt|lt|(?:after|before)(?:orequal)?|on|eq|contains|like|(?:not)?in)_)/.test(<string>str);\n }\n\n toString(): string {\n const parts: Array<string> = [];\n\n let part: string,\n val: string;\n\n for (const filter of this.filters) {\n if (typeof filter === 'string') {\n part = filter;\n } else {\n val = '';\n if (filter.value.length > 1 || typeof filter.value[0] !== 'undefined') {\n val = `_${filter.value.join('|')}`;\n }\n part = `${filter.name}_${filter.operand}${val}`;\n }\n parts.push(part);\n }\n\n return parts.join(';');\n }\n\n /**\n * Add filter to filters list\n * @param name {string} Name\n * @param value {*} Value\n * @param operand {string} Operand\n * @param [checkNull=false] {boolean} Check null?\n * @returns {FilterBuilder}\n */\n private add<T = any>(name: string, value: T, operand: string, checkNull = false): this {\n\n let _value = Array.wrap(value);\n\n if (_value.length === 0) {\n return this;\n }\n\n // auto-convert\n for (let i = 0; i < _value.length; i++) {\n const v = _value[i];\n if (typeof v === 'object' && v instanceof Date) {\n _value[i] = v.getTime();\n }\n }\n\n let isNull = false;\n if (checkNull) {\n // check null existence\n for (const v of _value) {\n if (v !== null) {\n continue;\n }\n isNull = true;\n }\n\n if (isNull) {\n _value = _value.filter((item: any) => item !== null);\n operand += 'ornull';\n }\n }\n\n if (operand.endsWith('ornull') && _value.length === 0) {\n operand = 'isnull';\n }\n\n // add filter\n this.filters.push(new Filter<Array<T>>(name, _value, operand));\n\n return this;\n }\n}\n\n\nexport default FilterBuilder;\n","import {Method} from 'axios';\n\n\n/**\n * Allowed methods\n *\n * @type {Array}\n * @default\n */\nexport const ALLOWED_HTTP_METHODS: Array<Method> = ['GET', 'POST', 'DELETE'];\n\nexport type QueryParam = string | number | boolean;\nexport type QueryParams = Record<string, QueryParam | Array<QueryParam>>;\n\nexport enum APIOrder {\n asc = 'a',\n desc = 'd'\n}\n\nexport interface CollectionQueryParams extends QueryParams {\n filter: string;\n limit: number;\n offset: number;\n sort: string;\n search: string;\n}\n\nexport type CollectionBasicQueryParams = Omit<CollectionQueryParams, 'search'>\n\nexport type NoQueryParams = {\n [key in any]: never;\n}\n\nexport type CollectionResponse<T> = {\n data: Array<T>;\n empty: boolean;\n id: number;\n limit: number;\n next: string;\n offset: number;\n previous: string;\n search: string;\n sort: string;\n total: number;\n}\n\nexport type SimpleCollectionResponse<T> = Pick<CollectionResponse<T>, 'data' | 'id'>;\nexport type NoData = void;\n","import {AxiosRequestConfig, AxiosResponse, Method} from 'axios';\nimport {stringify} from 'qs';\nimport {API} from '../API';\nimport {ALLOWED_HTTP_METHODS, QueryParams} from './models/HTTP';\nimport {AbortController} from 'node-abort-controller';\n\n\n/**\n * @typeParam RESPONSE HTTP Response return type.\n * @typeParam QUERY_PARAMS Allowed Query Params\n * @typeParam DATA Allowed Data Object\n */\nexport class APIEntity<RESPONSE = any, QUERY_PARAMS extends QueryParams | void = QueryParams, DATA = any> {\n\n root: API;\n\n protected stack: Array<string | number> = [];\n protected requestConfig: AxiosRequestConfig = {};\n protected ALLOWED_HTTP_METHODS: Array<Method> = ALLOWED_HTTP_METHODS;\n protected abortController: AbortController;\n\n /**\n * Constructor\n * @param {APIEntity|object} [parent] - Specifies a parent from which should be inherited properties\n */\n constructor(parent: APIEntity<RESPONSE> | API) {\n if (parent instanceof APIEntity) {\n this.root = parent.root;\n\n if (Array.isArray(parent.stack)) { //???\n this.push(...parent.stack);\n }\n\n if (parent.requestConfig != null) {\n this.setRequestConfig(parent.requestConfig);\n }\n } else {\n this.root = parent;\n }\n this.abortController = new AbortController();\n }\n\n abortRequest() {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n push(...items: Array<string | number>): this {\n this.stack = this.stack.concat(items);\n return this;\n }\n\n shift(): this {\n this.stack.shift();\n return this;\n }\n\n restack(...items: Array<string | number>): this {\n this.stack = items;\n return this;\n }\n\n /**\n * Get first element of the stack\n */\n get first(): string | number {\n return this.stack[0];\n }\n\n /**\n * Get last element of the stack\n */\n get last(): string | number {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Set last element of the stack\n */\n set last(val) {\n this.stack[this.stack.length - 1] = val;\n }\n\n toUrl(absolute = false): string {\n let url = `/${this.stack.join('/')}`;\n\n if (absolute) {\n url = this.root.baseUrl + url;\n }\n\n return url;\n }\n\n setRequestConfig(requestConfig: AxiosRequestConfig): this {\n Object.deepAssign(this.requestConfig, requestConfig);\n return this;\n }\n\n removeRequestConfig(key: keyof AxiosRequestConfig): this {\n delete this.requestConfig[key];\n return this;\n }\n\n headers(headers: Record<string, string>): this {\n const _headers: Record<string, string> = {};\n\n // Unify/Standarize headers keys\n for (const key in headers) {\n const newKey = key.replace(/(?:^|-)([a-z])/g, (letter) => letter.toUpperCase());\n _headers[newKey] = headers[key];\n }\n\n return this.setRequestConfig({\n headers: _headers\n });\n }\n\n /**\n * Set HTTP method\n */\n method(name: Method): this {\n const NAME: Uppercase<Method> = <Uppercase<Method>>name.toLocaleUpperCase();\n const isAllowed: boolean = this.ALLOWED_HTTP_METHODS.indexOf(NAME) > -1;\n\n if (!isAllowed) {\n throw new Error(`Method '${NAME}' is not allowed! You can use: ${this.ALLOWED_HTTP_METHODS.join(', ')}`);\n }\n\n return this.setRequestConfig({\n method: NAME\n });\n }\n\n /**\n * Set GET as HTTP method\n */\n get(): this {\n return this.method('GET');\n }\n\n /**\n * Set POST as HTTP method\n */\n post(): this {\n return this.method('POST');\n }\n\n /**\n * Set DELETE as HTTP method\n */\n delete(): this {\n return this.method('DELETE');\n }\n\n /**\n * Set params\n */\n params<T extends keyof QUERY_PARAMS = keyof QUERY_PARAMS>(params: Pick<QUERY_PARAMS, T>): this {\n this.setRequestConfig({params});\n return this;\n }\n\n getParams(): Partial<QUERY_PARAMS> {\n return this.requestConfig.params == null ? {} : this.requestConfig.params;\n }\n\n removeParam(key: keyof QUERY_PARAMS): this {\n delete this.requestConfig.params[key];\n return this;\n }\n\n /**\n * Set data\n */\n data(data: DATA): this {\n this.setRequestConfig({data});\n return this;\n }\n\n /**\n * Set JSON data\n */\n jsonData(data: DATA): this {\n this.headers({\n 'Content-Type': 'application/json'\n }).data(data);\n return this;\n }\n\n /**\n * Set form data\n */\n formData(data: DATA): this {\n this.headers({\n 'Content-Type': 'multipart/form-data'\n }).data(data);\n return this;\n }\n\n /**\n * Send request\n */\n send<T = RESPONSE>(): Promise<AxiosResponse<T>> {\n const requestConfig = <AxiosRequestConfig>Object.deepAssign({}, this.requestConfig, {\n url: `/${this.stack.join('/')}`,\n signal: this.abortController.signal\n });\n\n // Set default headers\n if (requestConfig.headers == null) {\n requestConfig.headers = {};\n }\n\n if (requestConfig.headers['Content-Type'] == null) {\n requestConfig.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n }\n\n // Convert data if needed\n if (requestConfig.method === 'POST' &&\n (<string>requestConfig.headers['Content-Type']).startsWith('application/x-www-form-urlencoded') &&\n requestConfig.data != null) {\n requestConfig.data = this.paramsSerializer(requestConfig.data);\n }\n\n if (requestConfig.params) {\n requestConfig.paramsSerializer = {indexes: false};\n }\n\n // Send request\n return this.root.axios.request<T>(requestConfig);\n }\n\n protected paramsSerializer(params: DATA | QUERY_PARAMS): string {\n return stringify(params, {\n arrayFormat: 'brackets'\n });\n }\n}\n\n\nexport default APIEntity;\n","import {AxiosResponse} from 'axios';\nimport {FilterBuilder} from '../FilterBuilder'\nimport {APIEntity} from './APIEntity'\nimport {\n APIOrder,\n CollectionBasicQueryParams,\n CollectionQueryParams,\n CollectionResponse,\n NoQueryParams,\n SimpleCollectionResponse\n} from './models/HTTP';\n\n\nexport const DEFAULT_LIMIT: number = 20;\nexport const DEFAULT_OFFSET: number = 0;\n\nexport type APIListQuery = CollectionBasicQueryParams | CollectionQueryParams | NoQueryParams;\n\nexport class APIList<RESPONSE = any, QUERY_PARAMS extends APIListQuery = CollectionQueryParams, DATA = any>\n extends APIEntity<CollectionResponse<RESPONSE> | SimpleCollectionResponse<RESPONSE>, QUERY_PARAMS, DATA> {\n\n /**\n * Shortcut for sending data POST\n */\n create(data: DATA): Promise<AxiosResponse<RESPONSE>> {\n return this.post().data(data).send<RESPONSE>();\n }\n\n /**\n * Sets sorting\n *\n * @public\n * @param {string} name - Name of the column according to which the data will be sorted\n * @param {string} [order=a] - Sorting order. Possibilities: 'a', 'd'\n */\n sort(name: string, order: APIOrder = APIOrder.asc): this {\n return this.params<'sort'>({\n sort: `${name}_${order}`\n });\n }\n\n /**\n * Sets limit\n *\n * @public\n * @param {number} [limit=DEFAULT_LIMIT] - Limit to be set\n * @returns this\n */\n limit(limit = DEFAULT_LIMIT): this {\n if (!Number.isNatural(limit)) {\n throw new Error(`Limit '${limit}' is invalid!`);\n }\n\n return this.params<'limit'>({\n limit\n });\n }\n\n /**\n * Gets limit\n *\n * @public\n * @returns number\n */\n getLimit(): number {\n const params = this.getParams();\n return params.limit == null ? DEFAULT_LIMIT : <number>params.limit;\n }\n\n /**\n * Disables limit\n *\n * @public\n * @returns this\n */\n noLimit(): this {\n return this.limit(0);\n }\n\n /**\n * Sets offset\n *\n * @public\n * @param {number} [offset=DEFAULT_OFFSET] - Offset to be set\n * @returns this\n */\n offset(offset: number = DEFAULT_OFFSET): this {\n if (!Number.isNatural(offset)) {\n throw new Error(`Offset '${offset}' is invalid!`);\n }\n\n return this.params<'offset'>({\n offset\n });\n }\n\n /**\n * Sets limit and offset so that will request from BE records between range\n *\n * @public\n * @param {number} from - From index\n * @param {number} to - To index\n * @returns this\n */\n between(from: number, to: number): this {\n if (!Number.isNatural(from)) {\n throw new Error(`From '${from}' is invalid!`);\n }\n\n if (!Number.isNatural(to)) {\n throw new Error(`To '${to}' is invalid!`);\n }\n\n return this.params<'offset' | 'limit'>({\n offset: from,\n limit: 1 + (to - from)\n });\n }\n\n /**\n * Sets limit and offset so that will request from BE one record on given index\n *\n * @public\n * @param {number} idx - Index\n * @returns this\n */\n only(idx: number): this {\n if (!Number.isNatural(idx)) {\n throw new Error(`Index '${idx}' is invalid!`);\n }\n\n return this.params<'offset' | 'limit'>({\n offset: idx,\n limit: 1\n });\n }\n\n /**\n * Gets current limit and sets offset so that will request from BE one page of records\n *\n * @public\n * @param {number} [page=1] - Page number (counted from 1)\n * @returns this\n */\n page(page = 1): this {\n if (!Number.isNatural(page) || page == 0) {\n throw new Error(`Page '${page}' is invalid!`);\n }\n\n const limit = this.getLimit();\n const offset = (page - 1) * limit;\n\n return this.params<'offset' | 'limit'>({\n offset,\n limit\n });\n }\n\n /**\n * Sets search\n *\n * query param is working like SQL LIKE. BE sets wraps around query with %, and replaces every white character\n * with %. So e.g. if query='my device', then it's searching for '%my%device%' in DB.\n *\n * @public\n * @param {string} query - Query to search for\n * @returns this\n */\n search(query: string): this {\n if (typeof query !== 'string') {\n throw new Error('Search query must be a string!');\n }\n\n return this.params<'search'>({\n search: query\n });\n }\n\n /**\n * Sets filter\n *\n * @public\n * @param {FilterBuilder|string} filter - Filter\n * @returns this\n */\n filter(filter: FilterBuilder | string): this {\n const isFilterBuilder = filter instanceof FilterBuilder;\n\n if (typeof filter !== 'string' && !isFilterBuilder) {\n throw new Error('Filter must be either string or instance of FilterBuilder');\n }\n\n return this.params<'filter'>({\n filter: filter.toString()\n });\n }\n\n /**\n * Alias for 'noLimit'\n *\n * @public\n * @see noLimit\n * @returns this\n */\n all: typeof APIList.prototype.noLimit = this.noLimit;\n\n /**\n * Alias for 'between'\n *\n * @public\n * @param {number} from - From idx\n * @param {number} to - To idx\n * @returns this\n */\n cut: typeof APIList.prototype.between = this.between;\n}\n\nexport default APIList;\n","import {APIEntity} from './APIEntity'\nimport {QueryParams} from './models/HTTP';\n\n\n/**\n * APIResource\n *\n * @class\n * @extends APIEntity\n */\nexport class APIResource<RESPONSE = any, QUERY_PARAMS extends QueryParams | void = QueryParams, DATA = QUERY_PARAMS>\n extends APIEntity<RESPONSE, QUERY_PARAMS, DATA> {\n}\n\n\nexport default APIResource;\n","import {APIAdminListDevices} from './APIAdminListDevices';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {CleanupConfigurationData, SpecificCleanupConfigurationQueryParams} from './models/CleanupConfiguration';\nimport {DeviceCleanupConfiguration} from './models/Device';\nimport {CollectionQueryParams, NoData} from './models/HTTP';\n\n\nexport class APIListCleanupConfigurations extends APIList<DeviceCleanupConfiguration, CollectionQueryParams, CleanupConfigurationData> {\n\n /**\n * /cleanup-configurations\n */\n constructor(parent: APIAdminListDevices) {\n super(parent);\n this.push('cleanup-configurations');\n }\n\n // /cleanup-configurations/specific\n specific() {\n return new APIResource<DeviceCleanupConfiguration, Partial<SpecificCleanupConfigurationQueryParams>, NoData>(this)\n .push('specific');\n }\n\n}\n\nexport default APIListCleanupConfigurations\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIResource} from './APIResource'\nimport {CleanupConfigurationSpecificData, DeviceCleanupConfiguration} from './models/Device';\nimport {NoData} from './models/HTTP';\nimport APIList from './APIList';\n\n\nexport class APIResourceCleanupConfiguration extends APIResource<DeviceCleanupConfiguration> {\n //shuldn't it be APIAdminResourceCleanupConfiguration\n\n /**\n * admin/devices/cleanup-configurations/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('cleanup-configurations', id);\n }\n\n // admin/devices/cleanup-configurations/{id}/devices\n devices() {\n return new APIList<DeviceCleanupConfiguration, CleanupConfigurationSpecificData, NoData>(this).push('devices');\n }\n\n}\n\nexport default APIResourceCleanupConfiguration\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIListCleanupConfigurations} from './APIListCleanupConfigurations';\nimport {APIResourceCleanupConfiguration} from './APIResourceCleanupConfiguration';\nimport {AdminDevice, AdminDeviceData, AdminDevicesQueryParams} from './models/AdminDevice';\n\n\nexport class APIAdminListDevices extends APIList<AdminDevice, AdminDevicesQueryParams, AdminDeviceData> {\n\n /**\n * /admin/devices\n */\n constructor(parent: APIAdminResource | API) {\n super(parent);\n this.push('admin', 'devices');\n }\n\n // /admin/devices/cleanup-configurations\n cleanupConfigurations() {\n return new APIListCleanupConfigurations(this);\n }\n\n // /admin/devices/cleanup-configurations/{id}\n cleanupConfiguration(id: number) {\n return new APIResourceCleanupConfiguration(this, id);\n }\n\n}\n\nexport default APIAdminListDevices;\n","import {Method} from 'axios';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource';\nimport {AdminTestRun} from './models/AdminTestRun';\nimport {RunsConfigParams, TestRunConfig} from './models/TestRun';\n\nexport class APIAdminListRuns extends APIList<AdminTestRun> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET'];\n\n /**\n * /admin/runs\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'runs');\n }\n\n // /runs/config\n config() {\n const apiResource = new APIResource<TestRunConfig, RunsConfigParams, TestRunConfig>(this);\n apiResource.restack('runs', 'config');\n return apiResource;\n }\n\n}\n\n\nexport default APIAdminListRuns\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {AdminServicesParams, Service} from './models/Service';\n\n\nexport class APIAdminListServices extends APIList<Service, AdminServicesParams, Service> {\n\n /**\n * /admin/services\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'services');\n }\n\n active() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'notArchived'>({\n notArchived: true\n });\n return apiList;\n }\n\n activated() {\n const apiList = this.active();\n apiList.params<'filter' | 'limit' | 'sort'>({\n filter: 'activated_eq_true',\n limit: 0,\n sort: 'name_a'\n })\n return apiList;\n }\n\n inUse() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'inUse' | 'limit' | 'sort'>({\n inUse: true,\n limit: 0,\n sort: 'name_a'\n })\n return apiList;\n }\n\n byPrice() {\n const apiList = new APIList<Service, AdminServicesParams, Service>(this);\n apiList.params<'sort'>({\n sort: 'centPrice_a'\n })\n return apiList;\n }\n\n}\n\nexport default APIAdminListServices;\n","import {AxiosResponse} from 'axios';\n\nexport function NonRequestable<T extends {new(...args: any[]): object}>(constructor: T) {\n return class extends constructor {\n send(): Promise<AxiosResponse> {\n return Promise.reject();\n }\n };\n}\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AdminFrameworkStatistics, AdminStatisticsParams} from './models/AdminFrameworkStatistics';\nimport {NoData} from './models/HTTP';\n\n\n@NonRequestable\nexport class APIAdminListStatistics extends APIList {\n\n /**\n * /admin/statistics\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'statistics');\n }\n\n // /admin/statistics/frameworks\n frameworks() {\n return new APIList<AdminFrameworkStatistics, AdminStatisticsParams, NoData>(this).push('frameworks');\n }\n\n\n}\n\n\nexport default APIAdminListStatistics\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource'\nimport {\n Account, AccountData,\n AccountUsage,\n AccountUsageParams,\n AccountUsageSummary,\n AccountUsageSummaryParams\n} from './models/Account';\nimport {NoData, NoQueryParams, SimpleCollectionResponse} from './models/HTTP';\nimport {Role, RoleData, RoleParams} from './models/Role';\nimport {AccountService} from './models/AccountService';\nimport {AccountPreferences, AccountPreferencesData} from './models/AccountPreference';\n\n\nexport class APIAdminResourceAccount extends APIResource<Account, NoQueryParams, AccountData> {\n\n /**\n * /admin/accounts/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'accounts', id);\n }\n\n // /admin/accounts/{id}/roles\n roles() {\n return new APIList<Role, RoleParams, RoleData>(this).push('roles');\n }\n\n // /admin/accounts/{id}/roles/{id}\n role(id: number) {\n return new APIResource<Role, RoleParams, NoData>(this).push('roles', id);\n }\n\n // /admin/accounts/{id}/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('account-services');\n }\n\n // /accounts/{id}/preferences\n preferences() {\n return new APIResource<AccountPreferences, NoQueryParams, AccountPreferencesData>(this).push('preferences');\n }\n\n // /admin/accounts/{id}/usage\n usage() {\n return new APIList<SimpleCollectionResponse<AccountUsage>, AccountUsageParams>(this).push('usage');\n }\n\n // /admin/accounts/{id}/usage-summary\n usageSummary() {\n return new APIResource<AccountUsageSummary, AccountUsageSummaryParams>(this).push('usage-summary');\n }\n\n}\n\nexport default APIAdminResourceAccount\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {AccountService} from './models/AccountService';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\nexport class APIAdminResourceAccountService extends APIResource<AccountService, NoQueryParams, NoData> {\n\n /**\n * /admin/account-services/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'account-services', id);\n }\n\n // /account-services/{id}/activate\n activate() {\n return new APIResource<AccountService, NoQueryParams, NoData>(this).push('activate').post();\n }\n\n // /account-services/{id}/deactivate\n deactivate() {\n return new APIResource<AccountService, NoQueryParams, NoData>(this).push('deactivate').post();\n }\n\n}\n\nexport default APIAdminResourceAccountService\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {AdminDevice} from './models/AdminDevice';\nimport {Cluster, ClusterData, ClusterParams} from './models/Cluster';\n\n\nexport class APIAdminResourceCluster extends APIResource<Cluster, ClusterParams, ClusterData> {\n\n /**\n * /clusters/{id}\n */\n constructor(parent: API | APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('clusters', id);\n }\n\n // /clusters/{id}/devices\n devices() {\n return new APIList<AdminDevice>(this).push('devices');\n }\n\n}\n\nexport default APIAdminResourceCluster\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {AdminDevice, AdminDeviceData} from './models/AdminDevice';\nimport {AdminDeviceSession} from './models/AdminDeviceSession';\nimport {\n DeviceCleanupConfiguration,\n DeviceCleanupConfigurationData,\n DeviceLabelData,\n DeviceProperty\n} from './models/Device';\nimport {NoData, NoQueryParams, QueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceDevice extends APIResource<AdminDevice, NoQueryParams, AdminDeviceData> {\n\n /**\n * /admin/devices/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'devices', id);\n }\n\n // /admin/devices/{id}/cleanup-configuration\n cleanupConfiguration() {\n return new APIResource<DeviceCleanupConfiguration, QueryParams, DeviceCleanupConfigurationData>(this).push('cleanup-configuration');\n }\n\n // /admin/devices/{id}/labels\n labels() {\n return new APIList<DeviceProperty, NoQueryParams, DeviceLabelData>(this).push('labels');\n }\n\n // /admin/devices/{id}/labels/{id}\n label(id: number) {\n return new APIResource<DeviceProperty, NoQueryParams, NoData>(this).push('labels', id);\n }\n\n // /admin/devices/{id}/queue\n queue() {\n return new APIList<AdminDeviceSession>(this).push('queue');\n }\n\n}\n\nexport default APIAdminResourceDevice\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Browser, DeviceBrowserData} from './models/Browser';\nimport {DeviceModel, DeviceModelData} from './models/DeviceModel';\nimport {NoQueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceDeviceModel extends APIResource<DeviceModel, NoQueryParams, DeviceModelData> {\n\n /**\n * /admin/device-models/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'device-models', id);\n }\n\n // /admin/device-models/{id}/browsers\n browsers() {\n return new APIList<Browser, NoQueryParams, DeviceBrowserData>(this).push('browsers');\n }\n\n}\n\nexport default APIAdminResourceDeviceModel;\n","import {API} from '../../API';\nimport {APIEntity} from '../APIEntity';\nimport {APIList} from '../APIList'\nimport {APIResource} from '../APIResource'\nimport {NonRequestable} from '../decorators/NonRequestable';\nimport {NoData} from '../models/HTTP';\nimport {UserFile} from '../models/UserFile';\nimport {FilesQueryParams} from './FilesQueryParams';\n\n\n@NonRequestable\nexport class InputFileset extends APIResource<NoData> {\n\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('input-file-set');\n }\n\n /**\n * @remarks Endpoint /input-file-set/files\n */\n files() {\n return new APIList<UserFile, FilesQueryParams, NoData>(this).push('files');\n }\n\n /**\n * @remarks Endpoint /input-file-set/files.zip\n */\n filesZip() {\n return new APIResource<Blob, FilesQueryParams>(this).push('files.zip');\n }\n}\n\nexport default InputFileset\n","// Create image files filter\nimport FilterBuilder from '../../FilterBuilder';\n\nexport const IMAGE_FILES_FILTER = new FilterBuilder();\nIMAGE_FILES_FILTER.eq('state', 'READY');\nIMAGE_FILES_FILTER.in('mimetype', [\n 'image/png', 'image/jpg', 'image/jpeg', 'image/webp', 'image/gif'\n]);\nIMAGE_FILES_FILTER.notlike('name', 'action-%%');\n","// Create non-media files filter\nimport FilterBuilder from '../../FilterBuilder';\n\nexport const NON_MEDIA_FILES_FILTER = new FilterBuilder();\nNON_MEDIA_FILES_FILTER.eq('state', 'READY');\nNON_MEDIA_FILES_FILTER.notin('mimetype', [\n // no images\n 'image/png', 'image/jpg', 'image/jpeg', 'image/webp', 'image/gif',\n\n // no videos\n 'video/mp4', 'video/avi', 'video/webm', 'video/ogg', 'video/mpeg'\n]);\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {UserFile} from './models/UserFile';\nimport {FilesQueryParams} from './class/FilesQueryParams';\nimport {IMAGE_FILES_FILTER} from './class/Images.filter';\nimport {NON_MEDIA_FILES_FILTER} from './class/NonMedia.filter';\n\n\nexport class APIListOutputFiles extends APIList<UserFile, FilesQueryParams> {\n\n /**\n * /files\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('files');\n }\n\n performance(): this {\n return this.params({\n tag: ['performance']\n })\n }\n\n images(): this {\n return this.filter(IMAGE_FILES_FILTER);\n }\n\n // Filter files out by non-media\n nonMediaFiles(): this {\n return this.filter(NON_MEDIA_FILES_FILTER);\n }\n\n // Filter files out by ready videos\n videos(): this {\n return this.params({\n filter: 's_state_eq_READY',\n tag: ['video']\n });\n }\n}\n\nexport default APIListOutputFiles;\n","import {API} from '../../API';\nimport {APIEntity} from '../APIEntity';\nimport {APIList} from '../APIList'\nimport {APIResource} from '../APIResource'\nimport {NonRequestable} from '../decorators/NonRequestable';\nimport {Screenshot} from '../models/Screenshot';\nimport {UserFile} from '../models/UserFile';\nimport {FilesQueryParams} from './FilesQueryParams';\nimport APIListOutputFiles from '../APIListOutputFiles';\n\n\n@NonRequestable\nexport class OutputFileset extends APIResource<UserFile, FilesQueryParams> {\n\n /**\n * /output-file-set\n *\n * Constructor\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('output-file-set');\n }\n\n // /output-file-set/files\n files() {\n return new APIListOutputFiles(this);\n }\n\n // /output-file-set/files/{id}\n file(id: number) {\n return new APIResource<UserFile, FilesQueryParams>(this).push('files', id);\n }\n\n // /output-file-set/files.zip\n filesZip() {\n return new APIResource<Blob, FilesQueryParams>(this).push('files.zip');\n }\n\n // /output-file-set/screenshots\n screenshots() {\n return new APIList<Screenshot, FilesQueryParams>(this).push('screenshots');\n }\n\n // /output-file-set/screenshots/{id}\n screenshot(id: number) {\n return new APIResource<Screenshot, FilesQueryParams>(this).push('screenshots', id);\n }\n\n // /output-file-set/screenshots/{id}/file/{id}\n screenshotFile(id: number) {\n return this.screenshot(id).push('file');\n }\n}\n\nexport default OutputFileset\n","import {Screenshot} from './models/Screenshot';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport APIList from './APIList';\nimport APIResourceDeviceSessionCommon from './APIResourceDeviceSessionCommon';\n\n\nexport class APIListScreenshots extends APIList<Screenshot, CollectionBasicQueryParams, NoData> {\n\n /**\n * screenshots\n */\n constructor(parent: APIResourceDeviceSessionCommon) {\n super(parent);\n this.push('screenshots');\n }\n}\n\nexport default APIListScreenshots\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource'\nimport {InputFileset} from './class/InputFileset'\nimport {OutputFileset} from './class/OutputFileset'\nimport {DeviceSessionCommon} from './interface/DeviceSessionCommon';\nimport {\n DeviceSession,\n DeviceSessionCommand,\n DeviceSessionStep,\n SessionRunStepQueryParams,\n SessionStepQueryParams\n} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport APIListScreenshots from './APIListScreenshots';\n\n\nexport class APIResourceDeviceSessionCommon extends APIResource<DeviceSession> implements DeviceSessionCommon {\n\n /**\n * /device-sessions/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-sessions', id);\n }\n\n // /device-sessions/{id}/commands\n commands() {\n return new APIList<DeviceSessionCommand>(this).push('commands');\n }\n\n // /device-sessions/{id}/input-file-set\n input() {\n return new InputFileset(this);\n }\n\n // /device-sessions/{id}/output-file-set\n output() {\n return new OutputFileset(this);\n }\n\n // /device-sessions/{id}/release\n release() {\n return new APIResource<DeviceSession, NoQueryParams, void>(this).push('release').post();\n }\n\n // /device-sessions/{id}/screenshots\n screenshots() {\n return new APIListScreenshots(this);\n }\n\n // /device-sessions/{id}/screenshots/{id}\n screenshot(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource(this).push('screenshots', id);\n }\n\n // /device-sessions/{id}/steps\n steps() {\n return new APIList<DeviceSessionStep, CollectionBasicQueryParams | SessionRunStepQueryParams | SessionStepQueryParams, NoData>(this).push('steps');\n }\n\n // /device-sessions/{id}/steps/{id}\n step(id: number | 'current') {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<DeviceSessionStep, NoQueryParams, NoData>(this).push('steps', id);\n }\n\n // /device-sessions/{id}/steps/current\n currentStep() {\n return this.step('current');\n }\n\n // /device-sessions/{id}/connections\n connections() {\n return new APIList(this).push('connections');\n }\n\n logs() {\n return new APIResource(this).push('logs').setRequestConfig({\n responseType: 'text'\n });\n }\n\n clusterLogs() {\n return new APIResource(this).push('cluster-logs').setRequestConfig({\n responseType: 'text'\n });\n }\n\n}\n\nexport default APIResourceDeviceSessionCommon\n","import {APIResourceDeviceSessionCommon} from './APIResourceDeviceSessionCommon';\nimport {postAdminDeviceSessionChangeBillable} from './factory/postAdminDeviceSessionChangeBillable';\nimport {DeviceSessionCommon} from './interface/DeviceSessionCommon';\n\n\n/**\n * APIAdminResourceDevice\n *\n *\n * It will require more work to decouple from regular session\n */\nexport class APIAdminResourceDeviceSessionStandalone extends APIResourceDeviceSessionCommon implements DeviceSessionCommon {\n\n // /admin/device-sessions/{id}/changebillable\n changeBillable(billable: boolean) {\n return postAdminDeviceSessionChangeBillable(this, billable);\n }\n}\n\nexport default APIAdminResourceDeviceSessionStandalone;\n","import {APIResource} from '../APIResource';\nimport APIResourceDeviceSessionCommon from '../APIResourceDeviceSessionCommon';\nimport {DeviceSession} from '../models/DeviceSession';\n\nexport function postAdminDeviceSessionChangeBillable(parent: APIResourceDeviceSessionCommon, billable: boolean) {\n const apiResource = new APIResource<DeviceSession>(parent);\n const deviceSessionId = apiResource.last;\n\n return apiResource.restack('admin', 'device-sessions', deviceSessionId, 'changebillable').params({\n billable\n }).post();\n}\n\nexport default postAdminDeviceSessionChangeBillable;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {NoData} from './models/HTTP';\nimport {DeviceTimeParams, UserDeviceTime} from './models/UserDeviceTime';\n\nexport class APIAdminResourceDeviceTime extends APIList<UserDeviceTime, DeviceTimeParams, NoData> {\n\n /**\n * /admin/device-time\n */\n constructor(parent: APIAdminResource) {\n super(parent);\n this.push('admin', 'device-time');\n }\n}\n\nexport default APIAdminResourceDeviceTime\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Framework, FrameworkConfigData, FrameworkEditData} from './models/Framework';\nimport {NoQueryParams} from './models/HTTP';\nimport {ProjectJobConfig} from './models/ProjectJobConfig';\nimport {Role} from './models/Role';\n\nexport class APIAdminResourceFramework extends APIResource<Framework, NoQueryParams, FrameworkEditData> {\n\n /**\n * /admin/frameworks/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'frameworks', id);\n }\n\n // /admin/frameworks/{id}/config\n config() {\n return new APIResource<ProjectJobConfig, NoQueryParams, FrameworkConfigData>(this).push('config');\n }\n\n // /admin/frameworks/{id}/required-roles\n requiredRoles() {\n return new APIList<Role>(this).push('required-roles');\n }\n\n}\n\nexport default APIAdminResourceFramework\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {License} from './models/License';\n\nexport class APIAdminResourceLicense extends APIResource<License, NoQueryParams, NoData> {\n\n /**\n * /licenses/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'licenses', id);\n }\n\n // /licenses/{id}/activate\n activate() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('activate');\n }\n\n // /licenses/{id}/deactivate\n deactivate() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('deactivate');\n }\n\n // /licenses/{id}/resend\n resend() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('resend');\n }\n\n // /licenses/{id}/download\n download() {\n return new APIResource<Blob, NoQueryParams, NoData>(this).push('download');\n }\n\n}\n\nexport default APIAdminResourceLicense\n","import {APIEntity} from '../APIEntity';\nimport {APIResource} from '../APIResource';\nimport {BuildLogsData, BuildLogsParams} from '../models/UserFile';\n\nexport function postDeviceRunIds<T>(parent: APIEntity, name: string, ids?: Array<number>) {\n const a = new APIResource<T, BuildLogsParams, BuildLogsData>(parent).push(name);\n\n if (ids != null) {\n a.params<'deviceRunIds'>({\n deviceRunIds: ids\n });\n }\n\n return a.post();\n}\n\nexport default postDeviceRunIds;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {postDeviceRunIds} from './factory/postDeviceRunIds';\nimport {AdminTestRun, RunChangeBillableParams, RunChangePriorityParams} from './models/AdminTestRun';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\n\nexport class APIAdminResourceRunStandalone extends APIResource<AdminTestRun, NoQueryParams, NoData> {\n\n /**\n * /runs/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'runs', id);\n }\n\n // /runs/{id}/abort\n abort() {\n return new APIResource<AdminTestRun, NoQueryParams, NoData>(this).push('abort').post();\n }\n\n // /runs/{id}/changebillable\n changeBillable(billable: boolean) {\n return new APIResource<AdminTestRun, RunChangeBillableParams>(this).push('changebillable').post().params({\n billable\n });\n }\n\n // /runs/{id}/changepriority\n changePriority(priority?: number) {\n const resource = new APIResource<AdminTestRun, RunChangePriorityParams>(this).push('changepriority');\n if (priority) {\n resource.post().data({\n priority\n });\n }\n return resource;\n }\n\n // /admin/runs/{id}/retry\n retry(ids?: Array<number>) {\n return postDeviceRunIds<AdminTestRun>(this, 'retry', ids).setRequestConfig({\n timeout: 0\n });\n }\n\n}\n\nexport default APIAdminResourceRunStandalone;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIResource} from './APIResource'\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {Service, ServiceActivateData} from './models/Service';\n\n\nexport class APIAdminResourceService extends APIResource<Service, NoQueryParams, NoData> {\n\n /**\n * /services/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'services', id);\n }\n\n // /services/{id}/activate\n activate() {\n return new APIResource<Service, ServiceActivateData>(this).push('activate').post();\n }\n\n}\n\nexport default APIAdminResourceService\n","import {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AccountService, AccountServiceData} from './models/AccountService';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Role, RoleData} from './models/Role';\nimport {User, UserUpdateAccount} from './models/User';\n\n@NonRequestable\nexport class APIAdminResourceUserAccount extends APIResource {\n\n /**\n * /account\n */\n constructor(parent: APIAdminResourceUser) {\n super(parent);\n this.push('account');\n }\n\n // /account/roles\n roles() {\n return new APIList<Role, NoQueryParams, RoleData>(this).push('roles');\n }\n\n // /account/roles/{id}\n role(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<Role, NoQueryParams, NoData>(this).push('roles', id);\n }\n\n // /account-services\n services() {\n const a = new APIList<AccountService, CollectionQueryParams, AccountServiceData>(this);\n a.last += '-services';\n return a;\n }\n\n // /update-account\n update() {\n const a = new APIResource<User, UserUpdateAccount>(this);\n a.last = 'update-account';\n return a.post();\n }\n\n}\n\nexport default APIAdminResourceUserAccount\n","import {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceUser} from './APIResourceUser';\nimport {InputFileset} from './class/InputFileset';\nimport {OutputFileset} from './class/OutputFileset';\nimport {DeviceSessionStandalone} from './interface/DeviceSessionStandalone';\nimport {Connection, ConnectionData} from './models/Connection';\nimport {DeviceSession, DeviceSessionRelease} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {VisualTest} from './models/VisualTest';\n\nexport class APIResourceDeviceSessionStandalone extends APIResource<DeviceSession> implements DeviceSessionStandalone {\n\n /**\n * /device-sessions/{id}\n */\n constructor(parent: APIResourceUser | APIAdminResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-sessions', id);\n }\n\n // /device-sessions/{id}/connections\n connections() {\n return new APIList<Connection, CollectionBasicQueryParams, ConnectionData>(this).push('connections');\n }\n\n // /device-sessions/{id}/connections/{id}\n connection(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<Connection, NoQueryParams, NoData>(this).push('connections', id);\n }\n\n // /device-sessions/{id}/input-file-set\n input() {\n return new InputFileset(this);\n }\n\n // /device-sessions/{id}/output-file-set\n output() {\n return new OutputFileset(this);\n }\n\n // /device-sessions/{id}/release\n release() {\n return new APIResource<DeviceSession, NoQueryParams, DeviceSessionRelease>(this).push('release').post();\n }\n\n // /device-sessions/{id}/visual-tests/images\n visualTestsImages() {\n return new APIList<VisualTest, NoQueryParams, NoData>(this).push('visual-tests', 'images');\n }\n\n}\n\nexport default APIResourceDeviceSessionStandalone\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIAdminResourceUserAccount} from './APIAdminResourceUserAccount';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceDeviceSessionStandalone} from './APIResourceDeviceSessionStandalone';\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {License} from './models/License';\nimport {Role, RoleData, RoleParams} from './models/Role';\nimport {User} from './models/User';\n\n\n@NonRequestable\nexport class APIAdminResourceUser extends APIResource<User> {\n\n /**\n * /admin/users/{id}\n */\n constructor(parent: APIAdminResource, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('admin', 'users', id);\n }\n\n // /admin/users/{id}/disable\n disable() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('disable');\n }\n\n // /admin/users/{id}/enable\n enable() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('enable');\n }\n\n // /admin/users/{id}/licenses\n licenses() {\n return new APIList<License, CollectionQueryParams, NoData>(this).push('licenses');\n }\n\n // /admin/users/{id}/resend-activation\n resendActivation() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('resend-activation').post();\n }\n\n // /admin/users/{id}/account\n account() {\n return new APIAdminResourceUserAccount(this);\n }\n\n // /admin/users/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSessionStandalone(this, id);\n }\n\n // /admin/users/{id}/roles\n roles() {\n return new APIList<Role, RoleParams, RoleData>(this).push('roles');\n }\n\n // /admin/users/{id}/roles/{id}\n role(id: number) {\n return new APIResource<Role, RoleParams, NoData>(this).push('roles', id);\n }\n\n}\n\nexport default APIAdminResourceUser;\n","import {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {AccessGroup} from './models/AccessGroup';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {SharedResource} from './models/SharedResource';\nimport {User, UserData} from './models/User';\n\nexport class APIResourceAccessGroup extends APIResource<AccessGroup> {\n\n /**\n * /access-groups/{id}\n *\n */\n constructor(parent: APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('access-groups', id);\n }\n\n // /access-groups/{id}/users\n users() {\n return new APIList<User, CollectionBasicQueryParams, UserData>(this).push('users');\n }\n\n // /access-groups/{id}/users/{id}\n user(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id);\n }\n\n // /access-groups/{id}/resources\n resources() {\n return new APIList<SharedResource, CollectionBasicQueryParams, NoData>(this).push('resources');\n }\n\n // /access-groups/{id}/resources/{id}\n resource(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<SharedResource, NoQueryParams, NoData>(this).push('resources', id);\n }\n\n}\n\nexport default APIResourceAccessGroup\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport APIResourceUser from './APIResourceUser';\nimport {Device, DeviceProperty} from './models/Device';\nimport {DeviceGroup, DeviceGroupData, DeviceGroupParams, DeviceGroupSelectorData} from './models/DeviceGroup';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {ShareData, SharedResource} from './models/SharedResource';\n\nexport class APIResourceDeviceGroup extends APIResource<DeviceGroup> {\n\n /**\n * /device-groups/{id}\n */\n constructor(parent: APIAdminResource | APIResourceUser | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('device-groups', id);\n }\n\n // /device-groups/{id}/devices\n devices() {\n return new APIList<Device | DeviceGroup, DeviceGroupParams, DeviceGroupData>(this).push('devices');\n }\n\n // /device-groups/{id}/devices/{id}\n device(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<void, NoQueryParams, NoData>(this).push('devices', id);\n }\n\n // /device-groups/{id}/selectors\n selectors() {\n return new APIList<DeviceProperty | DeviceGroup, CollectionBasicQueryParams, DeviceGroupSelectorData>(this).push('selectors');\n }\n\n // /device-groups/{id}/selectors/{id}\n selector(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource(this).push('selectors', id);\n }\n\n // /device-groups/{id}/share\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n}\n\nexport default APIResourceDeviceGroup\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport {Property} from './models/Property';\nimport {ShareData, SharedResource} from './models/SharedResource';\nimport {FileSizeData, UserFile, UserFileTag} from './models/UserFile';\n\n\nexport class APIResourceFile extends APIResource<UserFile> {\n\n /**\n * /files/{id}\n */\n constructor(parent: API | APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('files', id);\n }\n\n // use this to download file content\n // /files/{id}/file\n file() {\n return new APIResource<UserFile, FileSizeData, NoData>(this).push('file');\n }\n\n // /files/{id}/icon\n icon() {\n return new APIResource(this).push('icon');\n }\n\n // /files/{id}/tags\n tags() {\n return new APIList<UserFileTag, CollectionBasicQueryParams, NoData>(this).push('tags');\n }\n\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n property(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<Property>(this).push('properties', id);\n }\n\n}\n\nexport default APIResourceFile\n","import {NoData} from './models/HTTP';\nimport {TestCaseRun} from './models/TestCaseRun';\nimport APIList, {APIListQuery} from './APIList';\nimport {SessionQueryParams} from './models/DeviceSession';\nimport APIResourceDeviceSessionCommon from './APIResourceDeviceSessionCommon';\n\n\nexport class APIListTestCaseRuns<Q extends APIListQuery = SessionQueryParams> extends APIList<TestCaseRun, Q, NoData> {\n\n /**\n * /test-case-runs\n */\n constructor(parent: APIResourceDeviceSessionCommon) {\n super(parent);\n this.push('test-case-runs');\n }\n}\n\nexport default APIListTestCaseRuns\n","import {APIResource} from './APIResource';\nimport {APIResourceDeviceSessionCommon} from './APIResourceDeviceSessionCommon';\nimport {DeviceSession as DeviceSessionModel, SessionQueryParams} from './models/DeviceSession';\nimport APIListTestCaseRuns from './APIListTestCaseRuns';\nimport {APIListQuery} from './APIList';\n\nexport class APIResourceDeviceSession<QUERY_PARAMS extends APIListQuery = SessionQueryParams> extends APIResourceDeviceSessionCommon {\n\n // /device-sessions/{id}/abort\n abort() {\n return new APIResource<DeviceSessionModel>(this).push('abort').post();\n }\n\n // /device-sessions/{id}/retry\n retry() {\n return new APIResource<DeviceSessionModel>(this).push('retry').post();\n }\n\n // /device-sessions/{id}/test-case-runs\n testCaseRuns() {\n return new APIListTestCaseRuns<QUERY_PARAMS>(this);\n }\n}\n\nexport default APIResourceDeviceSession\n","import {DeviceSession} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData} from './models/HTTP';\nimport APIList from './APIList';\nimport APIResourceRunCommon from './APIResourceRunCommon';\n\n\nexport class APIListTestRunDeviceSessions extends APIList<DeviceSession, CollectionBasicQueryParams, NoData> {\n\n /**\n * device-sessions\n */\n constructor(parent: APIResourceRunCommon) {\n super(parent);\n this.push('device-sessions');\n }\n}\n\nexport default APIListTestRunDeviceSessions\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {postDeviceRunIds} from './factory/postDeviceRunIds';\nimport {AdminTestRun} from './models/AdminTestRun';\nimport {DeviceSessionStep} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {RunData, RunQueryParam, TestRun, TestRunData} from './models/TestRun';\nimport {TestRunDataAvailability, TestRunDataAvailabilityQueryParams} from './models/TestRunDataAvailability';\nimport {UserFile} from './models/UserFile';\nimport APIListTestRunDeviceSessions from './APIListTestRunDeviceSessions';\n\n\nexport class APIResourceRunCommon extends APIResource<TestRun, RunQueryParam, TestRunData | RunData> {\n\n /**\n * /runs/{id}\n */\n constructor(parent: APIEntity<any> | API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('runs', id);\n }\n\n // /runs/{id}/abort\n abort() {\n return new APIResource<AdminTestRun | TestRun, NoQueryParams, RunData>(this).push('abort').post();\n }\n\n // /runs/{id}/build-logs.zip\n buildLogsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'build-logs.zip', ids);\n }\n\n // /runs/{id}/data-availability\n dataAvailability() {\n return new APIResource<TestRunDataAvailability, TestRunDataAvailabilityQueryParams, NoData>(this).push('data-availability');\n }\n\n // /runs/{id}/device-sessions\n deviceSessions() {\n return new APIListTestRunDeviceSessions(this);\n }\n\n // /runs/{id}/files.zip\n filesZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'files.zip', ids);\n }\n\n // /runs/{id}/logs.zip\n logsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'logs.zip', ids);\n }\n\n // /runs/{id}/performance.zip\n performanceZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'performance.zip', ids);\n }\n\n // /runs/{id}/retry\n retry(ids?: Array<number>) {\n return postDeviceRunIds<TestRun>(this, 'retry', ids).setRequestConfig({\n timeout: 0\n });\n }\n\n // /runs/{id}/screenshots.zip\n screenshotsZip(ids?: Array<number>) {\n return postDeviceRunIds<UserFile>(this, 'screenshots.zip', ids);\n }\n\n // /runs/{id}/steps\n steps() {\n return new APIList<DeviceSessionStep, CollectionBasicQueryParams, NoData>(this).push('steps');\n }\n\n}\n\nexport default APIResourceRunCommon\n","import {APIResourceDeviceSession} from './APIResourceDeviceSession'\nimport {APIResourceRunCommon} from './APIResourceRunCommon'\nimport {CollectionQueryParams} from './models/HTTP';\n\nexport class APIResourceRun extends APIResourceRunCommon {\n\n // /runs/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSession<CollectionQueryParams>(this, id);\n }\n\n}\n\nexport default APIResourceRun\n","import {API} from '../API';\nimport {APIAdminResource} from './APIAdminResource';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceRun} from './APIResourceRun'\nimport {APIResourceUser} from './APIResourceUser';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Project} from './models/Project';\nimport {ShareData, SharedResource} from './models/SharedResource';\nimport {TestRun} from './models/TestRun';\n\nexport class APIResourceProject extends APIResource<Project> {\n\n /**\n * /projects/{id}\n */\n constructor(parent: API | APIAdminResource | APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('projects', id);\n }\n\n // /projects/{id}/runs\n runs() {\n return new APIList<TestRun, CollectionBasicQueryParams, NoData>(this).push('runs');\n }\n\n // /projects/{id}/runs/{id}\n run(id: number) {\n return new APIResourceRun(this, id);\n }\n\n share() {\n return new APIList<SharedResource, ShareData, ShareData>(this).push('share');\n }\n\n // /unarchive\n unarchive() {\n return new APIResource<void, NoQueryParams, NoData>(this).push('unarchive');\n }\n\n}\n\nexport default APIResourceProject\n","import {API} from '../API';\nimport {APIAdminListDevices} from './APIAdminListDevices';\nimport {APIAdminListRuns} from './APIAdminListRuns';\nimport {APIAdminListServices} from './APIAdminListServices';\nimport {APIAdminListStatistics} from './APIAdminListStatistics';\nimport APIAdminResourceAccount from './APIAdminResourceAccount';\nimport {APIAdminResourceAccountService} from './APIAdminResourceAccountService';\nimport {APIAdminResourceCluster} from './APIAdminResourceCluster';\nimport {APIAdminResourceDevice} from './APIAdminResourceDevice';\nimport {APIAdminResourceDeviceModel} from './APIAdminResourceDeviceModel';\nimport {APIAdminResourceDeviceSessionStandalone} from './APIAdminResourceDeviceSessionStandalone';\nimport {APIAdminResourceDeviceTime} from './APIAdminResourceDeviceTime';\nimport {APIAdminResourceFramework} from './APIAdminResourceFramework';\nimport {APIAdminResourceLicense} from './APIAdminResourceLicense';\nimport {APIAdminResourceRunStandalone} from './APIAdminResourceRunStandalone';\nimport {APIAdminResourceService} from './APIAdminResourceService';\nimport {APIAdminResourceUser} from './APIAdminResourceUser';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {APIResourceAccessGroup} from './APIResourceAccessGroup';\nimport {APIResourceDeviceGroup} from './APIResourceDeviceGroup';\nimport {APIResourceFile} from './APIResourceFile'\nimport {APIResourceProject} from './APIResourceProject';\nimport {NonRequestable} from './decorators/NonRequestable';\nimport {AccessGroup, AccessGroupData} from './models/AccessGroup';\nimport {Account} from './models/Account';\nimport {AccountService} from './models/AccountService';\nimport {Activity} from './models/Activity';\nimport {AdminDeviceSession, AdminInteractiveDeviceSession} from './models/AdminDeviceSession';\nimport {AdminDeviceType, DeviceTypeData} from './models/AdminDeviceType';\nimport {AdminEmail} from './models/AdminEmail';\nimport {Administrator} from './models/Administrator';\nimport {AdminOverview} from './models/AdminOverview';\nimport {BillingPeriod} from './models/BillingPeriod';\nimport {Browser, BrowserData} from './models/Browser';\nimport {DeviceModelCriterion, DeviceModelCriterionData} from './models/DeviceModelCriterion';\nimport {DeviceModelPool, DeviceModelPoolData} from './models/DeviceModelPool';\nimport {Framework, FrameworkData} from './models/Framework';\nimport {License, LicenseData} from './models/License';\nimport {Maintenance, MaintenanceData} from './models/Maintenance';\nimport {Project} from './models/Project';\nimport {Role, RoleParams} from './models/Role';\nimport {Settings, SettingsParams} from './models/Settings';\nimport {User, UserData, UserParams} from './models/User';\nimport {DeviceTimeSummaryParams, UserDeviceTimeSummary} from './models/UserDeviceTimeSummary';\nimport {UserFile, UserFileData, UserFileParams} from './models/UserFile';\nimport {Cluster} from './models/Cluster';\nimport {DeviceProperty} from './models/Device';\nimport {DeviceGroup} from './models/DeviceGroup';\nimport {DeviceModel} from './models/DeviceModel';\nimport {DeviceProblem} from './models/DeviceProblem';\nimport {DeviceStatus} from './models/DeviceStatus';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\n\n@NonRequestable\nexport class APIAdminResource extends APIResource {\n\n /**\n * /admin\n */\n constructor(parent: API) {\n super(parent);\n }\n\n // /access-groups\n accessGroups() {\n return new APIList<AccessGroup, CollectionQueryParams, AccessGroupData>(this).push('access-groups');\n }\n\n // /access-groups/{id}\n accessGroup(id: number) {\n return new APIResourceAccessGroup(this, id);\n }\n\n // /admin/accounts\n accounts() {\n return new APIList<Account>(this).push('admin', 'accounts');\n }\n\n // /admin/accounts/{id}\n account(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIAdminResourceAccount(this, id);\n }\n\n // /admin/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('admin', 'account-services');\n }\n\n // /admin/account-services/{id}\n accountService(id: number) {\n return new APIAdminResourceAccountService(this, id);\n }\n\n // activities\n activities() {\n return new APIList<Activity>(this).push('admin', 'activities');\n }\n\n // admin/administrators\n administrators() {\n return new APIList<Administrator>(this).push('admin', 'administrators');\n }\n\n // /admin/billing-periods\n billingPeriods() {\n return new APIList<BillingPeriod>(this).push('admin', 'billing-periods');\n }\n\n // /admin/billing-periods/{id}\n billingPeriod(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<BillingPeriod>(this).push('admin', 'billing-periods', id);\n }\n\n // /admin/browsers\n browsers() {\n return new APIList<Browser, CollectionQueryParams, BrowserData>(this).push('admin', 'browsers');\n }\n\n // /clusters\n clusters() {\n return new APIList<Cluster>(this).push('clusters');\n }\n\n // /clusters/{id}\n cluster(id: number) {\n return new APIAdminResourceCluster(this, id);\n }\n\n // /admin/devices\n devices() {\n return new APIAdminListDevices(this);\n }\n\n // /admin/devices/{id}\n device(id: number) {\n return new APIAdminResourceDevice(this, id);\n }\n\n devicesForModel(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n const apiList = this.devices();\n apiList.params({\n filter: 'deviceModelId_eq_' + id\n });\n return apiList;\n }\n\n // /admin/device/statuses\n deviceStatuses() {\n return new APIList<DeviceStatus>(this).push('admin', 'device', 'statuses');\n }\n\n // /admin/device-models\n deviceModels() {\n return new APIList<DeviceModel>(this).push('admin', 'device-models');\n }\n\n // /admin/device-models/{id}\n deviceModel(id: number) {\n return new APIAdminResourceDeviceModel(this, id);\n }\n\n // /admin/device-problems\n deviceProblems() {\n return new APIList<DeviceProblem>(this).push('admin', 'device-problems');\n }\n\n // /admin/device-model-criteria\n deviceModelCriterias() {\n return new APIList<DeviceModelCriterion, CollectionQueryParams, DeviceModelCriterionData>(this).push('admin', 'device-model-criteria');\n }\n\n // /admin/device-model-criteria/{id}\n deviceModelCriteria(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<DeviceModelCriterion>(this).push('admin', 'device-model-criteria', id);\n }\n\n // /device-sessions\n deviceSessions() {\n return new APIList<AdminDeviceSession>(this).push('admin', 'device-sessions');\n }\n\n // /device-sessions/{id}\n deviceSession(id: number) {\n return new APIAdminResourceDeviceSessionStandalone(this, id);\n }\n\n // /device-time\n deviceTime() {\n return new APIAdminResourceDeviceTime(this);\n }\n\n // /device-time-summary\n deviceTimeSummary() {\n return new APIList<UserDeviceTimeSummary, DeviceTimeSummaryParams>(this).push('admin', 'device-time-summary');\n }\n\n // /device-types\n deviceTypes() {\n return new APIList<AdminDeviceType>(this).push('admin', 'device-types');\n }\n\n // /device-types/{id}\n deviceType(id: number) {\n return new APIResource<AdminDeviceType, NoQueryParams, DeviceTypeData>(this).push('admin', 'device-types', id);\n }\n\n // /device-groups\n deviceGroups() {\n return new APIList<DeviceGroup>(this).push('device-groups');\n }\n\n // /device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /admin/emails\n emails() {\n return new APIList<AdminEmail>(this).push('admin', 'emails');\n }\n\n // /admin/emails/{id}/resend\n resendEmail(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<AdminEmail>(this).push('admin', 'emails', id, 'resend').post();\n }\n\n // /files\n files() {\n return new APIList<UserFile, UserFileParams, UserFileData>(this).push('files');\n }\n\n // /files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /admin/frameworks\n frameworks<T = Framework, U extends CollectionQueryParams = CollectionQueryParams, W = FrameworkData>() {\n return new APIList<T, U, W>(this).push('admin', 'frameworks');\n }\n\n // /admin/frameworks/{id}\n framework(id: number) {\n return new APIAdminResourceFramework(this, id);\n }\n\n // /admin/frameworks/available-labels\n frameworkAvailableLabels() {\n const apiList = this.frameworks<DeviceProperty, CollectionQueryParams, NoData>();\n apiList.push('available-labels');\n return apiList;\n }\n\n // /admin/interactive-queue\n interactiveQueue() {\n return new APIList<AdminInteractiveDeviceSession>(this).push('admin', 'interactive-queue');\n }\n\n // /admin/licenses\n licenses() {\n return new APIList<License, CollectionQueryParams, LicenseData>(this).push('admin', 'licenses');\n }\n\n // /admin/licenses/{id}\n license(id: number) {\n return new APIAdminResourceLicense(this, id);\n }\n\n // /admin/maintenance\n maintenance() {\n return new APIResource<Maintenance, NoQueryParams, MaintenanceData>(this).push('admin', 'maintenance');\n }\n\n // /admin/overview\n overview() {\n return new APIResource<AdminOverview>(this).push('admin', 'overview');\n }\n\n pools() {\n return new APIList<DeviceModelPool>(this).push('admin', 'pools');\n }\n\n pool(id: number) {\n return new APIResource<DeviceModelPool, NoQueryParams, DeviceModelPoolData>(this).push('admin', 'pools', id);\n }\n\n // /projects\n projects() {\n return new APIList<Project>(this).push('projects');\n }\n\n // /projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /admin/roles\n roles() {\n return new APIList<Role, RoleParams, NoData>(this).push('admin', 'roles');\n }\n\n // /admin/runs\n runs() {\n return new APIAdminListRuns(this);\n }\n\n // /runs/{id}\n run(id: number) {\n return new APIAdminResourceRunStandalone(this, id);\n }\n\n // /admin/samples\n samples() {\n return new APIList<UserFile, CollectionQueryParams, Pick<UserFileData, 'file'>>(this).push('admin', 'samples');\n }\n\n // /admin/samples/{id}\n sample(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n return new APIResource<UserFile>(this).push('admin', 'samples', id);\n }\n\n // /admin/services\n services() {\n return new APIAdminListServices(this);\n }\n\n // /admin/services/{id}\n service(id: number) {\n return new APIAdminResourceService(this, id);\n }\n\n // /admin/settings\n settings() {\n return new APIResource<Settings, SettingsParams>(this).push('admin', 'settings');\n }\n\n // /admin/statistics\n statistics() {\n return new APIAdminListStatistics(this);\n }\n\n // /users\n users() {\n return new APIList<User, UserParams, UserData>(this).push('users');\n }\n\n // /admin/users\n createUser() {\n return new APIList<User, NoQueryParams, UserData>(this).push('admin', 'users').post();\n }\n\n // /users/{id}\n user(id: number) {\n return new APIAdminResourceUser(this, id);\n }\n\n}\n\nexport default APIAdminResource;\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {DesktopBrowserCapabilities} from './models/DesktopBrowserCapabilities';\nimport {Device, DevicesQueryParams} from './models/Device';\nimport {DevicePicker} from './models/DeviceFilter';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\n\n\nexport class APIListDevices extends APIList<Device, DevicesQueryParams> {\n\n /**\n * /devices\n */\n constructor(parent: API) {\n super(parent);\n this.push('devices');\n }\n\n // /devices/filters\n filters() {\n return new APIResource<DevicePicker, CollectionQueryParams, Pick<DevicePicker, 'deviceFilterGroups'>>(this).push('filters');\n }\n\n // /devices/desktop-browser-capabilities\n desktopBrowserCapabilities() {\n return new APIResource<DesktopBrowserCapabilities, NoQueryParams, NoData>(this).push('desktop-browser-capabilities');\n }\n\n}\n\nexport default APIListDevices;\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {CollectionQueryParams} from './models/HTTP';\nimport {Property, PropertyData} from './models/Property';\n\n\nexport class APIListProperties extends APIList<Property, CollectionQueryParams, PropertyData> {\n\n /**\n * /properties\n */\n constructor(parent: API) {\n super(parent);\n this.push('properties');\n }\n\n maintenance() {\n return new APIList<Property>(this).params({\n filter: 'name_eq_CLOUD_HEADER_ANNOUNCEMENT',\n limit: 1,\n sort: 'updateTime_d'\n });\n }\n\n}\n\nexport default APIListProperties\n","import {Method} from 'axios';\nimport {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResourceUser} from './APIResourceUser';\nimport {AccountService, ServicePaymentStatus} from './models/AccountService';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Service, ServiceData} from './models/Service';\n\n\nexport class APIListServices extends APIList<ServicePaymentStatus, NoQueryParams, ServiceData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['POST'];\n\n /**\n * /services\n */\n constructor(parent: API | APIResourceUser) {\n super(parent);\n this.push('services');\n }\n\n // /services/available\n available() {\n return new APIList<Service, CollectionQueryParams, NoData>(this).push('available');\n }\n\n active() {\n const apiList = new APIList<AccountService, CollectionQueryParams, NoData>(this);\n if (this.first === 'me') {\n apiList.push('active');\n } else {\n apiList.params({\n notArchived: true\n });\n }\n return apiList;\n }\n\n byPrice() {\n return new APIList<AccountService, CollectionQueryParams, void>(this).sort('centPrice');\n }\n\n availableByPrice() {\n return new APIList<AccountService, CollectionQueryParams, void>(this).push('available').sort('centPrice');\n }\n\n}\n\nexport default APIListServices\n","import {Method} from 'axios';\nimport {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {NoQueryParams} from './models/HTTP';\nimport {Message} from './models/Message';\nimport {\n User,\n UserActivateData,\n UserData,\n UserPasswordData,\n UserRecoveryQueryParams,\n} from './models/User';\n\n\nexport class APIListUsers extends APIList<User, NoQueryParams, UserData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET', 'POST'];\n\n /**\n * /users\n */\n constructor(parent: API) {\n super(parent);\n this.push('users');\n }\n\n // /users/activate\n activate() {\n return new APIResource<User, NoQueryParams, UserActivateData>(this).push('activate').post();\n }\n\n // /users/recoveries\n recoveries() {\n return new APIResource<User | Message, UserRecoveryQueryParams, UserData>(this).push('recoveries');\n }\n\n // /users/passwordRecovery\n passwordRecovery() {\n return new APIResource<User, NoQueryParams, UserPasswordData>(this).push('password-recovery');\n }\n\n}\n\nexport default APIListUsers;\n","import {APIResource} from './APIResource'\nimport {BillingPeriod} from './models/BillingPeriod';\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {APIResourceAccount} from './APIResourceAccount';\n\n\n\n\nexport class APIResourceBillingPeriod extends APIResource<BillingPeriod, NoQueryParams, NoData> {\n\n /**\n * /billing-periods/{id}\n */\n constructor(parent: APIResourceAccount, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('billing-periods', id);\n }\n\n // /billing-periods/{id}/receipt\n receipt() {\n return new APIResource<void, NoQueryParams, NoData>(this).push('receipt').setRequestConfig({\n responseType: 'arraybuffer'\n });\n }\n\n}\n\nexport default APIResourceBillingPeriod\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceBillingPeriod} from './APIResourceBillingPeriod';\nimport {\n Account,\n AccountData,\n AccountSessionUsage,\n AccountSessionUsageSummary,\n AccountUserSessionUsage\n} from './models/Account';\nimport {AccountConcurrencyStatusMap} from './models/AccountConcurrencyStatusMap';\nimport {AccountPreferences} from './models/AccountPreference';\nimport {AccountService, ServicePaymentStatus} from './models/AccountService';\nimport {AccountServicePayment} from './models/AccountServicePayment';\nimport {BillingPeriod, BillingPeriodQueryParams} from './models/BillingPeriod';\nimport {DeviceTimeSummaryQueryParams} from './models/Device';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams, QueryParams, SimpleCollectionResponse} from './models/HTTP';\nimport {User, UserData} from './models/User';\nimport {DeviceTimeQueryParams, UserDeviceTime} from './models/UserDeviceTime';\nimport {UserDeviceTimeSummary} from './models/UserDeviceTimeSummary';\nimport {VisualTestAccess} from './models/VisualTest';\n\n\nexport class APIResourceAccount extends APIResource<Account, QueryParams, AccountData> {\n\n /**\n * /accounts/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('accounts', id);\n }\n\n // /accounts/{id}/concurrency-status\n concurrencyStatus() {\n return new APIResource<AccountConcurrencyStatusMap, NoQueryParams, NoData>(this).push('concurrency-status');\n }\n\n // /accounts/{id}/device-time\n deviceTime() {\n return new APIList<UserDeviceTime, DeviceTimeQueryParams, NoData>(this).push('device-time');\n }\n\n // /accounts/{id}/device-time-summary\n deviceTimeSummary() {\n return new APIList<UserDeviceTimeSummary, DeviceTimeSummaryQueryParams, NoData>(this).push('device-time-summary');\n }\n\n // /accounts/{id}/preferences\n preferences() {\n return new APIResource<AccountPreferences, NoQueryParams, SimpleCollectionResponse<AccountPreferences>>(this).push('preferences');\n }\n\n // /accounts/{id}/users\n users() {\n return new APIList<User, CollectionBasicQueryParams, UserData>(this).push('users');\n }\n\n // /accounts/{accountId}/users/{userId}\n removeUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id);\n }\n\n // /accounts/{accountId}/users/{userId}/disable\n disableUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'disable').post();\n }\n\n // /accounts/{accountId}/users/{userId}/enable\n enableUser(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'enable').post();\n }\n\n // /accounts/{accountId}/users/{userId}/resend-activation\n resendActivation(id: number) {\n return new APIResource<User, NoQueryParams, NoData>(this).push('users', id, 'resend-activation').post();\n }\n\n // /accounts/{accountId}/billing-periods\n billingPeriods() {\n return new APIList<BillingPeriod, CollectionBasicQueryParams, NoData>(this).push('billing-periods');\n }\n\n // /accounts/{accountId}/billing-periods/{id}\n billingPeriod(id: number) {\n return new APIResourceBillingPeriod(this, id);\n }\n\n // /account-services/{id}/billing-period\n serviceBillingPeriod(id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n return new APIResource<AccountServicePayment, BillingPeriodQueryParams, NoData>(this).push('account-services', id, 'billing-period');\n }\n\n // /accounts/{accountId}/visual-test/access\n visualTestAccess() {\n return new APIResource<VisualTestAccess, NoQueryParams, VisualTestAccess>(this).push('visual-tests', 'access');\n }\n\n // /accounts/{accountId}/account-services\n accountServices() {\n return new APIList<AccountService>(this).push('account-services');\n }\n\n // /accounts/{accountId}/account-services/{id}\n accountService(id: number) {\n return new APIList<AccountService>(this).push('account-services', id);\n }\n\n // /accounts/{accountId}/services\n services() {\n return new APIResource<ServicePaymentStatus>(this).push('services');\n }\n\n // /accounts/{accountId}/user-usage-details\n userUsageDetails() {\n return new APIList<AccountUserSessionUsage>(this).push('user-usage-details');\n }\n\n // /accounts/{accountId}/usage-details\n usageDetails() {\n return new APIList<AccountSessionUsage>(this).push('usage-details');\n }\n\n // /accounts/{accountId}/usage-details-summary\n usageDetailsSummary() {\n return new APIResource<AccountSessionUsageSummary>(this).push('usage-details-summary');\n }\n\n}\n\nexport default APIResourceAccount;\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Broker} from './models/Broker';\nimport {NoData, NoQueryParams} from './models/HTTP';\n\nexport class APIResourceBroker extends APIResource {\n\n /**\n * /broker\n */\n constructor(parent: API) {\n\n super(parent);\n this.push('broker');\n }\n\n // /broker/hubs\n hubs() {\n return new APIList<Broker, NoQueryParams, NoData>(this).push('hubs');\n }\n\n}\n\nexport default APIResourceBroker\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {Browser} from './models/Browser';\nimport {Device, DeviceProperiesData, DeviceProperty} from './models/Device';\nimport {CollectionBasicQueryParams} from './models/HTTP';\n\n\nexport class APIResourceDevice extends APIResource<Device> {\n\n /**\n * /devices/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('devices', id);\n }\n\n // /devices/{id}/properties\n properties() {\n return new APIList<DeviceProperty, CollectionBasicQueryParams, DeviceProperiesData>(this).push('properties');\n }\n\n browsers() {\n return new APIList<Browser>(this).push('browsers');\n }\n\n}\n\nexport default APIResourceDevice\n","import {API} from '../API';\nimport {APIList} from './APIList'\nimport {APIResource} from './APIResource'\nimport {DeviceProperty} from './models/Device';\nimport {CollectionBasicQueryParams, NoQueryParams} from './models/HTTP';\nimport {LabelData, LabelGroup} from './models/LabelGroup';\n\nexport class APIResourceLabelGroup extends APIResource<LabelGroup> {\n\n /**\n * /label-groups/{id}\n */\n constructor(parent: API, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('label-groups', id);\n }\n\n // /label-groups/{id}/labels\n labels() {\n return new APIList<DeviceProperty, CollectionBasicQueryParams, LabelData>(this).push('labels');\n }\n\n // /label-groups/{id}/labels/{id}\n label(id: number) {\n return new APIResource<DeviceProperty, NoQueryParams, LabelData>(this).push('labels', id);\n }\n\n}\n\nexport default APIResourceLabelGroup\n","import {API} from '../API';\nimport {APIEntity} from './APIEntity';\nimport {APIList} from './APIList';\nimport {FilesQueryParams} from './class/FilesQueryParams';\nimport {FileData, UploadObj, UserFile} from './models/UserFile';\n\n\nexport class APIListFiles extends APIList<UserFile, FilesQueryParams, FileData | FormData> {\n\n /**\n * /files\n */\n constructor(parent: APIEntity | API) {\n super(parent);\n this.push('files');\n }\n\n /**\n * Simplifies process of uploading\n * /files\n */\n upload(obj: UploadObj): this {\n // For NodeJS\n // @ts-ignore\n if (global.isNodeJs) {\n return this.nodeUpload(obj);\n } else {\n /**\n * Browser\n * @todo\n */\n throw new Error('Not supported yet!');\n }\n }\n\n private nodeUpload(file: UploadObj): this {\n const fs = require('fs');\n const FormData = require('form-data');\n const form = new FormData();\n form.append('file', fs.createReadStream(file.dir + '/' + file.filename), {\n filename: file.filename\n });\n return this.post().headers(form.getHeaders()).data(form);\n }\n\n}\n\nexport default APIListFiles\n","import {APIList} from './APIList'\nimport {APIListNotifications} from './APIListNotifications';\nimport {APIResource} from './APIResource'\n\n\nexport class APIResourceChannel extends APIResource {\n\n /**\n * /users/{id}/notifications/channels/{type}\n */\n constructor(parent: APIListNotifications, type: string) {\n if (type == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('channels', type);\n }\n\n // /channels/{type}/scopes\n scopes() {\n return new APIList(this).push('scopes');\n }\n\n}\n\nexport default APIResourceChannel;\n","import {APIList} from './APIList';\nimport {APIResourceChannel} from './APIResourceChannel';\nimport {APIResourceUser} from './APIResourceUser';\nimport {Enum} from './models/Enum';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './models/HTTP';\nimport {Notification, NotificationsData} from './models/Notification';\n\n\nexport class APIListNotifications extends APIList<Notification, CollectionQueryParams, NotificationsData> {\n\n /**\n * /notifications\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('notifications');\n }\n\n // /notifications/scopes\n scopes() {\n return new APIList<Enum, NoQueryParams, NoData>(this).push('scopes');\n }\n\n // /notifications/channels\n channels() {\n return new APIList<Enum, NoQueryParams, NoData>(this).push('channels');\n }\n\n channel(type: string) {\n return new APIResourceChannel(this, type);\n }\n\n}\n\nexport default APIListNotifications\n","import {APIList} from './APIList';\nimport {APIResource} from './APIResource';\nimport {APIResourceUser} from './APIResourceUser';\nimport {\n RunsConfigParams,\n TestRun,\n TestRunConfig,\n TestRunsQueryParams\n} from './models/TestRun';\n\n\nexport class APIListRuns extends APIList<TestRun, TestRunsQueryParams, TestRunConfig> {\n\n /**\n * /runs\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('runs');\n }\n\n // /runs/config\n config() {\n return new APIResource<TestRunConfig, RunsConfigParams, TestRunConfig>(this).push('config');\n }\n\n}\n\nexport default APIListRuns\n","import {Method} from 'axios';\nimport {APIList} from './APIList';\nimport {APIResourceUser} from './APIResourceUser';\nimport {NoData} from './models/HTTP';\nimport {SmartbearTunnel, TunnelQueryParams} from './models/SmartbearTunnel';\n\n\nexport class APIListSmartbearTunnels extends APIList<SmartbearTunnel, TunnelQueryParams, NoData> {\n\n protected ALLOWED_HTTP_METHODS: Array<Method> = ['GET'];\n\n /**\n * /tunnels\n */\n constructor(parent: APIResourceUser) {\n super(parent);\n this.push('tunnels');\n }\n\n /**\n * Sets tunnel activity parameter\n */\n active(active: boolean): this {\n return this.params({active: active});\n }\n}\n\nexport default APIListSmartbearTunnels;\n","\nimport {APIResource} from './APIResource'\nimport {APIResourceUser} from './APIResourceUser';\nimport {NoData, NoQueryParams} from './models/HTTP';\nimport {Message} from './models/Message';\nimport {Notification, NotificationData} from './models/Notification';\n\nexport class APIResourceNotification extends APIResource<Notification, NoQueryParams, NotificationData> {\n\n /**\n * /notifications/{id}\n */\n constructor(parent: APIResourceUser, id: number) {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n this.push('notifications', id);\n }\n\n // /notifications/{id}/test\n test() {\n return new APIResource<Message, NoQueryParams, NoData>(this).push('test');\n }\n\n}\n\nexport default APIResourceNotification\n","import {API} from '../API';\nimport {APIList} from './APIList';\nimport {APIListFiles} from './APIListFiles';\nimport {APIListNotifications} from './APIListNotifications';\nimport {APIListRuns} from './APIListRuns';\nimport {APIListServices} from './APIListServices';\nimport {APIListSmartbearTunnels} from './APIListSmartbearTunnels';\nimport {APIResource} from './APIResource';\nimport {APIResourceAccessGroup} from './APIResourceAccessGroup';\nimport {APIResourceDeviceGroup} from './APIResourceDeviceGroup';\nimport {APIResourceDeviceSessionStandalone} from './APIResourceDeviceSessionStandalone';\nimport {APIResourceFile} from './APIResourceFile';\nimport {APIResourceNotification} from './APIResourceNotification';\nimport {APIResourceProject} from './APIResourceProject';\nimport {AccessGroup, AccessGroupsData} from './models/AccessGroup';\nimport {DeviceGroup, DeviceGroupData, DeviceGroupIdsData, DeviceGroupWithPublicParams} from './models/DeviceGroup';\nimport {DeviceStatistics} from './models/DeviceStatistics';\nimport {DeviceUsage} from './models/DeviceUsage';\nimport {Framework} from './models/Framework';\nimport {Project, UserProjectData, UserProjectQueryParams} from './models/Project';\nimport {MarkAccountOwnerData, User, UserDeleteData} from './models/User';\nimport {UiPreferencesData, UserPreference, UserPreferenceData} from './models/UserPreference';\nimport {StatisticQueryParams, UserStatistics} from './models/UserStatistics';\nimport {DeviceSession, DeviceSessionData, DeviceSessionQueryParams} from './models/DeviceSession';\nimport {CollectionBasicQueryParams, NoData, NoQueryParams, QueryParams} from './models/HTTP';\nimport {DeviceStatisticQueryParam, DeviceUsageQueryParams} from './models/Device';\n\nexport class APIResourceUser extends APIResource<User> {\n\n /**\n * /users/{id} | /me\n */\n constructor(parent: API, id: number | 'me') {\n if (id == null) {\n throw new Error('Resource ID cannot be null!');\n }\n\n super(parent);\n\n if (id === 'me') {\n this.push('me');\n } else if (typeof id === 'number') {\n this.push('users', id);\n } else {\n throw new TypeError('id is not a number');\n }\n }\n\n // /users/{id}/services\n services() {\n return new APIListServices(this);\n }\n\n // /users/{id}/device-groups\n deviceGroups() {\n return new APIList<DeviceGroup, DeviceGroupWithPublicParams, DeviceGroupIdsData | Omit<DeviceGroupData, 'displayName'>>(this).push('device-groups');\n }\n\n // /users/{id}/device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /users/{id}/device-sessions\n deviceSessions() {\n return new APIList<DeviceSession, DeviceSessionQueryParams, DeviceSessionData>(this).push('device-sessions');\n }\n\n // /users/{id}/device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSessionStandalone(this, id);\n }\n\n // /users/{id}/mark-account-owner\n markAccountOwner() {\n return new APIResource<User, NoQueryParams, MarkAccountOwnerData>(this).push('mark-account-owner').post();\n }\n\n // /users/{id}/projects\n projects() {\n return new APIList<Project, UserProjectQueryParams, UserProjectData>(this).push('projects');\n }\n\n // /users/{id}/projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /users/{id}/files\n files() {\n return new APIListFiles(this);\n }\n\n // /users/{id}/files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /users/{id}/runs\n runs() {\n return new APIListRuns(this);\n }\n\n // /users/{id}/available-frameworks\n availableFrameworks() {\n return new APIList<Framework, CollectionBasicQueryParams, NoData>(this).push('available-frameworks');\n }\n\n /**\n * /users/{id}/reset-api-key\n */\n resetApiKey() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('reset-api-key');\n }\n\n // /users/{id}/restore\n restore() {\n return new APIResource<User, NoQueryParams, NoData>(this).push('restore');\n }\n\n // /users/{id}/feedback\n feedback() {\n return new APIResource<void, QueryParams, FormData>(this).push('feedback');\n }\n\n // /users/{id}/notifications\n notifications() {\n return new APIListNotifications(this);\n }\n\n // /users/{id}/notifications/{id}\n notification(id: number) {\n return new APIResourceNotification(this, id);\n }\n\n // /users/{id}/preferences\n preferences() {\n return new APIResource<UserPreference, NoQueryParams, UserPreferenceData>(this).push('preferences');\n }\n\n // /users/{id}/ui-preferences\n uiPreferences() {\n return new APIResource<string, NoQueryParams, UiPreferencesData>(this).push('ui-preferences');\n }\n\n // /users/{id}/device-usage\n deviceUsage() {\n return new APIList<DeviceUsage, DeviceUsageQueryParams, NoData>(this).push('device-usage');\n }\n\n // /users/{id}/statistics\n statistics() {\n return new APIResource<UserStatistics, StatisticQueryParams, NoData>(this).push('statistics');\n }\n\n // /users/{id}/device-statistics\n deviceStatistics() {\n return new APIList<DeviceStatistics, DeviceStatisticQueryParam, NoData>(this).push('device-statistics');\n }\n\n // /users/{id}/access-groups\n accessGroups() {\n return new APIList<AccessGroup, CollectionBasicQueryParams, AccessGroupsData>(this).push('access-groups');\n }\n\n // /users/{id}/access-groups/{id}\n accessGroup(id: number) {\n return new APIResourceAccessGroup(this, id);\n }\n\n // /users/{id}/tunnels/{id}\n smartbearTunnel(id: number) {\n return new APIResource(this).push('tunnels', id);\n }\n\n // /users/{id}/tunnels\n smartbearTunnels() {\n return new APIListSmartbearTunnels(this);\n }\n\n deleteAccount() {\n return new APIResource<User, void, UserDeleteData>(this).push('delete');\n }\n}\n\nexport default APIResourceUser\n","import {API} from '../API';\nimport {APIResource} from './APIResource'\nimport {NoQueryParams} from './models/HTTP';\nimport {LoginData, User} from './models/User';\n\nexport class APIResourceUserSession extends APIResource {\n\n // /user-sessions\n constructor(parent: API) {\n super(parent);\n this.push('user-sessions');\n }\n\n // /user-sessions/login\n login(data: LoginData) {\n return new APIResource<User, NoQueryParams, LoginData>(this).push('login').post().data(data);\n }\n\n // /user-sessions/logout\n logout() {\n return new APIResource(this).push('logout').post();\n }\n\n // /user-sessions/oauth/authorize/{name}-login\n sso(name: string) {\n return new APIResource(this).push('oauth', 'authorize', name + '-login');\n }\n\n // /user-sessions/oauth/authorize/sbid-login\n sbidCallbackUrl() {\n return new APIResource(this).push('oauth', 'authorize', 'sbid-login').toUrl(true);\n }\n\n}\n\nexport default APIResourceUserSession\n","import {AxiosInstance} from 'axios';\n\n// this version of axios has some issue paired with rollup and is not handling default import correctly\n// as a workaround we need to use require instead of import until migrating to newer axios version.\n//\n// Axios has been updated to version 1.13.2. Due to issues related to how axios exports are handled between CommonJS and ES Module\n// as a workaround we need to use require instead of import in case we want to support both CJS and ESM.\n// For CommonJS output in the consumer project (f.ex cloud-frontend), the workaround may still be needed. For ESM, the default import should work.\nconst axios = require('axios').default;\n// @ts-ignore\nimport {version} from '../package.json';\nimport {APIAdminResource} from './api/APIAdminResource';\nimport {APIAdminResourceCluster} from './api/APIAdminResourceCluster';\nimport {APIList} from './api/APIList';\nimport {APIListDevices} from './api/APIListDevices';\nimport {APIListProperties} from './api/APIListProperties';\nimport {APIListServices} from './api/APIListServices';\nimport {APIListUsers} from './api/APIListUsers';\nimport {APIResource} from './api/APIResource';\nimport {APIResourceAccount} from './api/APIResourceAccount';\nimport {APIResourceBroker} from './api/APIResourceBroker';\nimport {APIResourceDevice} from './api/APIResourceDevice';\nimport {APIResourceDeviceGroup} from './api/APIResourceDeviceGroup';\nimport {APIResourceDeviceSession} from './api/APIResourceDeviceSession';\nimport {APIResourceFile} from './api/APIResourceFile';\nimport {APIResourceLabelGroup} from './api/APIResourceLabelGroup';\nimport {APIResourceProject} from './api/APIResourceProject';\nimport {APIResourceRun} from './api/APIResourceRun';\nimport {APIResourceUser} from './api/APIResourceUser';\nimport {APIResourceUserSession} from './api/APIResourceUserSession';\nimport {Cluster} from './api/models/Cluster';\nimport {CollectionQueryParams, NoData, NoQueryParams} from './api/models/HTTP';\nimport {License} from './api/models/License';\nimport {Project} from './api/models/Project';\nimport {Property} from './api/models/Property';\nimport {UserFile, UserFileData, UserFileParams} from './api/models/UserFile';\nimport {ApiConfig} from './ApiConfig';\nimport './finka';\nimport {LabelGroup} from './api/models/LabelGroup';\n\n// @ts-ignore\nif (globalThis.isNodeJs) {\n // Set User-Agent\n axios.defaults.headers.common['User-Agent'] = `Bitbar Cloud API Client for JavaScript v${version}`;\n}\n\n// Disable max content length\naxios.defaults.maxContentLength = 1073741824; // 1GB\n\n/**\n * API\n * Root for other API resources\n */\nexport class API {\n axios: AxiosInstance;\n\n private axiosConfig: ApiConfig = <ApiConfig>{};\n\n get baseUrl(): string {\n return this.axiosConfig.baseURL;\n }\n\n\n constructor(private config: ApiConfig) {\n if (config == null) {\n throw new Error('config cannot be empty');\n } else if (this.config.cloudUrl == null) {\n throw new TypeError('cloudUrl cannot be empty');\n } else if (typeof this.config.cloudUrl !== 'string') {\n throw new TypeError('cloudUrl must be a string');\n } else if (!/^https?:\\/\\/.{2,}/.test(this.config.cloudUrl)) {\n throw new Error(`cloudUrl doesn't look like a URL`);\n }\n\n // Validate and correct cloudUrl if needed\n this.axiosConfig.baseURL = this.config.cloudUrl.replace(/\\/+$/, '') + '/api'\n\n // Check v2\n this.config.v2 = !!this.config.v2;\n if (this.config.v2) {\n this.axiosConfig.baseURL += '/v2';\n }\n\n // Check if apiKey is set\n if (this.config.apiKey) {\n if (typeof this.config.apiKey !== 'string') {\n throw new TypeError('apiKey must be a string');\n } else if (!/^[A-Za-z0-9]{32}$/.test(this.config.apiKey)) {\n throw new Error('apiKey is in the wrong format');\n }\n\n this.axiosConfig.auth = {\n username: <string>this.config.apiKey,\n password: ''\n };\n }\n\n // With XSRFToken\n this.axiosConfig.withXSRFToken = true;\n // With credentials\n this.axiosConfig.withCredentials = config.withCredentials == null ? false : config.withCredentials;\n\n // Create axios instance\n this.axios = axios.create(this.axiosConfig);\n }\n\n\n // --- Resources starts here --- //\n\n // /account/{id}\n account(id: number) {\n return new APIResourceAccount(this, id);\n }\n\n // /admin\n admin() {\n return new APIAdminResource(this);\n }\n\n // /broker\n broker() {\n return new APIResourceBroker(this);\n }\n\n // /clusters\n clusters() {\n return new APIList<Cluster>(this).push('clusters');\n }\n\n // /clusters/{id}\n cluster(id: number) {\n return new APIAdminResourceCluster(this, id);\n }\n\n // /devices/{id}\n device(id: number) {\n return new APIResourceDevice(this, id);\n }\n\n // /device-groups/{id}\n deviceGroup(id: number) {\n return new APIResourceDeviceGroup(this, id);\n }\n\n // /device-groups\n deviceGroups() {\n return new APIList(this).push('device-groups');\n }\n\n // /devices\n devices() {\n return new APIListDevices(this);\n }\n\n // /device-sessions/{id}\n deviceSession(id: number) {\n return new APIResourceDeviceSession(this, id);\n }\n\n // /device-sessions\n deviceSessions() {\n return new APIList(this).push('device-sessions');\n }\n\n // /device-statistics\n deviceStatistics() {\n return new APIList(this).push('device-statistics');\n }\n\n // /enums\n enums() {\n return new APIResource(this).push('enums');\n }\n\n // /files\n files() {\n return new APIList<UserFile, UserFileParams, UserFileData>(this).push('files');\n }\n\n // /files/{id}\n file(id: number) {\n return new APIResourceFile(this, id);\n }\n\n // /label-groups\n labelGroups() {\n return new APIList<LabelGroup, CollectionQueryParams, NoData>(this).push('label-groups');\n }\n\n // /label-groups/{id}\n labelGroup(id: number) {\n return new APIResourceLabelGroup(this, id);\n }\n\n // /labels\n labels() {\n return new APIList(this).push('labels');\n }\n\n // /licenses\n licenses() {\n return new APIResource(this).push('licenses');\n }\n\n // /license\n license() {\n return new APIResource<License, NoQueryParams, NoData>(this).push('license');\n }\n\n /*\n /me or /admin\n Requires prototype extension covering ACL check\n */\n ma(): APIAdminResource | APIResourceUser {\n throw new Error('Requires prototype extension covering ACL check');\n }\n\n // /me\n me() {\n return this.user('me');\n }\n\n // /projects\n projects() {\n return new APIList<Project>(this).push('projects');\n }\n\n // /projects/{id}\n project(id: number) {\n return new APIResourceProject(this, id);\n }\n\n // /properties\n properties() {\n return new APIListProperties(this);\n }\n\n // /properties/{id}\n property(id: number) {\n return new APIResource<Property>(this).push('properties', id);\n }\n\n // /runs/{id}\n run(id: number) {\n return new APIResourceRun(this, id);\n }\n\n // /services\n services() {\n return new APIListServices(this);\n }\n\n // /user/{id}\n user(id: number | 'me') {\n return new APIResourceUser(this, id);\n }\n\n // /users\n users() {\n return new APIListUsers(this);\n }\n\n // /user-sessions\n userSession() {\n return new APIResourceUserSession(this);\n }\n\n}\n\n\nexport default API;\n","/* istanbul ignore file */\n\nimport {API} from './API';\nimport {FilterBuilder} from './FilterBuilder';\n\nexport {API} from './API';\nexport {FilterBuilder} from './FilterBuilder';\n\n/**\n * Cloud API Client\n */\nexport const CloudAPIClient = {\n API,\n FilterBuilder\n}\n\nexport default CloudAPIClient;\n","export enum AccessGroupScope {\n USER = 'USER',\n ACCOUNT = 'ACCOUNT',\n GLOBAL = 'GLOBAL'\n}\n\nexport type AccessGroup = {\n id: number;\n name: string;\n scope: AccessGroupScope;\n userEmail: string;\n userId: number;\n}\n\nexport type AccessGroupData = Pick<AccessGroup, 'name' | 'scope' | 'userId'>;\n\nexport type AccessGroupsData = Omit<AccessGroupData, 'userId'>;\n","import {CollectionQueryParams} from './HTTP';\n\n\nexport type Account = {\n activeServiceName: string,\n comment: string,\n createTime: number,\n dedicatedDevicesConcurrency: number,\n dedicatedDevicesCount: number,\n dedicatedDevicesRatio: number,\n dedicatedDevicesUsage: number,\n id: number,\n invoiceDetails: Invoice,\n name: string,\n publicDevicesConcurrency: number,\n publicDevicesRatio: number,\n publicDevicesUsage: number,\n slmOrganizationId: string,\n userName: string\n}\n\nexport type Invoice = {\n address: string,\n city: string,\n code: string,\n country: string,\n state: string\n}\n\nexport type AccountData = Partial<{\n comment: string,\n invoiceDetails: Invoice,\n name: string,\n slmOrganizationId: string;\n userName: string\n}>\n\nexport type AccountUsageSummary = {\n sessionsCount: number,\n duration: number,\n deviceModelsCount: number,\n tunnelEnabledCount: number,\n osVersionsCount: number,\n projectsCount: number,\n usersCount: number,\n}\n\nexport type AccountUsage = {\n timestamp: number,\n timestampLabel: string,\n sessionsCount: number,\n automatedConcurrency: number,\n automatedUsage: number,\n dedicatedConcurrency: number,\n dedicatedUsage: number,\n manualConcurrency: number,\n manualUsage: number\n}\n\nexport type AccountUserSessionUsage = {\n devices: number,\n duration: number,\n osVersions: number,\n sessions: number,\n sessionShare: number\n userId: number,\n userName: string,\n}\n\nexport type AccountSessionUsage = {\n createTime: number,\n deviceModelName: string,\n duration: number,\n osVersion: string,\n type: SessionUsageType,\n userId: number,\n userName: string\n}\n\nexport type AccountSessionUsageSummary = {\n totalTime: number,\n usage: Record<SessionUsageType, number>\n}\n\nexport enum SessionUsageType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL = 'MANUAL',\n DEDICATED_AUTOMATIC = 'DEDICATED_AUTOMATIC',\n DEDICATED_MANUAL = 'DEDICATED_MANUAL'\n}\n\nexport enum UtilizationType {\n ALL = 'all',\n PUBLIC = 'public',\n DEDICATED = 'dedicated'\n}\n\nexport enum SessionType {\n ALL = 'all',\n AUTOMATED = 'automated',\n MANUAL = 'manual'\n}\n\nexport enum TimeResolution {\n HOUR = 'hour',\n DAY = 'day'\n}\n\nexport type AccountUsageParams = CollectionQueryParams & {\n grouping?: TimeResolution,\n sessionType?: SessionType,\n utilizationType?: UtilizationType,\n}\n\nexport type AccountUsageSummaryParams = CollectionQueryParams & {\n grouping?: TimeResolution,\n}\n","import {ServiceUnit} from './Service';\n\nexport enum PaymentStatus {\n SUCCEEDED = 'SUCCEEDED',\n FAILED = 'FAILED',\n REDIRECTED = 'REDIRECTED'\n}\n\nexport enum PaymentMethod {\n PAYPAL = 'PAYPAL',\n BRAINTREE = 'BRAINTREE',\n STRIPE = 'STRIPE',\n INVOICE = 'INVOICE',\n PROMOTION = 'PROMOTION',\n AWS = 'AWS'\n}\n\nexport enum DeactivateReason {\n INITIAL_FAILURE = 'INITIAL_FAILURE',\n SCA_FAILURE = 'SCA_FAILURE',\n CHARGE_FAILURE = 'CHARGE_FAILURE',\n CANCEL = 'CANCEL',\n SUSPENDED = 'SUSPENDED',\n ANOTHER_PURCHASE = 'ANOTHER_PURCHASE'\n}\n\nexport type ServicePaymentStatus = {\n accountService: AccountService;\n message: string;\n redirectUrl: string;\n status: PaymentStatus;\n}\n\nexport type AccountService = {\n accountId: number;\n accountName: string;\n activatedById: number;\n activatedByName: string;\n active: boolean;\n braintreeId: string;\n createTime: number;\n deactivateReason: DeactivateReason;\n deactivatedById: number;\n deactivatedByName: string;\n endTime: number;\n finished: boolean;\n id: number;\n lastPaymentTime: number;\n paymentMethod: PaymentMethod;\n price: number;\n serviceCount: number;\n serviceId: number;\n serviceName: string;\n slmLicenseId: string;\n startTime: number;\n subscriptionManagementURL: string;\n unit: ServiceUnit;\n unitCount: number;\n vatRate: number;\n}\n\nexport type AccountServiceData = Pick<AccountService, 'endTime' | 'serviceId' | 'slmLicenseId'> & {count: number};\n","import {DevicesQueryParams, Platform, SoftwareVersion} from './Device';\nimport {OsType} from './Enum';\nimport {CollectionQueryParams} from './HTTP';\nimport {Cluster} from './Cluster';\n\n\nexport enum InitStep {\n SKIP = 'SKIP',\n REBOOT = 'REBOOT',\n REBOOT_WITH_UNLOCK = 'REBOOT_WITH_UNLOCK',\n UNLOCK_ONLY = 'UNLOCK_ONLY'\n}\n\nexport enum DeviceState {\n OFFLINE_CLEANING = 'OFFLINE_CLEANING',\n OFFLINE_DIRTY = 'OFFLINE_DIRTY',\n OFFLINE_FREE = 'OFFLINE_FREE',\n OFFLINE_TESTING = 'OFFLINE_TESTING',\n ONLINE_CLEANING = 'ONLINE_CLEANING',\n ONLINE_DIRTY = 'ONLINE_DIRTY',\n ONLINE_FREE = 'ONLINE_FREE',\n ONLINE_TESTING = 'ONLINE_TESTING'\n}\n\nexport type AdminDevice = {\n accountId: number | null;\n accountName: string | null;\n cluster: Cluster;\n comment: string;\n dedicationEndTime: number | null;\n deviceModelId: number;\n deviceModelName: string;\n enabled: boolean;\n fingerprint: string;\n forceRestore: boolean;\n id: number;\n initStep: InitStep;\n ipAddress: string;\n lastOnlineTime: number;\n location: string;\n locked: boolean;\n manufacturer: string;\n name: string;\n osType: OsType;\n ownerHasAccountService: boolean;\n platform: Platform;\n serialId: string;\n softwareVersion: SoftwareVersion;\n state: DeviceState;\n stateChangeTime: number;\n stateTime: number;\n testTimeLimit: number;\n unlockGesture: string;\n}\n\nexport type AdminDevicesQueryParams = Pick<DevicesQueryParams, 'withDisabled'> & CollectionQueryParams;\n\nexport type AdminDeviceData = Pick<AdminDevice, 'accountId' | 'enabled' | 'initStep' | 'ipAddress' | 'name' |\n 'serialId' | 'testTimeLimit' | 'unlockGesture' | 'comment' | 'forceRestore' | 'dedicationEndTime'> & {\n apiLevel: number;\n releaseVersion: string;\n};\n","import {CollectionQueryParams} from './HTTP';\nimport {DeviceSessionState} from './DeviceSession';\nimport {OsType} from './Enum';\n\nexport enum FrameworkType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL_APP = 'MANUAL_APP',\n MANUAL_WEB = 'MANUAL_WEB',\n REMOTE = 'REMOTE'\n}\n\nexport type AdminFrameworkStatistics = {\n cloudName: string;\n count: number;\n day: number;\n deviceModelId: number;\n deviceModelName: string;\n frameworkId: number;\n frameworkName: string;\n id: number;\n osType: OsType;\n releaseVersion: string;\n state: DeviceSessionState;\n type: FrameworkType;\n userEmail: string;\n userId: number;\n}\n\nexport interface AdminStatisticsParams extends CollectionQueryParams {\n days: number;\n}\n","import {PaymentMethod} from './AccountService';\nimport {DeviceSessionType} from './DeviceSession';\nimport {OsType} from './Enum';\nimport {QueryParams} from './HTTP';\n\nexport enum BillingType {\n BUY = 'BUY',\n CHARGE = 'CHARGE',\n CANCEL = 'CANCEL'\n}\n\nexport type BillingPeriod = {\n accountId: number;\n accountName: string;\n accountServiceId: number;\n additionalHours: number;\n additionalHoursPrice: number;\n apiBillingPeriodType: BillingType;\n createTime: number;\n endBillingPeriod: number;\n id: number;\n lastPaymentDate: number;\n paid: boolean;\n paymentMethod: PaymentMethod;\n plan: string;\n servicePrice: number;\n startBillingPeriod: number;\n subscriptionEnd: number;\n subscriptionStart: number;\n totalPrice: number;\n usages: Array<BillingPeriodUsage>;\n}\n\nexport type BillingPeriodUsage = {\n duration: number;\n id: number;\n osType: OsType;\n type: DeviceSessionType;\n}\n\nexport interface BillingPeriodQueryParams extends QueryParams {\n onDate: number;\n}\n","export enum BrokerType {\n MOBILE = 'MOBILE',\n DESKTOP = 'DESKTOP'\n}\n\nexport type Broker = {\n id: number;\n location: string;\n type: BrokerType;\n url: string;\n}\n","\nimport {AdminDevice} from './AdminDevice';\nimport {CollectionResponse, QueryParams} from './HTTP';\n\nexport type Cluster = {\n devices: CollectionResponse<AdminDevice>;\n enabled: boolean;\n id: number;\n ipAddress: string;\n jenkinsUrl: string;\n jenkinsVersion: string;\n location: string;\n name: string;\n pluginVersion: string;\n region: string;\n state: ClusterState;\n stateChangeTime: number;\n stateTime: number;\n type: ClusterType;\n url: string;\n}\n\nexport enum ClusterState {\n 'OFFLINE',\n ONLINE = 'ONLINE',\n RESTARTING = 'RESTARTING',\n QUIET_DOWN = 'QUIET_DOWN',\n MAINTENANCE = 'MAINTENANCE'\n}\n\nexport enum ClusterType {\n BARE_METAL = 'BARE_METAL',\n EC2 = 'EC2',\n VM = 'VM'\n}\n\nexport interface ClusterParams extends QueryParams {\n withDevices: boolean;\n}\n\nexport type ClusterData = Pick<Cluster, 'enabled' | 'url'> & {\n quietDown: boolean;\n restart: boolean;\n turnMaintenance: boolean;\n}\n","import {Browser} from './Browser';\nimport {OsType} from './Enum';\nimport {CollectionBasicQueryParams, CollectionQueryParams, CollectionResponse, QueryParams} from './HTTP';\nimport {TestRunsQueryParams} from './TestRun';\n\n\nexport enum DeviceGroupOrigin {\n STATIC = 'STATIC',\n DYNAMIC = 'DYNAMIC',\n HYBRID = 'HYBRID'\n}\n\nexport enum Platform {\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n WINDOWS = 'WINDOWS',\n MAC = 'MAC',\n LINUX = 'LINUX',\n UNDEFINED = 'UNDEFINED'\n}\n\nexport enum SupportedCreators {\n MANUAL = 'MANUAL',\n ROBOT = 'ROBOT',\n AUTOMATIC = 'AUTOMATIC'\n}\n\nexport enum PoolSize {\n XL= 'XL',\n L = 'L',\n M = 'M',\n S = 'S'\n}\n\nexport enum Code {\n HIGH = 'HIGH',\n MODERATE = 'MODERATE',\n LOW = 'LOW',\n NONE = 'NONE',\n}\n\nexport type DeviceAvailability = {\n poolSize: PoolSize,\n code: Code\n}\n\nexport type DeviceProperty = {\n displayName: string;\n id: number;\n labelGroupName: string;\n name: string;\n propertyGroupId: number;\n propertyGroupName: string;\n}\n\nexport type SoftwareVersion = {\n apiLevel: number;\n id: number;\n releaseVersion: string;\n}\n\nexport enum LockReason {\n TESTING = 'TESTING',\n CLEANING = 'CLEANING',\n NOT_OPERATIONAL = 'NOT_OPERATIONAL'\n}\n\nexport type Device = {\n accountId: number;\n accountName: string;\n available: boolean;\n availability: DeviceAvailability;\n browsers: CollectionResponse<Browser>;\n creditsPrice: number;\n deviceGroupOrigin: DeviceGroupOrigin;\n displayName: string;\n enabled: boolean;\n frame100Url: string;\n frame160Url: string;\n frame400Url: string;\n frame80Url: string;\n frameExtraWidth: number;\n id: number;\n imageCornerRadius: number;\n imageHeight: number;\n imageLeft: number;\n imagePrefix: string;\n imageTop: number;\n imageWidth: number;\n locked: boolean;\n lockReason: LockReason;\n manufacturer: string;\n online: boolean;\n osType: OsType;\n platform: Platform;\n properties: CollectionResponse<DeviceProperty>;\n softwareVersion: SoftwareVersion;\n supportedCreators: Array<SupportedCreators>;\n}\n\nexport type DeviceCleanupConfiguration = {\n content: string;\n createTime: number;\n createdByEmail: string;\n createdById: number;\n description: string;\n name: string;\n enabled: boolean;\n global: boolean;\n example: true;\n id: number;\n lastModificationTime: number;\n osType: OsType;\n}\n\nexport type DeviceCleanupConfigurationData = {\n deviceCleanupConfigurationId: number;\n}\n\nexport type DeviceLabelData = {\n labelId: number;\n}\n\nexport interface DeviceProperiesData extends QueryParams {\n labelId: number;\n}\n\nexport interface CleanupConfigurationSpecificData extends QueryParams {\n serialId: string;\n}\n\nexport interface DeviceTimeSummaryQueryParams extends CollectionBasicQueryParams {\n forWholeAccount: boolean;\n}\nexport interface DeviceUsageQueryParams extends TestRunsQueryParams {\n startTime: number;\n}\n\nexport interface DeviceStatisticQueryParam extends TestRunsQueryParams {\n mode: string;\n}\n\nexport interface DevicesQueryParams extends CollectionQueryParams {\n labelIds: Array<number>;\n liveTestingOnly: boolean;\n withBrowsers: boolean;\n withDedicated: boolean;\n withDisabled: boolean;\n withProperties: boolean;\n withSupportedCreators: boolean;\n}\n","export enum CriterionField {\n NAME = 'NAME',\n FINGERPRINT = 'FINGERPRINT',\n SERIAL_ID = 'SERIAL_ID',\n UNLOCK_GESTURE = 'UNLOCK_GESTURE',\n SOFTWARE_VERSION = 'SOFTWARE_VERSION',\n INIT_STEP = 'INIT_STEP',\n ACCOUNT = 'ACCOUNT',\n BROWSERS = 'BROWSERS'\n}\n\nexport type DeviceModelCriterion = {\n createTime: number;\n field: CriterionField;\n id: number;\n labelGroupDisplayName: string;\n labelGroupId: number;\n labelGroupName: string;\n}\n\nexport type DeviceModelCriterionData = Pick<DeviceModelCriterion, 'field' | 'labelGroupId'>;\n","export enum RetentionStrategy {\n CLUSTER_ON_OFF = 'CLUSTER_ON_OFF',\n MIN_FREE_MAX_TOTAL = 'MIN_FREE_MAX_TOTAL',\n POOL_MANAGER_AWARE = 'POOL_MANAGER_AWARE'\n}\n\nexport type DeviceModelPool = {\n createTime: number;\n enabled: boolean;\n id: number;\n location: string;\n maxTotal: number;\n minAvailable: number;\n name: string;\n numberOfBrowsers: number;\n osVersion: string;\n retentionStrategy: RetentionStrategy;\n running: number;\n}\n\nexport type DeviceModelPoolData = Pick<DeviceModelPool, 'maxTotal' | 'minAvailable'>;\n","export enum ProblemType {\n CLEANING = 'CLEANING',\n DIRTY = 'DIRTY',\n OFFLINE = 'OFFLINE',\n LOW_BATTERY = 'LOW_BATTERY',\n HIGH_FAIL_RATE = 'HIGH_FAIL_RATE',\n NO_INTERNET_CONNECTION = 'NO_INTERNET_CONNECTION'\n}\n\nexport type DeviceProblem = {\n clusterId: number;\n clusterName: string;\n deviceId: number;\n deviceModelId: number;\n deviceModelName: string;\n deviceName: string;\n id: number;\n problems: Array<DeviceProblemPair>;\n location: string;\n}\n\nexport type DeviceProblemPair = {\n id: number;\n type: ProblemType;\n value: any;\n}\n","import {Device} from './Device';\nimport {CollectionBasicQueryParams} from './HTTP';\n\nexport type TunnelSettings = {\n domain: string;\n email: string;\n}\n\nexport enum DeviceSessionType {\n AUTOMATIC = 'AUTOMATIC',\n MANUAL_APP = 'MANUAL_APP',\n MANUAL_WEB = 'MANUAL_WEB'\n}\n\nexport enum RetryState {\n NONE = 'NONE',\n MANUAL = 'MANUAL',\n AUTO = 'AUTO'\n}\n\nexport enum DeviceSessionState {\n ABORTED = 'ABORTED',\n EXCLUDED = 'EXCLUDED',\n FAILED = 'FAILED',\n RUNNING = 'RUNNING',\n SUCCEEDED = 'SUCCEEDED',\n TIMEOUT = 'TIMEOUT',\n WAITING = 'WAITING',\n WARNING = 'WARNING'\n}\n\nexport enum DeviceSessionStepType {\n WAITING = 'WAITING',\n PREPARING = 'PREPARING',\n UNINSTALL = 'UNINSTALL',\n INSTALL = 'INSTALL',\n RUNNING = 'RUNNING',\n SENDING_RESULTS = 'SENDING_RESULTS',\n PROCESSING_RESULTS = 'PROCESSING_RESULTS'\n}\n\nexport type DeviceSessionConfig = {\n adbVersion: string;\n browserName: string;\n browserVersion: string;\n deviceModelId: number;\n id: number;\n screenResolution: string;\n tunnelSettings: TunnelSettings;\n type: DeviceSessionConfig;\n url: string;\n}\n\nexport type DeviceSession = {\n abortTime: number;\n accountId: number;\n autoRetriesLeftCount: number;\n biometricInstrumentation: boolean;\n config: DeviceSessionConfig;\n createTime: number;\n clientSideId: string;\n device: Device;\n deviceInstanceId: number;\n deviceRunId: number;\n duration: number;\n endTime: number;\n excludeReason: string;\n externalId: string;\n id: number;\n installTime: number;\n name: string;\n projectId: number;\n projectName: string;\n retryable: boolean;\n retryState: RetryState;\n startTime: number;\n state: DeviceSessionState;\n successRatio: number;\n testCaseAllCount: number;\n testCaseFailedCount: number;\n testCasePassedCount: number;\n testCaseSkippedCount: number;\n testCaseSuccessCount: number;\n testRunId: number;\n testRunName: string;\n timeLimit: number;\n type: DeviceSessionType;\n uiLink: string;\n userEmail: string;\n userId: number;\n}\n\nexport type DeviceSessionCommand = {\n duration: number;\n httpMethod: string;\n id: number;\n requestBody: string;\n responseBody: string;\n responseCode: number;\n timestamp: number;\n uri: string;\n}\n\nexport type DeviceSessionStep = {\n deviceSessionId: number;\n excludeReason: string;\n failReason: string;\n finishTimeMS: number;\n id: number;\n startTimeMS: number;\n type: DeviceSessionStepType;\n}\n\nexport type DeviceSessionConnection = {\n createTime: number;\n deviceSessionId: number;\n endTime: number;\n externalId: string;\n host: string;\n id: number;\n password: string;\n path: string;\n port: number;\n type: string;\n urlSchema: string;\n}\n\nexport type DeviceSessionData = Omit<DeviceSessionConfig, 'adbVersion' | 'id' | 'tunnelSettings' | 'type'> & {configuration: DeviceSessionConfig};\n\nexport interface DeviceSessionQueryParams extends CollectionBasicQueryParams {\n withProperties: boolean;\n}\n\nexport interface SessionQueryParams extends CollectionBasicQueryParams {\n projectId: number;\n testRunId: number;\n}\n\nexport interface SessionRunStepQueryParams extends CollectionBasicQueryParams {\n runId: number;\n}\n\nexport interface SessionStepQueryParams extends SessionRunStepQueryParams {\n projectId: number;\n}\n\nexport enum SessionReleaseReason {\n INACTIVITY = 'INACTIVITY',\n TIMEOUT = 'TIMEOUT',\n USER_ACTION = 'USER_ACTION',\n CHANGE_DEVICE = 'CHANGE_DEVICE',\n WEBSOCKET_CLOSED = 'WEBSOCKET_CLOSED'\n}\n\nexport type DeviceSessionRelease = {\n reason: SessionReleaseReason;\n}\n","export enum OsType {\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n DESKTOP = 'DESKTOP',\n UNDEFINED = 'UNDEFINED'\n}\n\nexport type Enum = {\n id: number;\n value: string;\n}\n","export enum LicenseStatus {\n ACTIVE = 'ACTIVE',\n EXPIRED = 'EXPIRED',\n INACTIVE = 'INACTIVE',\n CLOSED = 'CLOSED'\n}\n\nexport type BaseLicense = {\n enabled: boolean;\n};\n\nexport type FeatureLicense = {\n deviceLimit: number;\n deviceLimited: boolean;\n projectLimit: number;\n projectLimited: boolean;\n};\n\nexport type AndroidLicense = BaseLicense & FeatureLicense & {\n cts: CTSLicense;\n uiAutomator: UIAutomatorLicense;\n};\n\nexport type BuildLicense = BaseLicense & {\n limit: number;\n limited: boolean;\n};\n\nexport type DesktopLicense = BaseLicense & FeatureLicense;\n\nexport type GlobalLicense = FeatureLicense;\n\nexport type InspectorLicense = BaseLicense;\n\nexport type IOSLicense = BaseLicense & FeatureLicense;\n\nexport type RecorderLicense = BaseLicense & {\n limit: number;\n limited: boolean;\n};\n\nexport type ServerLicense = BaseLicense & {\n androidEnabled: boolean;\n iosEnabled: boolean;\n};\n\nexport type CTSLicense = BaseLicense;\n\nexport type UIAutomatorLicense = BaseLicense;\n\nexport type License = {\n activateTime: number;\n android: AndroidLicense;\n build: BuildLicense;\n closeTime: number;\n desktop: DesktopLicense;\n expireTime: number;\n global: GlobalLicense;\n id: number;\n inspector: InspectorLicense;\n ios: IOSLicense;\n privateInstance: boolean;\n recorder: RecorderLicense;\n server: ServerLicense;\n status: LicenseStatus;\n userEmail: string;\n userId: number;\n}\n\nexport type LicenseData = Pick<License, 'privateInstance' | 'userId'> & {\n androidDeviceLimit: number;\n androidEnabled: boolean;\n androidProjectLimit: number;\n buildEnabled: boolean;\n buildLimit: number;\n desktopDeviceLimit: number;\n desktopEnabled: boolean;\n desktopProjectLimit: number;\n globalDeviceLimit: number;\n globalProjectLimit: number;\n inspectorEnabled: boolean;\n iosDeviceLimit: number;\n iosEnabled: boolean;\n iosProjectLimit: number;\n privateInstance: boolean;\n unit: string;\n unitCount: number;\n}\n","import {QueryParams} from './HTTP';\n\n\nexport enum NotificationChannel {\n SLACK = 'SLACK',\n EMAIL = 'EMAIL',\n WEBHOOK = 'WEBHOOK'\n}\n\nexport enum NotificationScope {\n ALL = 'ALL',\n TEST_RUN = 'TEST_RUN',\n TEST_RUN_FAILURE = 'TEST_RUN_FAILURE',\n TEST_RUN_SUCCEEDED = 'TEST_RUN_SUCCEEDED',\n SYSTEM = 'SYSTEM',\n CHECK = 'CHECK',\n}\n\nexport type Notification = {\n channel: NotificationChannel;\n destination: string;\n id: number;\n projectId?: number;\n projectName?: string;\n scope: NotificationScope;\n userEmail: string;\n userId: number;\n}\n\nexport interface NotificationData extends QueryParams {\n scope: NotificationScope;\n}\n\nexport type NotificationsData = Pick<Notification, 'channel' | 'destination' | 'projectId' | 'scope'>;\n","import {OsType} from './Enum';\nimport {TestRunConfig, TestRunsQueryParams} from './TestRun';\n\nexport enum ArchivingStrategy {\n NEVER = 'NEVER',\n DAYS = 'DAYS',\n RUNS = 'RUNS'\n}\n\nexport type Project = {\n archiveTime: number;\n archivingItemCount: number;\n archivingStrategy: ArchivingStrategy;\n common: boolean;\n createTime: number;\n description: string;\n id: number;\n name: string;\n osType: OsType;\n readOnly: boolean;\n rowIndex: number;\n shared: boolean;\n sharedWithCaller: boolean;\n successRatio: number;\n testRunConfig: TestRunConfig;\n userEmail: string;\n userId: number;\n}\n\nexport type UserProjectData = Pick<Project, 'name'>;\n\nexport interface UserProjectQueryParams extends TestRunsQueryParams {\n showStatistics: boolean;\n}\n","import {CollectionBasicQueryParams} from './HTTP';\n\nexport enum ScreenshotType {\n LANDSCAPE = 'LANDSCAPE',\n PORTRAIT = 'PORTRAIT'\n}\n\nexport type Screenshot = {\n fail: boolean;\n id: number;\n originalName: string;\n takeTimestamp: number;\n type: ScreenshotType;\n}\n\nexport interface ScreenshotQueryParams extends CollectionBasicQueryParams {\n name: string;\n}\n","import {PaymentMethod} from './AccountService';\nimport {CollectionQueryParams} from './HTTP';\nimport {Role} from './Role';\n\n\nexport type Service = {\n activateTime: number;\n activated: boolean;\n archiveTime: number;\n centPrice: number;\n commonId: string;\n customPlan: boolean;\n defaultConcurrences: Array<number>;\n description: string;\n externalId: string;\n features: string;\n id: number;\n name: string;\n priceString: string;\n roles: Array<Role>;\n unit: ServiceUnit;\n}\n\nexport enum ServiceUnit {\n DAY = 'DAY',\n HOUR = 'HOUR',\n MONTH = 'MONTH',\n PROJECT = 'PROJECT',\n RUN = 'RUN',\n YEAR = 'YEAR'\n}\n\nexport interface AdminServicesParams extends CollectionQueryParams {\n activeOnly: boolean;\n inUse: boolean;\n notArchive: boolean;\n}\n\nexport type ServiceActivateData = {\n activateTime: number;\n}\n\nexport interface ServiceData {\n address?: string;\n cardNumber?: string;\n city?: string;\n count?: number;\n country?: string;\n cvv?: string;\n email?: string;\n expirationDate?: string;\n firstName?: string;\n lastName?: string;\n organization?: string;\n paymentMethod: PaymentMethod;\n phone?: string;\n serviceId: number;\n state?: string;\n stripeToken?: string;\n vatId?: string;\n zip?: string;\n}\n","import {QueryParams} from './HTTP';\n\n\nexport enum SharedResourceType {\n DEVICE_GROUP = 'DEVICE_GROUP',\n FILE = 'FILE',\n PROJECT = 'PROJECT',\n}\n\nexport type SharedResource = {\n id: number;\n name: string;\n resourceId: number;\n type: SharedResourceType;\n}\n\nexport interface ShareWithGroup extends QueryParams {\n accessGroupId: number;\n}\n\nexport interface ShareWithEmail extends QueryParams {\n email: string;\n}\n\nexport type ShareData = ShareWithGroup | ShareWithEmail;\n","import {Method} from 'axios';\nimport {CollectionResponse} from './HTTP';\n\n\nexport enum TestResult {\n PASSED = 'PASSED',\n FAILED = 'FAILED',\n SKIPPED = 'SKIPPED',\n NOT_AVAILABLE = 'NOT_AVAILABLE'\n}\n\nexport type TestCaseRun = {\n className: string;\n createTime: number;\n duration: number;\n errorMessage: string;\n id: number;\n methodName: string;\n result: TestResult;\n stacktrace: string;\n steps: CollectionResponse<TestCaseRunStep>;\n suiteName: string;\n}\n\nexport type TestCaseRunStep = {\n description: string;\n duration: number;\n httpMethod: Uppercase<Method>;\n id: number;\n requestBody: string;\n responseBody: string;\n responseCode: number;\n timestamp: number;\n uri: string;\n}\n","import {Device} from './Device';\nimport {TunnelSettings} from './DeviceSession';\nimport {OsType} from './Enum';\nimport {CollectionBasicQueryParams, QueryParams} from './HTTP';\nimport {UserFile} from './UserFile';\nimport {DeviceGroup} from './DeviceGroup';\nimport {Framework} from './Framework';\n\n\nexport enum LimitationType {\n PACKAGE = 'PACKAGE',\n CLASS = 'CLASS'\n}\n\nexport enum TestScheduler {\n PARALLEL = 'PARALLEL',\n SERIAL = 'SERIAL',\n SINGLE = 'SINGLE',\n ALL_INSTANCES = 'ALL_INSTANCES'\n}\n\nexport enum TestState {\n WAITING = 'WAITING',\n RUNNING = 'RUNNING',\n FINISHED = 'FINISHED'\n}\n\n\nexport type TestRun = {\n abortedDeviceCount: number;\n config: TestRunConfig;\n createTime: number;\n deviceCount: number;\n displayName: string;\n errorsDeviceCount: number;\n excludedDeviceCount: number;\n executedTestCaseCount: number;\n executionRatio: number;\n failedTestCaseCount: number;\n finishedDeviceCount: number;\n frameworkId: number;\n frameworkName: string;\n id: number;\n logsFileId: number;\n message: string;\n 'number': number;\n projectId: number;\n projectName: string;\n retryable: boolean;\n rowIndex: number;\n runningDeviceCount: number;\n screenshotsFileId: number;\n startTime: number;\n startedByDisplayName: string;\n startedById: number;\n state: TestState;\n succeededDeviceCount: number;\n successRatio: number;\n successfulTestCaseCount: number;\n testCaseCount: number;\n timeoutedDeviceCount: number;\n uiLink: string;\n userId: number;\n waitingDeviceCount: number;\n warningDeviceCount: number;\n}\n\nexport enum TestRunConfigFileAction {\n COPY_TO_DEVICE = 'COPY_TO_DEVICE',\n INSTALL = 'INSTALL',\n RUN_TEST = 'RUN_TEST',\n}\n\nexport type TestRunConfigFile = {\n action: TestRunConfigFileAction;\n availableActions: Array<TestRunConfigFileAction>;\n file: UserFile;\n id: number;\n};\n\nexport type TestRunParameter = {\n name?: string;\n key: string;\n value: string;\n label?: string;\n}\n\nexport type TRCDefaultSettings = {\n deviceLanguageCode: string;\n disableResigning: boolean;\n hookURL: string;\n instrumentationRunner: string;\n limitationType: string;\n limitationValue: string;\n scheduler: string;\n screenshotDir: string;\n withAnnotation: string;\n withoutAnnotation: string;\n timeout: string;\n projectName: string;\n testRunName: string;\n testRunParameters?: TestRunParameter[];\n biometricInstrumentation: boolean;\n}\n\nexport type TestRunConfig = TRCDefaultSettings & {\n appCrawlerRun: boolean;\n appiumBrokerAddress: string;\n appiumBrokerQueueName: string;\n applicationPassword: string;\n applicationUsername: string;\n availableDeviceGroups: DeviceGroup[];\n availableDevices: Array<Device>;\n availableFrameworks: Framework[];\n availableOsTypes: Array<OsType>;\n clientSideTestConfig: any;\n computedDevices: Array<number>;\n creditsPrice: number;\n deviceGroupId?: number;\n deviceIds: any;\n deviceNamePattern: string;\n files: Array<TestRunConfigFile> | null;\n frameworkId: number;\n id: number;\n loadedPrevious: boolean;\n maxAutoRetriesCount: number;\n maxTestTimeout: any;\n maxWaitTime: number;\n osType: OsType;\n projectId: number;\n resignFiles: boolean;\n runAvailable: boolean;\n status: string;\n statusCode: number;\n testRunId: number;\n testRunNameGrouping: string;\n tunnelSettings: TunnelSettings;\n useSamples: boolean;\n usedDeviceGroupId: number;\n usedDeviceGroupName: string;\n videoRecordingEnabled: boolean;\n withAnnotation: string;\n}\n\nexport interface TestRunData extends QueryParams {\n displayName: string;\n}\n\nexport interface RunData extends TestRunData {\n projectId: number;\n}\n\nexport interface RunQueryParam extends QueryParams {\n projectId: number;\n}\n\n\nexport type TestRunsIncludes = {\n includeDeviceGroups: boolean;\n includeDevices: boolean;\n includeFrameworks: boolean;\n}\n\nexport type RunsConfigParams = TestRunsIncludes & QueryParams;\n\n// for users/{userid}/runs\nexport interface TestRunsQueryParams extends CollectionBasicQueryParams {\n forWholeAccount: boolean;\n skipCommonProject: boolean;\n skipShared: boolean;\n}\n","import {CollectionQueryParams, QueryParams} from './HTTP';\nimport {Role} from './Role';\n\n\nexport enum UserStatus {\n INACTIVE = 'INACTIVE',\n DISABLED = 'DISABLED',\n ENABLED = 'ENABLED'\n}\n\nexport type User = {\n accountId: number;\n accountName: string;\n userAccountName: string;\n accountServiceIds: Array<number>;\n address: string;\n apiKey: string;\n city: string;\n code: string;\n country: string;\n createTime: number;\n createdByEmail: string;\n createdById: number;\n deleteTime: number;\n email: string;\n enabled: boolean;\n firstName: string;\n id: number;\n isAccountOwner: boolean;\n lastLaunchedTestTime: number;\n lastLoginTime: number;\n lastName: string;\n organization: string;\n phone: string;\n registrationIP: string;\n roles: Array<Role>;\n serviceIds: Array<number>;\n state: string;\n status: UserStatus;\n timeZone: string;\n}\n\nexport type UserData = Pick<User, 'email'>;\n\nexport interface UserParams extends CollectionQueryParams {\n WITH_ADDRESS: boolean;\n WITH_USER_INFO: boolean;\n onlyMainUsers: boolean;\n onlyWithDisabledServices: boolean;\n withRole: string;\n withRoles: boolean;\n}\n\nexport type UserUpdateAccount = Pick<User, 'accountId'>;\n\nexport type UserDeleteData = {\n password: string;\n}\n\nexport interface LoginData {\n username: string;\n password: string;\n}\n\n\nexport type UserPasswordData = {\n key: string;\n password: string;\n};\nexport type UserActivateData = {\n zip: string;\n} & UserPasswordData\n & Pick<User, 'address' | 'city' | 'country' | 'email' | 'firstName' | 'lastName' | 'organization' | 'phone' | 'state'>;\n\nexport interface UserRecoveryQueryParams extends QueryParams {\n recoveryKey: string;\n}\n\nexport type MarkAccountOwnerData = {\n value: boolean;\n}\n","import {CollectionQueryParams, QueryParams} from './HTTP';\n\n\nexport enum FileDirection {\n INPUT = 'INPUT',\n OUTPUT = 'OUTPUT'\n}\n\nexport enum FileInputType {\n APPLICATION = 'APPLICATION',\n TEST = 'TEST',\n DATA = 'DATA'\n}\n\nexport enum FileState {\n PREPARING = 'PREPARING',\n READY = 'READY'\n}\n\nexport type FileProperty = {\n id: number;\n key: string;\n value: string;\n};\n\nexport type UserFileTag = {\n id: number;\n name: string;\n}\n\nexport type UserFile = {\n createTime: number;\n directUrl: string;\n direction: FileDirection;\n duplicate: boolean;\n fileProperties: Array<FileProperty>;\n iconDirectUrl: string;\n id: number;\n inputType: FileInputType;\n mimetype: string;\n name: string;\n shared: boolean;\n size: number;\n state: FileState;\n userEmail: string;\n userId: number;\n};\n\nexport interface UserFileParams extends CollectionQueryParams {\n tag: Array<string>;\n}\n\nexport type UserFileData = {\n file: FormData;\n global: boolean;\n}\n\nexport type BuildLogsData = {\n deviceRunIds: Array<number>;\n projectId: number;\n userId: number;\n}\n\nexport type BuildLogsParams = BuildLogsData;\n\nexport interface FileSizeData extends QueryParams {\n height: number;\n width: number;\n}\n\nexport type UploadObj = {\n dir: string;\n filename: string;\n}\n\nexport interface FileData {\n file: Blob;\n global: boolean;\n}\n","export enum VisualTestImageType {\n FULL_PAGE = 'FULL_PAGE',\n VIEWPORT = 'VIEWPORT',\n ELEMENT_SCREENSHOT = 'ELEMENT_SCREENSHOT'\n}\n\nexport type VisualTestAccess = {\n enabled: boolean;\n apiKey: string | null;\n}\n\nexport type VisualTest = {\n comparisonStatus:\tstring;\n appUrl:\tstring;\n createdAt:\tstring;\n id: number;\n imageName:\tstring;\n imageThumbnailUrl:\tstring;\n imageType:\tVisualTestImageType;\n imageUrl:\tstring;\n sessionId:\tstring;\n testUrl:\tstring;\n}\n"],"names":["Filter","constructor","name","value","operand","this","finka","FilterBuilder","filters","gt","add","lt","after","afterorequal","before","beforeorequal","on","eq","contains","like","notlike","isnull","undefined","isnotnull","notin","raw","filter","Array","wrap","isFilterPart","SyntaxError","push","str","test","toString","parts","part","val","length","join","checkNull","_value","i","v","Date","getTime","isNull","item","endsWith","ALLOWED_HTTP_METHODS","APIOrder","APIEntity","parent","stack","requestConfig","root","isArray","setRequestConfig","abortController","AbortController","abortRequest","abort","items","concat","shift","restack","first","last","toUrl","absolute","url","baseUrl","Object","deepAssign","removeRequestConfig","key","headers","_headers","replace","letter","toUpperCase","method","NAME","toLocaleUpperCase","indexOf","Error","get","post","params","getParams","removeParam","data","jsonData","formData","send","signal","startsWith","paramsSerializer","indexes","axios","request","stringify","arrayFormat","APIList","all","noLimit","cut","between","create","sort","order","asc","limit","Number","isNatural","getLimit","offset","from","to","only","idx","page","search","query","APIResource","APIListCleanupConfigurations","super","specific","APIResourceCleanupConfiguration","id","devices","APIAdminListDevices","cleanupConfigurations","cleanupConfiguration","APIAdminListRuns","config","apiResource","APIAdminListServices","active","apiList","notArchived","activated","inUse","byPrice","NonRequestable","Promise","reject","APIAdminListStatistics","frameworks","__decorate","APIAdminResourceAccount","roles","role","accountServices","preferences","usage","usageSummary","APIAdminResourceAccountService","activate","deactivate","APIAdminResourceCluster","APIAdminResourceDevice","labels","label","queue","APIAdminResourceDeviceModel","browsers","InputFileset","files","filesZip","exports","IMAGE_FILES_FILTER","in","NON_MEDIA_FILES_FILTER","APIListOutputFiles","performance","tag","images","nonMediaFiles","videos","OutputFileset","file","screenshots","screenshot","screenshotFile","APIListScreenshots","APIResourceDeviceSessionCommon","commands","input","output","release","steps","step","currentStep","connections","logs","responseType","clusterLogs","APIAdminResourceDeviceSessionStandalone","changeBillable","billable","deviceSessionId","postAdminDeviceSessionChangeBillable","APIAdminResourceDeviceTime","APIAdminResourceFramework","requiredRoles","APIAdminResourceLicense","resend","download","postDeviceRunIds","ids","a","deviceRunIds","APIAdminResourceRunStandalone","changePriority","priority","resource","retry","timeout","APIAdminResourceService","APIAdminResourceUserAccount","services","update","APIResourceDeviceSessionStandalone","connection","visualTestsImages","APIAdminResourceUser","disable","enable","licenses","resendActivation","account","deviceSession","APIResourceAccessGroup","users","user","resources","APIResourceDeviceGroup","device","selectors","selector","share","APIResourceFile","icon","tags","property","APIListTestCaseRuns","APIResourceDeviceSession","testCaseRuns","APIListTestRunDeviceSessions","APIResourceRunCommon","buildLogsZip","dataAvailability","deviceSessions","logsZip","performanceZip","screenshotsZip","APIResourceRun","APIResourceProject","runs","run","unarchive","APIAdminResource","accessGroups","accessGroup","accounts","accountService","activities","administrators","billingPeriods","billingPeriod","clusters","cluster","devicesForModel","deviceStatuses","deviceModels","deviceModel","deviceProblems","deviceModelCriterias","deviceModelCriteria","deviceTime","deviceTimeSummary","deviceTypes","deviceType","deviceGroups","deviceGroup","emails","resendEmail","framework","frameworkAvailableLabels","interactiveQueue","license","maintenance","overview","pools","pool","projects","project","samples","sample","service","settings","statistics","createUser","APIListDevices","desktopBrowserCapabilities","APIListProperties","APIListServices","available","availableByPrice","APIListUsers","recoveries","passwordRecovery","APIResourceBillingPeriod","receipt","APIResourceAccount","concurrencyStatus","removeUser","disableUser","enableUser","serviceBillingPeriod","visualTestAccess","userUsageDetails","usageDetails","usageDetailsSummary","APIResourceBroker","hubs","APIResourceDevice","properties","APIResourceLabelGroup","APIListFiles","upload","obj","global","isNodeJs","nodeUpload","fs","require","form","append","createReadStream","dir","filename","getHeaders","APIResourceChannel","type","scopes","APIListNotifications","channels","channel","APIListRuns","APIListSmartbearTunnels","APIResourceNotification","APIResourceUser","TypeError","markAccountOwner","availableFrameworks","resetApiKey","restore","feedback","notifications","notification","uiPreferences","deviceUsage","deviceStatistics","smartbearTunnel","smartbearTunnels","deleteAccount","APIResourceUserSession","login","logout","sso","sbidCallbackUrl","default","globalThis","defaults","common","maxContentLength","API","axiosConfig","baseURL","cloudUrl","v2","apiKey","auth","username","password","withXSRFToken","withCredentials","admin","broker","enums","labelGroups","labelGroup","ma","me","userSession","CloudAPIClient","AccessGroupScope","SessionUsageType","UtilizationType","SessionType","TimeResolution","PaymentStatus","PaymentMethod","DeactivateReason","InitStep","DeviceState","FrameworkType","BillingType","BrokerType","ClusterState","ClusterType","DeviceGroupOrigin","Platform","SupportedCreators","PoolSize","Code","LockReason","CriterionField","RetentionStrategy","ProblemType","DeviceSessionType","RetryState","DeviceSessionState","DeviceSessionStepType","SessionReleaseReason","OsType","LicenseStatus","NotificationChannel","NotificationScope","ArchivingStrategy","ScreenshotType","ServiceUnit","SharedResourceType","TestResult","LimitationType","TestScheduler","TestState","TestRunConfigFileAction","UserStatus","FileDirection","FileInputType","FileState","VisualTestImageType"],"mappings":"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"}
|