@applitools/core 4.69.0 → 4.69.2

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,91 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.69.2](https://github.com/Applitools-Dev/sdk/compare/js/core@4.69.1...js/core@4.69.2) (2026-08-30)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * don't send the bare branch name under an scm integration | AD-15642 ([#4140](https://github.com/Applitools-Dev/sdk/issues/4140)) ([41c30b9](https://github.com/Applitools-Dev/sdk/commit/41c30b9999488ebc635528476888a5fc239654a8))
9
+ * resolve native iOS viewport in screen space | FLD-4552 ([#4088](https://github.com/Applitools-Dev/sdk/issues/4088)) ([e2f9b03](https://github.com/Applitools-Dev/sdk/commit/e2f9b030103c066faac45d69f98cee265a0a931a))
10
+
11
+
12
+ ### Dependencies
13
+
14
+ * @applitools/dom-snapshot bumped to 4.18.2
15
+ #### Performance Improvements
16
+
17
+ * emit adopted stylesheets as placeholder nodes | AD-15243 ([#4118](https://github.com/Applitools-Dev/sdk/issues/4118)) ([7486bbb](https://github.com/Applitools-Dev/sdk/commit/7486bbbc6f599d1de499e031a59eb4502de8b6b1))
18
+
19
+
20
+
21
+ * @applitools/driver bumped to 1.26.10
22
+ #### Bug Fixes
23
+
24
+ * resolve native iOS viewport in screen space | FLD-4552 ([#4088](https://github.com/Applitools-Dev/sdk/issues/4088)) ([e2f9b03](https://github.com/Applitools-Dev/sdk/commit/e2f9b030103c066faac45d69f98cee265a0a931a))
25
+ * @applitools/screenshoter bumped to 3.12.31
26
+ #### Bug Fixes
27
+
28
+ * resolve native iOS viewport in screen space | FLD-4552 ([#4088](https://github.com/Applitools-Dev/sdk/issues/4088)) ([e2f9b03](https://github.com/Applitools-Dev/sdk/commit/e2f9b030103c066faac45d69f98cee265a0a931a))
29
+
30
+
31
+
32
+ * @applitools/ufg-client bumped to 1.23.3
33
+ #### Bug Fixes
34
+
35
+ * extract css dependencies in chunks past the parser's offset limit | FLD-4643 ([#4134](https://github.com/Applitools-Dev/sdk/issues/4134)) ([1ffdc7b](https://github.com/Applitools-Dev/sdk/commit/1ffdc7bc7e1384bfc18ae9a1d5afbf7c342f8f40))
36
+ * @applitools/spec-driver-webdriver bumped to 1.6.10
37
+
38
+ * @applitools/spec-driver-selenium bumped to 1.8.10
39
+
40
+ * @applitools/spec-driver-playwright bumped to 1.9.10
41
+
42
+ * @applitools/spec-driver-puppeteer bumped to 1.8.10
43
+
44
+ * @applitools/nml-client bumped to 1.12.2
45
+
46
+ * @applitools/ec-client bumped to 1.12.45
47
+
48
+
49
+ ## [4.69.1](https://github.com/Applitools-Dev/sdk/compare/js/core@4.69.0...js/core@4.69.1) (2026-08-23)
50
+
51
+
52
+ ### Bug Fixes
53
+
54
+ * keep the figma access token out of logs when masking is enabled | AD-15515 ([#4062](https://github.com/Applitools-Dev/sdk/issues/4062)) ([17bc177](https://github.com/Applitools-Dev/sdk/commit/17bc17789d88e2d92f32c66c3a43acb14eec4a70))
55
+
56
+
57
+ ### Performance Improvements
58
+
59
+ * CDT node dedup pass | AD-15243 ([baeab05](https://github.com/Applitools-Dev/sdk/commit/baeab05507e12d4d499050cd770191ef3cd9d0df))
60
+
61
+
62
+ ### Dependencies
63
+
64
+ * @applitools/dom-snapshot bumped to 4.18.1
65
+ #### Performance Improvements
66
+
67
+ * CDT node dedup pass | AD-15243 ([baeab05](https://github.com/Applitools-Dev/sdk/commit/baeab05507e12d4d499050cd770191ef3cd9d0df))
68
+ * @applitools/socket bumped to 1.3.17
69
+ #### Bug Fixes
70
+
71
+ * keep the figma access token out of logs when masking is enabled | AD-15515 ([#4062](https://github.com/Applitools-Dev/sdk/issues/4062)) ([17bc177](https://github.com/Applitools-Dev/sdk/commit/17bc17789d88e2d92f32c66c3a43acb14eec4a70))
72
+ * @applitools/image bumped to 1.3.2
73
+ #### Bug Fixes
74
+
75
+ * bump sharp to ^0.35.3 to clear libvips advisories | FLD-4829 ([#4113](https://github.com/Applitools-Dev/sdk/issues/4113)) ([90c2d08](https://github.com/Applitools-Dev/sdk/commit/90c2d0824cf3dfe56a074800907da6eb940ba350))
76
+ * @applitools/screenshoter bumped to 3.12.30
77
+
78
+ * @applitools/nml-client bumped to 1.12.1
79
+
80
+ * @applitools/tunnel-client bumped to 1.12.4
81
+
82
+ * @applitools/ufg-client bumped to 1.23.2
83
+
84
+ * @applitools/core-base bumped to 1.38.2
85
+
86
+ * @applitools/ec-client bumped to 1.12.44
87
+
88
+
3
89
  ## [4.69.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.68.1...js/core@4.69.0) (2026-08-19)
4
90
 
5
91
 
@@ -59,8 +59,10 @@ async function applyFigmaBaselines(settings, logger, resolve = figma_1.setFigmaB
59
59
  // A long TTL lets a pre-warmed cache (committed fixtures) serve through the normal cache-hit path
60
60
  // instead of the all-or-nothing skipApi bypass. Number.isFinite also rejects a non-numeric env value.
61
61
  const nodesCacheTtlSeconds = (_d = figmaOptions.nodesCacheTtlSeconds) !== null && _d !== void 0 ? _d : envTtl;
62
- // Registered with the logger the way apiKey/secretToken are elsewhere, so a token supplied through
63
- // figmaOptions is redacted wherever settings are logged downstream.
62
+ // Registered with the logger the way apiKey/secretToken are elsewhere. Masking is process-wide but
63
+ // takes effect only from this point on, and only when it is enabled (`maskLog` /
64
+ // APPLITOOLS_MASK_LOG). Log lines written before open reaches this seam — the universal socket's
65
+ // payload logs, for one — register the token themselves.
64
66
  const accessToken = (_e = figmaOptions.accessToken) !== null && _e !== void 0 ? _e : process.env.FIGMA_ACCESS_TOKEN;
65
67
  if (accessToken)
66
68
  logger.mask(accessToken);
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.runOfflineSnapshots = void 0;
29
+ exports.runOfflineSnapshots = exports.toEyesServerSettings = void 0;
30
30
  const fs_1 = __importDefault(require("fs"));
31
31
  const path_1 = __importDefault(require("path"));
32
32
  const core_1 = require("../core");
@@ -43,6 +43,22 @@ const os_1 = __importDefault(require("os"));
43
43
  const extract_git_info_1 = require("../utils/extract-git-info");
44
44
  const open_eyes_1 = require("../open-eyes");
45
45
  const throttledReadFile = (0, throat_1.default)(Number(process.env.APPLITOOLS_FILE_READING_CONCURRENCY) || 1000, fs_1.default.promises.readFile);
46
+ /**
47
+ * @internal
48
+ * The settings a replay run hands to `getAccountInfo`, which logs them, and the sanitized config the
49
+ * run works with afterwards. `figmaBaselines`/`figmaOptions` are off-the-wire open config and
50
+ * `figmaOptions.accessToken` is a Figma credential; the open-eyes seam that strips them is bypassed by
51
+ * replay, and no mask is registered on this path, so both the flattened open config and the nested
52
+ * `config` are stripped here — spreading `options` re-introduces `config.open` in full otherwise.
53
+ */
54
+ function toEyesServerSettings(options) {
55
+ const open = { ...options.config.open };
56
+ delete open.figmaBaselines;
57
+ delete open.figmaOptions;
58
+ const config = { ...options.config, open };
59
+ return { ...open, ...options, config };
60
+ }
61
+ exports.toEyesServerSettings = toEyesServerSettings;
46
62
  function getConsoleLogLimit() {
47
63
  var _a;
48
64
  return (_a = utils.general.getEnvValue('OFFLINE_LOG_LIMIT', 'number')) !== null && _a !== void 0 ? _a : 20;
@@ -64,13 +80,8 @@ async function runOfflineSnapshots(options) {
64
80
  const offlineLocationPath = path_1.default.resolve(options.offlineLocationPath);
65
81
  const startTime = Date.now();
66
82
  const logger = (_a = options.logger) !== null && _a !== void 0 ? _a : (0, logger_1.makeLogger)({ format: { label: 'offline-exec' } });
67
- // figmaBaselines/figmaOptions are off-the-wire open config that the open seam resolves and then strips.
68
- // This replay path bypasses the seam, so strip them once here — figmaOptions carries a Figma access
69
- // token, and getAccountInfo logs the settings it is called with.
70
- const openConfig = { ...options.config.open };
71
- delete openConfig.figmaBaselines;
72
- delete openConfig.figmaOptions;
73
- const eyesServerSettings = { ...openConfig, ...options };
83
+ const eyesServerSettings = toEyesServerSettings(options);
84
+ const config = eyesServerSettings.config;
74
85
  const core = (0, core_1.makeCore)({ agentId: `js/core-offline/${version()}`, logger });
75
86
  const account = await core.getAccountInfo({ settings: eyesServerSettings });
76
87
  const ufgClient = await (0, get_ufg_client_1.makeGetUFGClient)({ logger })({
@@ -97,7 +108,7 @@ async function runOfflineSnapshots(options) {
97
108
  testResults: allTestResults,
98
109
  totalTime: Date.now() - startTime,
99
110
  jsonFilePath: options.jsonFilePath,
100
- saveNewTests: options.config.close.updateBaselineIfNew,
111
+ saveNewTests: config.close.updateBaselineIfNew,
101
112
  });
102
113
  if (!isSuccess.onErrors && options.failOnError) {
103
114
  throw new Error(outputStr);
@@ -118,7 +129,7 @@ async function runOfflineSnapshots(options) {
118
129
  const fileOpenSettings = await fs_1.default.promises
119
130
  .readFile(path_1.default.join(testPath, 'settings.json'), 'utf-8')
120
131
  .then(JSON.parse);
121
- const openSettings = (0, merge_configs_1.mergeConfigs)(fileOpenSettings, openConfig);
132
+ const openSettings = (0, merge_configs_1.mergeConfigs)(fileOpenSettings, config.open);
122
133
  messages.push(`Running test: ${openSettings.testName} (${formatEnvironment(openSettings.environment)})`);
123
134
  return { testPath, openSettings, testLogger };
124
135
  });
@@ -138,7 +149,7 @@ async function runOfflineSnapshots(options) {
138
149
  const batchIds = [...new Set(results.map(t => t.batchId))];
139
150
  const allTestResults = results.map(t => t.results);
140
151
  logger.log('done running all tests', allTestResults);
141
- const keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean') || options.config.open.keepBatchOpen;
152
+ const keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean') || config.open.keepBatchOpen;
142
153
  if (!keepBatchOpen) {
143
154
  await core.closeBatch({ settings: batchIds.map(batchId => ({ batchId, ...account.eyesServer })) });
144
155
  logger.log('done closing batches');
@@ -218,7 +229,7 @@ async function runOfflineSnapshots(options) {
218
229
  const closeSettingsPath = path_1.default.resolve(testPath, 'close.json');
219
230
  if (fs_1.default.existsSync(closeSettingsPath)) {
220
231
  const fileCloseSettings = await throttledReadFile(closeSettingsPath, 'utf-8').then(JSON.parse);
221
- const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, options.config.close);
232
+ const closeSettings = (0, merge_configs_1.mergeConfigs)(fileCloseSettings, config.close);
222
233
  return closeSettings;
223
234
  }
224
235
  return undefined;
@@ -381,7 +392,7 @@ async function runOfflineSnapshots(options) {
381
392
  if (accessibilityReportOptions === null || accessibilityReportOptions === void 0 ? void 0 : accessibilityReportOptions.uploadUrl)
382
393
  (_b = baseTarget.accessibilityReportLocation) !== null && _b !== void 0 ? _b : (baseTarget.accessibilityReportLocation = accessibilityReportOptions.uploadUrl);
383
394
  // baseTarget.name = snapshot.title // TODO figure out
384
- const mergedCheckSettings = (0, merge_configs_1.mergeConfigs)(baseSettings, options.config.check);
395
+ const mergedCheckSettings = (0, merge_configs_1.mergeConfigs)(baseSettings, config.check);
385
396
  return { mergedCheckSettings, baseTarget };
386
397
  }
387
398
  async function logStartupInfo() {
@@ -398,7 +409,7 @@ async function runOfflineSnapshots(options) {
398
409
  testCount: testFolders.length,
399
410
  ufgServerUrl: account.ufgServer.ufgServerUrl,
400
411
  CI: process.env.CI,
401
- config: options.config,
412
+ config,
402
413
  driver: {
403
414
  platform: os_1.default.platform(),
404
415
  version: os_1.default.release(),
package/dist/open-eyes.js CHANGED
@@ -60,8 +60,8 @@ exports.sanitizeFinding = sanitizeFinding;
60
60
  function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDuplicateTests, core, cores, spec, environment, logger: mainLogger, asyncCache, concurrency, useServerConcurrency = false, cwd = process.cwd(), }) {
61
61
  let shouldPrintConcurrencyWarning = true;
62
62
  return async function openEyes({ type = defaultType, settings: openSettings, config, target, logger = mainLogger, }) {
63
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
64
- var _2, _3, _4, _5, _6;
63
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
64
+ var _4, _5, _6, _7, _8;
65
65
  logger = logger.extend(mainLogger, { tags: [`eyes-${type}-${utils.general.shortid()}`] });
66
66
  logger.log(`Opening Eyes in directory "${cwd}"`);
67
67
  const settings = { environments: config === null || config === void 0 ? void 0 : config.check.environments, ...config === null || config === void 0 ? void 0 : config.open, ...openSettings };
@@ -70,11 +70,11 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
70
70
  logger.mask(eyesServerSettings.eyesServerUrl);
71
71
  (_a = settings.userTestId) !== null && _a !== void 0 ? _a : (settings.userTestId = `${settings.testName}--${utils.general.guid()}`);
72
72
  settings.batch = { ...batch, ...settings.batch };
73
- (_b = (_2 = settings.batch).id) !== null && _b !== void 0 ? _b : (_2.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`);
74
- (_d = (_3 = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_3.buildId = utils.general.getEnvValue('BATCH_BUILD_ID'));
75
- (_e = (_4 = settings.batch).name) !== null && _e !== void 0 ? _e : (_4.name = utils.general.getEnvValue('BATCH_NAME'));
76
- (_f = (_5 = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_5.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
77
- (_g = (_6 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_6.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
73
+ (_b = (_4 = settings.batch).id) !== null && _b !== void 0 ? _b : (_4.id = (_c = utils.general.getEnvValue('BATCH_ID')) !== null && _c !== void 0 ? _c : `generated-${utils.general.guid()}`);
74
+ (_d = (_5 = settings.batch).buildId) !== null && _d !== void 0 ? _d : (_5.buildId = utils.general.getEnvValue('BATCH_BUILD_ID'));
75
+ (_e = (_6 = settings.batch).name) !== null && _e !== void 0 ? _e : (_6.name = utils.general.getEnvValue('BATCH_NAME'));
76
+ (_f = (_7 = settings.batch).sequenceName) !== null && _f !== void 0 ? _f : (_7.sequenceName = utils.general.getEnvValue('BATCH_SEQUENCE'));
77
+ (_g = (_8 = settings.batch).notifyOnCompletion) !== null && _g !== void 0 ? _g : (_8.notifyOnCompletion = utils.general.getEnvValue('BATCH_NOTIFY', 'boolean'));
78
78
  (_h = settings.keepBatchOpen) !== null && _h !== void 0 ? _h : (settings.keepBatchOpen = utils.general.getEnvValue('DONT_CLOSE_BATCHES', 'boolean'));
79
79
  (_j = settings.branchName) !== null && _j !== void 0 ? _j : (settings.branchName = (_k = utils.general.getEnvValue('BRANCH')) !== null && _k !== void 0 ? _k : utils.general.getEnvValue('BRANCH_NAME'));
80
80
  (_l = settings.parentBranchName) !== null && _l !== void 0 ? _l : (settings.parentBranchName = (_m = utils.general.getEnvValue('PARENT_BRANCH')) !== null && _m !== void 0 ? _m : utils.general.getEnvValue('PARENT_BRANCH_NAME'));
@@ -90,14 +90,18 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
90
90
  logger.warn(`latestCommitInfo.timestamp is an invalid ISO date string: ${settings.latestCommitInfo.timestamp}`);
91
91
  settings.latestCommitInfo = undefined;
92
92
  }
93
+ // Bare git refs from the scm integration. Kept out of `settings` because that pair is the
94
+ // session's identity on the wire; these are only a `git merge-base` argument.
95
+ let scmGitRefs;
93
96
  if (process.env.CI && (isRealBatchId(settings.batch.id) || settings.latestCommitInfo)) {
94
- await populateAutoScmInfo(isRealBatchId(settings.batch.id) ? settings.batch.id : settings.latestCommitInfo.sha);
97
+ scmGitRefs = await populateAutoScmInfo(isRealBatchId(settings.batch.id) ? settings.batch.id : settings.latestCommitInfo.sha);
95
98
  }
96
99
  if (settings.ignoreGitBranching) {
97
100
  settings.gitBranchingTimestamp = undefined;
98
101
  }
99
102
  else if (!settings.gitBranchingTimestamp) {
100
- const { branchName, parentBranchName } = settings;
103
+ const branchName = (_x = settings.branchName) !== null && _x !== void 0 ? _x : scmGitRefs === null || scmGitRefs === void 0 ? void 0 : scmGitRefs.branchName;
104
+ const parentBranchName = (_y = settings.parentBranchName) !== null && _y !== void 0 ? _y : scmGitRefs === null || scmGitRefs === void 0 ? void 0 : scmGitRefs.parentBranchName;
101
105
  if (branchName && parentBranchName && branchName !== parentBranchName) {
102
106
  settings.gitBranchingTimestamp = await (0, extract_git_info_1.extractBranchingTimestamp)({
103
107
  branchName,
@@ -112,7 +116,7 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
112
116
  settings.gitBranchingTimestamp = undefined;
113
117
  }
114
118
  await (0, seam_1.applyFigmaBaselines)(settings, logger);
115
- (_x = settings.bypassCSP) !== null && _x !== void 0 ? _x : (settings.bypassCSP = utils.general.getEnvValue('BYPASS_CSP', 'boolean') === true || undefined);
119
+ (_z = settings.bypassCSP) !== null && _z !== void 0 ? _z : (settings.bypassCSP = utils.general.getEnvValue('BYPASS_CSP', 'boolean') === true || undefined);
116
120
  const driver = target && (await (0, driver_1.makeDriver)({ spec, driver: target, logger, customConfig: settings }));
117
121
  if (settings.bypassCSP) {
118
122
  logger.warn('CSP bypass is enabled.');
@@ -121,11 +125,11 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
121
125
  const driverEnvironment = await (driver === null || driver === void 0 ? void 0 : driver.getEnvironment());
122
126
  const driverUrl = await (driver === null || driver === void 0 ? void 0 : driver.getDriverUrl());
123
127
  const multiDeviceTargets = [];
124
- for (const checkEnv of (_y = settings.environments) !== null && _y !== void 0 ? _y : []) {
125
- if (utils.types.has(checkEnv, 'iosDeviceInfo') && ((_z = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _z === void 0 ? void 0 : _z.instrumented)) {
128
+ for (const checkEnv of (_0 = settings.environments) !== null && _0 !== void 0 ? _0 : []) {
129
+ if (utils.types.has(checkEnv, 'iosDeviceInfo') && ((_1 = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _1 === void 0 ? void 0 : _1.instrumented)) {
126
130
  multiDeviceTargets.push({
127
131
  deviceInfo: checkEnv.iosDeviceInfo.deviceName,
128
- orientation: (_0 = checkEnv.iosDeviceInfo.screenOrientation) !== null && _0 !== void 0 ? _0 : 'portrait',
132
+ orientation: (_2 = checkEnv.iosDeviceInfo.screenOrientation) !== null && _2 !== void 0 ? _2 : 'portrait',
129
133
  });
130
134
  }
131
135
  }
@@ -155,7 +159,7 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
155
159
  browserVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.browserVersion,
156
160
  platformName: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformName,
157
161
  platformVersion: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.platformVersion,
158
- isApplitoolsLib: (_1 = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _1 === void 0 ? void 0 : _1.instrumented,
162
+ isApplitoolsLib: (_3 = driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.applitoolsLib) === null || _3 === void 0 ? void 0 : _3.instrumented,
159
163
  isEC: driverEnvironment === null || driverEnvironment === void 0 ? void 0 : driverEnvironment.isEC,
160
164
  },
161
165
  driverUrl,
@@ -193,8 +197,8 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
193
197
  }); // TODO solve the types issue
194
198
  /////// END FUNCTION BODY ///////////////////
195
199
  async function populateAutoScmInfo(batchId) {
196
- var _a, _b, _c, _d;
197
- var _e;
200
+ var _a, _b;
201
+ var _c;
198
202
  const branchName = await (0, extract_git_info_1.extractGitBranch)({ execOptions: { cwd }, logger });
199
203
  const { owner: repoOwner, name: repoName } = await (0, extract_git_info_1.extractGitRepo)({ execOptions: { cwd }, logger });
200
204
  const buildId = await (0, extract_git_info_1.extractBuildIdFromCI)();
@@ -210,10 +214,10 @@ function makeOpenEyes({ type: defaultType = 'classic', clients, batch, removeDup
210
214
  if (scmInfo) {
211
215
  (_a = settings.batch) !== null && _a !== void 0 ? _a : (settings.batch = {});
212
216
  settings.batch.id = isRealBatchId(settings.batch.id) ? settings.batch.id : batchId;
213
- (_b = (_e = settings.batch).buildId) !== null && _b !== void 0 ? _b : (_e.buildId = buildId);
214
- // Takes data if it was not set by env. This is the priority according to yotam from BE
215
- (_c = settings.branchName) !== null && _c !== void 0 ? _c : (settings.branchName = scmInfo.scmSourceBranch || undefined);
216
- (_d = settings.parentBranchName) !== null && _d !== void 0 ? _d : (settings.parentBranchName = scmInfo.scmTargetBranch || undefined);
217
+ (_b = (_c = settings.batch).buildId) !== null && _b !== void 0 ? _b : (_c.buildId = buildId);
218
+ // Not setting branchName/parentBranchName is the point: the session's value overrides
219
+ // the batch's qualified name (SessionStartInfo.GetBranchName), which the merge keys on.
220
+ return { branchName: scmInfo.scmSourceBranch, parentBranchName: scmInfo.scmTargetBranch };
217
221
  }
218
222
  }
219
223
  else {
@@ -50,6 +50,7 @@ async function takeDomSnapshot({ context, settings, logger, }) {
50
50
  skipRootHtmlResource: settings === null || settings === void 0 ? void 0 : settings.skipRootHtmlResource,
51
51
  fetchConcurrency: settings === null || settings === void 0 ? void 0 : settings.fetchConcurrency,
52
52
  removeReverseProxyURLPrefixes: Boolean(process.env.APPLITOOLS_SCRIPT_REMOVE_REVERSE_PROXY_URL_PREFIXES),
53
+ skipCDTDedup: utils.general.getEnvValue('SKIP_CDT_DEDUP', 'boolean'),
53
54
  chunkByteLength: (_a = settings === null || settings === void 0 ? void 0 : settings.chunkByteLength) !== null && _a !== void 0 ? _a : (Number(process.env.APPLITOOLS_SCRIPT_RESULT_MAX_BYTE_LENGTH) ||
54
55
  (environment.isIOS ? 100000 : 250 * 1024 * 1024)),
55
56
  serializeResources: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/core",
3
- "version": "4.69.0",
3
+ "version": "4.69.2",
4
4
  "homepage": "https://applitools.com",
5
5
  "bugs": {
6
6
  "url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
@@ -61,19 +61,19 @@
61
61
  "setup:standalone": "sh -c 'yarn chromedriver --port=4444 --verbose &'"
62
62
  },
63
63
  "dependencies": {
64
- "@applitools/core-base": "1.38.1",
64
+ "@applitools/core-base": "1.38.2",
65
65
  "@applitools/dom-capture": "11.8.5",
66
- "@applitools/dom-snapshot": "4.18.0",
67
- "@applitools/driver": "1.26.9",
68
- "@applitools/ec-client": "1.12.43",
69
- "@applitools/image": "1.3.1",
66
+ "@applitools/dom-snapshot": "4.18.2",
67
+ "@applitools/driver": "1.26.10",
68
+ "@applitools/ec-client": "1.12.45",
69
+ "@applitools/image": "1.3.2",
70
70
  "@applitools/logger": "2.3.1",
71
- "@applitools/nml-client": "1.12.0",
71
+ "@applitools/nml-client": "1.12.2",
72
72
  "@applitools/req": "1.11.3",
73
- "@applitools/screenshoter": "3.12.29",
73
+ "@applitools/screenshoter": "3.12.31",
74
74
  "@applitools/snippets": "2.9.7",
75
- "@applitools/socket": "1.3.16",
76
- "@applitools/ufg-client": "1.23.1",
75
+ "@applitools/socket": "1.3.17",
76
+ "@applitools/ufg-client": "1.23.3",
77
77
  "@applitools/utils": "1.15.2",
78
78
  "abort-controller": "3.0.0",
79
79
  "chalk": "4.1.2",
@@ -84,13 +84,13 @@
84
84
  },
85
85
  "devDependencies": {
86
86
  "@applitools/bongo": "^5.10.0",
87
- "@applitools/spec-driver-playwright": "^1.9.9",
88
- "@applitools/spec-driver-puppeteer": "^1.8.9",
89
- "@applitools/spec-driver-selenium": "^1.8.9",
90
- "@applitools/spec-driver-webdriver": "^1.6.9",
87
+ "@applitools/spec-driver-playwright": "^1.9.10",
88
+ "@applitools/spec-driver-puppeteer": "^1.8.10",
89
+ "@applitools/spec-driver-selenium": "^1.8.10",
90
+ "@applitools/spec-driver-webdriver": "^1.6.10",
91
91
  "@applitools/test-server": "^1.4.7",
92
92
  "@applitools/test-utils": "^1.5.17",
93
- "@applitools/tunnel-client": "^1.12.3",
93
+ "@applitools/tunnel-client": "^1.12.4",
94
94
  "@swc-node/register": "^1.6.8",
95
95
  "@types/mocha": "^10.0.7",
96
96
  "@types/node": "^12.20.55",
@@ -10,4 +10,15 @@ export type OfflineSnapshotsSettings = EyesServerSettings & {
10
10
  logger?: Logger;
11
11
  jsonFilePath?: string;
12
12
  };
13
+ /**
14
+ * @internal
15
+ * The settings a replay run hands to `getAccountInfo`, which logs them, and the sanitized config the
16
+ * run works with afterwards. `figmaBaselines`/`figmaOptions` are off-the-wire open config and
17
+ * `figmaOptions.accessToken` is a Figma credential; the open-eyes seam that strips them is bypassed by
18
+ * replay, and no mask is registered on this path, so both the flattened open config and the nested
19
+ * `config` are stripped here — spreading `options` re-introduces `config.open` in full otherwise.
20
+ */
21
+ export declare function toEyesServerSettings(options: OfflineSnapshotsSettings): EyesServerSettings & {
22
+ config: Config<SpecType, 'ufg'>;
23
+ };
13
24
  export declare function runOfflineSnapshots(options: OfflineSnapshotsSettings): Promise<TestResult[]>;