@applitools/core 4.56.2 → 4.57.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,104 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.57.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.56.3...js/core@4.57.0) (2026-03-02)
4
+
5
+
6
+ ### Features
7
+
8
+ * http 2 support | FLD-4085 ([#3539](https://github.com/Applitools-Dev/sdk/issues/3539)) ([b304d4a](https://github.com/Applitools-Dev/sdk/commit/b304d4a1072a201d1c3f5cea1275b6a15230d6aa))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * resolve Node.js punycode deprecation warning in tests ([#3590](https://github.com/Applitools-Dev/sdk/issues/3590)) ([b759df9](https://github.com/Applitools-Dev/sdk/commit/b759df98dcce2bcfb09db105edadbc73964e4d8d))
14
+ * video link with http live streaming - workaround | FLD-4089 ([#3567](https://github.com/Applitools-Dev/sdk/issues/3567)) ([8639c37](https://github.com/Applitools-Dev/sdk/commit/8639c37d39997915d5fcdc46c45a96d510b6ad91))
15
+
16
+
17
+ ### Dependencies
18
+
19
+ * @applitools/dom-snapshot bumped to 4.15.10
20
+ #### Bug Fixes
21
+
22
+ * video link with http live streaming - workaround | FLD-4089 ([#3567](https://github.com/Applitools-Dev/sdk/issues/3567)) ([8639c37](https://github.com/Applitools-Dev/sdk/commit/8639c37d39997915d5fcdc46c45a96d510b6ad91))
23
+ * @applitools/req bumped to 1.9.0
24
+ #### Features
25
+
26
+ * http 2 support | FLD-4085 ([#3539](https://github.com/Applitools-Dev/sdk/issues/3539)) ([b304d4a](https://github.com/Applitools-Dev/sdk/commit/b304d4a1072a201d1c3f5cea1275b6a15230d6aa))
27
+ * @applitools/nml-client bumped to 1.11.18
28
+
29
+ * @applitools/tunnel-client bumped to 1.11.7
30
+
31
+ * @applitools/ufg-client bumped to 1.19.3
32
+
33
+ * @applitools/core-base bumped to 1.32.0
34
+ #### Features
35
+
36
+ * http 2 support | FLD-4085 ([#3539](https://github.com/Applitools-Dev/sdk/issues/3539)) ([b304d4a](https://github.com/Applitools-Dev/sdk/commit/b304d4a1072a201d1c3f5cea1275b6a15230d6aa))
37
+
38
+
39
+ #### Bug Fixes
40
+
41
+ * video link with http live streaming - workaround | FLD-4089 ([#3567](https://github.com/Applitools-Dev/sdk/issues/3567)) ([8639c37](https://github.com/Applitools-Dev/sdk/commit/8639c37d39997915d5fcdc46c45a96d510b6ad91))
42
+
43
+
44
+
45
+ * @applitools/ec-client bumped to 1.12.20
46
+
47
+
48
+ ## [4.56.3](https://github.com/Applitools-Dev/sdk/compare/js/core@4.56.2...js/core@4.56.3) (2026-03-01)
49
+
50
+
51
+ ### Performance Improvements
52
+
53
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
54
+
55
+
56
+ ### Dependencies
57
+
58
+ * @applitools/dom-snapshot bumped to 4.15.9
59
+ #### Bug Fixes
60
+
61
+ * expand CSS vars in CSSOM-injected style tags | FLD-4106 ([0821f9e](https://github.com/Applitools-Dev/sdk/commit/0821f9e7f6b20ec05387a8523dc0254bac22591b))
62
+ * @applitools/image bumped to 1.2.7
63
+ #### Performance Improvements
64
+
65
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
66
+ * @applitools/screenshoter bumped to 3.12.14
67
+ #### Performance Improvements
68
+
69
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
70
+
71
+
72
+
73
+ * @applitools/nml-client bumped to 1.11.17
74
+ #### Performance Improvements
75
+
76
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
77
+
78
+
79
+
80
+ * @applitools/ufg-client bumped to 1.19.2
81
+ #### Performance Improvements
82
+
83
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
84
+
85
+
86
+
87
+ * @applitools/core-base bumped to 1.31.3
88
+ #### Performance Improvements
89
+
90
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
91
+
92
+
93
+
94
+ * @applitools/ec-client bumped to 1.12.19
95
+ #### Performance Improvements
96
+
97
+ * use sharp to accelerate png performance in all js packages ([#3547](https://github.com/Applitools-Dev/sdk/issues/3547)) ([6e3c7b9](https://github.com/Applitools-Dev/sdk/commit/6e3c7b9e34815f470032ece52a161001592ad1b1))
98
+
99
+
100
+
101
+
3
102
  ## [4.56.2](https://github.com/Applitools-Dev/sdk/compare/js/core@4.56.1...js/core@4.56.2) (2026-02-16)
4
103
 
5
104
 
package/README.md ADDED
@@ -0,0 +1,200 @@
1
+ # @applitools/core
2
+
3
+ The core SDK package that orchestrates visual testing via two distinct check strategies: **Classic** and **UFG** (Ultrafast Grid).
4
+
5
+ ---
6
+
7
+ ## Check Strategies Overview
8
+
9
+ Both strategies share the same entry point (`src/check.ts`) which normalizes settings and then delegates to the appropriate typed implementation based on the `type` parameter (`'classic'` or `'ufg'`).
10
+
11
+ ```
12
+ eyes.check()
13
+ └── src/check.ts ← normalizes settings, resolves type
14
+ ├── classic/check.ts ← screenshot-based flow
15
+ └── ufg/check.ts ← DOM snapshot + cloud rendering flow
16
+ ```
17
+
18
+ ---
19
+
20
+ ## Classic Check
21
+
22
+ **Concept**: Capture a screenshot locally (in the test runner's browser/device) and send it to Applitools for comparison against the baseline.
23
+
24
+ ### Flow
25
+
26
+ ```
27
+ check()
28
+
29
+ ├── [driver target?]
30
+ │ │
31
+ │ ├── beforeScreenshot()
32
+ │ │ ├── setScrollingElement
33
+ │ │ └── waitForLazyLoad (if enabled)
34
+ │ │
35
+ │ ├── [web or native?]
36
+ │ │ ├── takeWebScreenshot()
37
+ │ │ │ ├── takeScreenshot() ← scrolls, stitches, captures PNG
38
+ │ │ │ └── takeDomCapture() ← captures DOM (if sendDom=true)
39
+ │ │ │
40
+ │ │ └── takeNMLScreenshot()
41
+ │ │ └── nmlClient.takeScreenshots() ← native mobile (NML)
42
+ │ │
43
+ │ └── [matchTimeout set?]
44
+ │ ├── YES → checkEnvironment() synchronously, retry until passes
45
+ │ └── NO → checkInTheBackground() ← fire-and-forget, non-blocking
46
+
47
+ └── [image target?]
48
+ └── checkInTheBackground() ← directly queue pre-captured image
49
+ ```
50
+
51
+ ### Key files
52
+
53
+ | File | Purpose |
54
+ |------|---------|
55
+ | `src/classic/check.ts` | Orchestrates the classic check flow |
56
+ | `src/classic/utils/take-screenshots.ts` | Takes the screenshot and optional DOM capture |
57
+ | `src/classic/utils/take-dom-capture.ts` | Captures the page DOM for RCA |
58
+ | `src/automation/utils/take-screenshot.ts` | Low-level screenshot + stitching logic |
59
+
60
+ ### What happens on each check
61
+
62
+ 1. **Settings normalization** — applied in `src/check.ts` (defaults for `fully`, `matchLevel`, `sendDom`, etc.)
63
+ 2. **Scroll root / lazy load** — the driver scrolls and waits for deferred content
64
+ 3. **Screenshot** — a full-page or viewport PNG is captured locally
65
+ 4. **DOM capture** (optional) — if `sendDom=true`, the serialized DOM is captured for Root Cause Analysis (RCA)
66
+ 5. **Session open** (lazy) — `getBaseEyes()` opens the Applitools test session on first use
67
+ 6. **Upload + compare** — `baseEyes.check()` uploads the image+DOM and triggers comparison
68
+
69
+ ### matchTimeout behavior
70
+
71
+ When `matchTimeout > 0`, the SDK retries the entire screenshot→compare cycle until the result matches expectations or the timeout expires. This blocks the test execution thread and is designed to tolerate transient UI states (e.g., loading spinners).
72
+
73
+ ### Background queuing
74
+
75
+ When `matchTimeout = 0` (default), checks are queued as background promises. The test thread is not blocked. `eyes.close()` awaits all queued jobs before resolving results.
76
+
77
+ ---
78
+
79
+ ## UFG Check (Ultrafast Grid)
80
+
81
+ **Concept**: Capture a DOM snapshot locally, upload it to the Applitools rendering farm (UFG - Ultrafast Grid), which renders it in multiple browsers and devices in the cloud and then compares each rendered image against the baseline.
82
+
83
+ ### Flow
84
+
85
+ ```
86
+ check()
87
+
88
+ ├── getUFGClient() ← initialize methods for UFG purposes
89
+
90
+ ├── [driver target?]
91
+ │ └── takeSnapshots()
92
+ │ ├── setScrollingElement
93
+ │ ├── takeDomSnapshots() ← serialized DOM + resources
94
+ │ │ └── (per environment: browser widths, layout breakpoints)
95
+ │ └── driver.getUrl() / getTitle() / getUserAgent()
96
+
97
+ ├── [for each snapshot × environment]
98
+ │ ├── createRenderTargetFromSnapshot()
99
+ │ │ └── ufgClient.uploadResources() ← CSS, fonts, images → UFG CDN
100
+ │ │
101
+ │ ├── getBaseEyes() ← open test session (lazy, per environment)
102
+ │ │
103
+ │ ├── ufgClient.render()
104
+ │ │ └── UFG renders DOM in target browser/device → returns rendered image
105
+ │ │
106
+ │ └── baseEyes.check() ← compare rendered image against baseline
107
+
108
+ └── all environment promises queued in eyes.storage
109
+ ```
110
+
111
+ ### Key files
112
+
113
+ | File | Purpose |
114
+ |------|---------|
115
+ | `src/ufg/check.ts` | Orchestrates the UFG check flow |
116
+ | `src/ufg/take-snapshots.ts` | Takes DOM snapshots per environment |
117
+ | `src/ufg/create-render-target-from-snapshot.ts` | Uploads resources to UFG CDN, builds render target |
118
+ | `src/ufg/utils/take-dom-snapshots.ts` | Serializes DOM including cross-frame content |
119
+
120
+ ### What happens on each check
121
+
122
+ 1. **Settings normalization** — same as Classic (`src/check.ts`)
123
+ 2. **DOM snapshot** — the page's full DOM (HTML, CSS, iframes) is serialized and resources are collected
124
+ 3. **Resource upload** — CSS, fonts, images are uploaded to the UFG CDN (cached by URL to avoid re-uploads)
125
+ 4. **Render request** — sent to the UFG rendering farm per target environment (browser + viewport or device)
126
+ 5. **Session open** (lazy, per environment) — `getBaseEyes()` opens one Applitools session per environment
127
+ 6. **Compare** — `baseEyes.check()` receives the rendered image reference (`renderId`) and triggers comparison
128
+
129
+ ### Environment targeting
130
+
131
+ UFG supports rendering in multiple environments per check:
132
+
133
+ ```ts
134
+ settings.environments = [
135
+ { name: 'chrome', width: 1280, height: 800 },
136
+ { name: 'firefox', width: 1280, height: 800 },
137
+ { chromeEmulationInfo: { deviceName: 'Pixel 4 XL' } },
138
+ { iosDeviceInfo: { deviceName: 'iPhone 12', version: 'latest' } },
139
+ ]
140
+ ```
141
+
142
+ Each environment produces one independent test session, one render, and one comparison result.
143
+
144
+ ### Layout breakpoints
145
+
146
+ UFG supports `layoutBreakpoints` — the DOM is snapshotted at each specified viewport width to capture responsive layout differences, and UFG renders each environment at the closest matching breakpoint.
147
+
148
+ ---
149
+
150
+ ## Classic vs UFG: Key Differences
151
+
152
+ | Aspect | Classic | UFG |
153
+ |--------|---------|-----|
154
+ | **What's captured locally** | Screenshot (PNG) | DOM snapshot (HTML/CSS/resources) |
155
+ | **Where rendering happens** | Local driver (real browser) | Applitools cloud (UFG rendering farm) |
156
+ | **Multi-environment** | Takes one screenshot, reuses for all envs | Renders separately per environment |
157
+ | **Native mobile** | Supported via NML (real devices) | Supported via cloud device emulation |
158
+ | **DOM capture** | Optional (for RCA) | Always — it's the input |
159
+ | **Concurrency usage** | One slot per environment | One slot per environment |
160
+ | **matchTimeout** | Supported (retry loop) | Not supported |
161
+ | **Scroll/stitch** | Done locally by the SDK | Done by UFG renderer |
162
+
163
+ ---
164
+
165
+ ## Environment Terminology
166
+
167
+ Two distinct environment shapes flow through classic check. Confusing them is the source of a known bug.
168
+
169
+ | Name | TypeScript type | Shape | Where it comes from |
170
+ |------|----------------|-------|---------------------|
171
+ | **Requested environment** (also called *unique environment*) | `RenderEnvironment` | `{iosDeviceInfo: {deviceName: 'iPhone 12'}}` or `{name: 'chrome', width: 1280, height: 800}` | Comes from `settings.environments` (user input). After `uniquifyEnvironments()`, duplicates get a synthetic `environmentId` to map to separate sessions. |
172
+ | **Actual / exact environment** | `ExactEnvironment` | `{environmentId, deviceName, os, viewportSize, requested: <RenderEnvironment>}` | Returned by `takeWebScreenshot` / `takeNMLScreenshot` after the device is resolved. The flat shape that `core-base` and the Applitools server understand. Always has `requested` pointing back to the original `RenderEnvironment`. |
173
+
174
+ **Key invariant:** `toEnvironmentKey(exactEnvironment)` === `toEnvironmentKey(requestedEnvironment)` because `toEnvironmentKey` uses `env.requested ?? env`. This is how the `makeGetBaseEyes` cache correctly matches an early session-open (keyed on the requested environment) to the later check (keyed on the exact environment).
175
+
176
+ **Known bug:** In the `matchTimeout` path, `base.openEyes` is called with the *requested* environment (`{iosDeviceInfo: ...}`) instead of the *exact* environment (`{deviceName, os, viewportSize, ...}`). `core-base/server/requests.ts` reads the flat fields (`os`, `deviceName`, `viewportSize`) which are `undefined` on the requested form, so the session opens on the server with empty environment info. This only affects NML (iOS/Android native) environments since web environments are not transformed and `exactEnvironment === requestedEnvironment`.
177
+
178
+ ---
179
+
180
+ ## Session Lifecycle (Both Strategies)
181
+
182
+ Sessions are opened **lazily** — the Applitools test session is not created during `openEyes()`, but on the first `getBaseEyes()` call within a check. This avoids charging concurrency for tests that open but never check.
183
+
184
+ ```
185
+ openEyes() → creates in-memory Eyes object, no server call
186
+ check() → getBaseEyes() → POST /api/sessions (first time only)
187
+ check() → getBaseEyes() → returns cached session (subsequent calls)
188
+ close() / abort() → closes all open sessions, awaits all queued jobs
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Storage Model
194
+
195
+ Both strategies push check promises into `eyes.storage`, a `Map<environmentKey, {eyes, jobs[]}>`:
196
+
197
+ - `eyes` — a controlled promise resolving to the base eyes session
198
+ - `jobs` — array of check promises for that environment
199
+
200
+ `close()` waits for all jobs across all environments before collecting results.
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeGetNMLClient = void 0;
3
+ exports.makeGetNMLClient = exports.clearNMLClients = void 0;
4
4
  const nml_client_1 = require("@applitools/nml-client");
5
5
  const clients = new Map();
6
+ // for tests
7
+ function clearNMLClients() {
8
+ clients.clear();
9
+ }
10
+ exports.clearNMLClients = clearNMLClients;
6
11
  function makeGetNMLClient({ client, logger: mainLogger }) {
7
12
  return {
8
13
  getNMLClient,
@@ -96,19 +96,31 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
96
96
  } while (!asExpected && Date.now() - start < settings.matchTimeout);
97
97
  }
98
98
  else {
99
+ // Eagerly start opening sessions for web environments while screenshots are being taken.
100
+ // NML environments are excluded because their exact environment shape (deviceName, os,
101
+ // viewportSize) is only resolved after generateBaseScreenshotsAndSettings() returns, and
102
+ // using the unique env shape would open the session with wrong/empty fields.
103
+ const environmentLoggers = new Map();
104
+ uniqueEnvironments
105
+ .filter(env => !('iosDeviceInfo' in env) && !('androidDeviceInfo' in env))
106
+ .forEach(environment => {
107
+ const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
108
+ environmentLoggers.set((0, to_environment_key_1.toEnvironmentKey)(environment), environmentLogger);
109
+ void getBaseEyes({ environment, driver, logger: environmentLogger });
110
+ });
99
111
  // generate base targets (images to be compared) and settings for each environment
100
112
  const baseScreenshotsAndSettings = await generateBaseScreenshotsAndSettings(settings, uniqueEnvironments, eyes, logger, driver);
101
113
  // when no match timeout is set, queue all environment checks against the server without stalling the client test execution
102
114
  baseScreenshotsAndSettings.forEach(({ exactEnvironment: environment, baseSetting, baseTarget }) => {
103
- checkInTheBackground(environment, baseTarget, baseSetting);
115
+ checkInTheBackground(environment, baseTarget, baseSetting, environmentLoggers.get((0, to_environment_key_1.toEnvironmentKey)(environment)));
104
116
  });
105
117
  }
106
118
  }
107
119
  else {
108
120
  uniqueEnvironments.forEach(environment => checkInTheBackground(environment, target, settings));
109
121
  }
110
- function checkInTheBackground(environment, target, settings) {
111
- putInStorage(environment, eyes, checkEnvironment({ eyes, driver, target, environment, signal, logger, settings }));
122
+ function checkInTheBackground(environment, target, settings, environmentLogger) {
123
+ putInStorage(environment, eyes, checkEnvironment({ eyes, driver, target, environment, signal, logger, settings, environmentLogger }));
112
124
  }
113
125
  };
114
126
  function putInStorage(environment, eyes, promise) {
@@ -155,9 +167,9 @@ async function logAmmutabilityIfNeeded({ eyes, baseEyes, settings, }) {
155
167
  settings.assumesMutability = false; // prevent from logging this message again for the same check
156
168
  }
157
169
  }
158
- async function checkEnvironment({ eyes, driver, target, environment, signal, logger, settings, }) {
170
+ async function checkEnvironment({ eyes, driver, target, environment, signal, logger, settings, environmentLogger: providedEnvironmentLogger, }) {
159
171
  var _a, _b;
160
- const environmentLogger = logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
172
+ const environmentLogger = providedEnvironmentLogger !== null && providedEnvironmentLogger !== void 0 ? providedEnvironmentLogger : logger.extend({ tags: [`environment-${utils.general.shortid()}`] });
161
173
  environmentLogger.log('Command "check" is called with settings', settings);
162
174
  try {
163
175
  if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
package/dist/index.js CHANGED
@@ -26,14 +26,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.MissingApiKeyError = exports.logs = exports.formatters = void 0;
29
+ exports.MissingApiKeyError = exports.checkNetwork = exports.logs = exports.formatters = void 0;
30
30
  __exportStar(require("./types"), exports);
31
31
  __exportStar(require("./core"), exports);
32
- __exportStar(require("./universal/core-server"), exports);
33
- __exportStar(require("./universal/core-server-process"), exports);
34
32
  __exportStar(require("./autonomous/core"), exports);
35
33
  __exportStar(require("@applitools/driver/dist/debug"), exports);
36
34
  exports.formatters = __importStar(require("./utils/format-results"));
37
35
  exports.logs = __importStar(require("./troubleshoot/logs"));
36
+ var check_network_1 = require("./troubleshoot/check-network");
37
+ Object.defineProperty(exports, "checkNetwork", { enumerable: true, get: function () { return check_network_1.checkNetwork; } });
38
38
  var core_base_1 = require("@applitools/core-base");
39
39
  Object.defineProperty(exports, "MissingApiKeyError", { enumerable: true, get: function () { return core_base_1.MissingApiKeyError; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.56.2",
3
+ "version": "4.57.0",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -32,8 +32,7 @@
32
32
  "./package.json": "./package.json"
33
33
  },
34
34
  "bin": {
35
- "eyes-check-network": "./dist/troubleshoot/check-network.js",
36
- "eyes-core": "./dist/cli/cli.js"
35
+ "eyes-check-network": "./dist/troubleshoot/check-network.js"
37
36
  },
38
37
  "main": "./dist/index.js",
39
38
  "types": "./types/index.d.ts",
@@ -48,12 +47,12 @@
48
47
  "lint": "run --top-level eslint '**/*.ts'",
49
48
  "build": "yarn build:dist",
50
49
  "build:dist": "run --top-level tsc --project ./tsconfig.build.json",
51
- "build:bin": "bash ../../../scripts/build-binary-local.sh core",
52
- "test": "run --top-level mocha './test/**/*.spec.ts' --exclude './test/bin/**' --exclude './test/e2e/mocha-sync/**' --parallel --jobs ${MOCHA_JOBS:-15} --exit --require ./test/mocha-global-setup.js",
50
+ "test": "run --top-level mocha './test/**/*.spec.ts' --exclude './test/e2e/mocha-sync/**' --parallel --jobs ${MOCHA_JOBS:-15} --exit --require ./test/mocha-global-setup.js",
53
51
  "test:local": "MOCHA_OMIT_TAGS=sauce,browserstack run test",
54
52
  "test:sauce": "MOCHA_ONLY_TAGS=sauce,browserstack run test",
55
53
  "test:bin": "MOCHA_GROUP=bin run --top-level mocha './test/bin/**/*.spec.ts' --parallel --jobs ${MOCHA_JOBS:-15} --require ./test/mocha-global-setup.js",
56
- "test:e2e": "MOCHA_GROUP=e2e run --top-level mocha './test/e2e/**/*.spec.ts' --exclude './test/e2e/mocha-sync/**' --parallel --jobs ${MOCHA_JOBS:-15} --exit --require ./test/mocha-global-setup.js",
54
+ "test:e2e": "MOCHA_OMIT_TAGS=http2 MOCHA_GROUP=e2e run --top-level mocha './test/e2e/**/*.spec.ts' --exclude './test/e2e/mocha-sync/**' --parallel --jobs ${MOCHA_JOBS:-15} --exit --require ./test/mocha-global-setup.js",
55
+ "test:e2e:http2": "APPLITOOLS_HTTP_VERSION=2 MOCHA_OMIT_TAGS=http1,sauce,browserstack MOCHA_GROUP=e2e run --top-level mocha './test/e2e/**/*.spec.ts' --exclude './test/e2e/mocha-sync/**' --parallel --jobs ${MOCHA_JOBS:-15} --exit --require ./test/mocha-global-setup.js",
57
56
  "test:it": "MOCHA_GROUP=it run --top-level mocha './test/it/**/*.spec.ts' --require ./test/mocha-global-setup.js",
58
57
  "test:e2e:sync": "MOCHA_GROUP=e2e SYNC=true run --top-level mocha './test/e2e/mocha-sync/**/*.spec.ts' --exit --require ./test/mocha-global-setup.js",
59
58
  "test:unit": "MOCHA_GROUP=unit run --top-level mocha './test/unit/**/*.spec.ts' --require ./test/mocha-global-setup.js",
@@ -61,29 +60,24 @@
61
60
  "setup:standalone": "sh -c 'yarn chromedriver --port=4444 --verbose &'"
62
61
  },
63
62
  "dependencies": {
64
- "@applitools/core-base": "1.31.2",
63
+ "@applitools/core-base": "1.32.0",
65
64
  "@applitools/dom-capture": "11.6.9",
66
- "@applitools/dom-snapshot": "4.15.8",
65
+ "@applitools/dom-snapshot": "4.15.10",
67
66
  "@applitools/driver": "1.25.1",
68
- "@applitools/ec-client": "1.12.18",
67
+ "@applitools/ec-client": "1.12.20",
69
68
  "@applitools/logger": "2.2.8",
70
- "@applitools/nml-client": "1.11.16",
71
- "@applitools/req": "1.8.8",
72
- "@applitools/screenshoter": "3.12.13",
69
+ "@applitools/nml-client": "1.11.18",
70
+ "@applitools/req": "1.9.0",
71
+ "@applitools/screenshoter": "3.12.14",
73
72
  "@applitools/snippets": "2.7.0",
74
73
  "@applitools/socket": "1.3.9",
75
- "@applitools/spec-driver-webdriver": "1.5.6",
76
- "@applitools/ufg-client": "1.19.1",
74
+ "@applitools/ufg-client": "1.19.3",
77
75
  "@applitools/utils": "1.14.1",
78
- "@types/ws": "8.5.5",
79
76
  "abort-controller": "3.0.0",
80
77
  "chalk": "4.1.2",
81
78
  "node-fetch": "2.6.7",
82
79
  "semver": "7.6.2",
83
- "throat": "6.0.2",
84
- "webdriver": "7.31.1",
85
- "ws": "8.17.1",
86
- "yargs": "17.7.2"
80
+ "throat": "6.0.2"
87
81
  },
88
82
  "devDependencies": {
89
83
  "@applitools/bongo": "^5.10.0",
@@ -91,12 +85,11 @@
91
85
  "@applitools/spec-driver-selenium": "^1.7.12",
92
86
  "@applitools/test-server": "^1.4.0",
93
87
  "@applitools/test-utils": "^1.5.17",
94
- "@applitools/tunnel-client": "^1.11.6",
88
+ "@applitools/tunnel-client": "^1.11.7",
95
89
  "@types/mocha": "^10.0.7",
96
90
  "@types/node": "^12.20.55",
97
91
  "@types/selenium-webdriver": "^4.1.2",
98
92
  "@types/semver": "^7.5.8",
99
- "@types/yargs": "^17.0.22",
100
93
  "chromedriver": "^131.0.5",
101
94
  "crypto": "^1.0.1",
102
95
  "nock": "^13.3.2",
@@ -115,7 +108,10 @@
115
108
  "chromedriver": true,
116
109
  "puppeteer": true,
117
110
  "ws>bufferutil": false,
118
- "ws>utf-8-validate": false
111
+ "ws>utf-8-validate": false,
112
+ "@applitools/core-base>@applitools/image>sharp": false,
113
+ "selenium-webdriver>ws>bufferutil": false,
114
+ "selenium-webdriver>ws>utf-8-validate": false
119
115
  }
120
116
  }
121
117
  }
@@ -5,6 +5,7 @@ type Options = {
5
5
  client?: NMLClient;
6
6
  logger: Logger;
7
7
  };
8
+ export declare function clearNMLClients(): void;
8
9
  export declare function makeGetNMLClient({ client, logger: mainLogger }: Options): {
9
10
  getNMLClient: ({ driver, settings, logger, }: {
10
11
  driver: Driver<SpecType>;
package/types/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  export * from './types';
2
2
  export * from './core';
3
- export * from './universal/core-server';
4
- export * from './universal/core-server-process';
5
3
  export * from './autonomous/core';
6
4
  export { type SpecType, type SpecDriver, type Selector } from '@applitools/driver';
7
5
  export * from '@applitools/driver/dist/debug';
8
6
  export * as formatters from './utils/format-results';
9
7
  export * as logs from './troubleshoot/logs';
8
+ export { checkNetwork } from './troubleshoot/check-network';
10
9
  export { MissingApiKeyError } from '@applitools/core-base';