@applitools/core 4.65.2 → 4.66.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/CHANGELOG.md CHANGED
@@ -1,5 +1,90 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.66.1](https://github.com/Applitools-Dev/sdk/compare/js/core@4.66.0...js/core@4.66.1) (2026-07-08)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * stop UFG old-infra retry after a retry fails | AD-14675 ([#3970](https://github.com/Applitools-Dev/sdk/issues/3970)) ([1531893](https://github.com/Applitools-Dev/sdk/commit/1531893cc9c098f3ade329ceae7164600c184fa5))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * @applitools/nml-client bumped to 1.11.35
14
+
15
+ * @applitools/core-base bumped to 1.36.1
16
+ #### Bug Fixes
17
+
18
+ * forward Exact match-level tuning to the server across JS + Java | FLD-4685 ([#3974](https://github.com/Applitools-Dev/sdk/issues/3974)) ([fea351c](https://github.com/Applitools-Dev/sdk/commit/fea351c76c80f63bf658d9573b3d34e0537e0cce))
19
+ * @applitools/ec-client bumped to 1.12.37
20
+
21
+
22
+ ## [4.66.0](https://github.com/Applitools-Dev/sdk/compare/js/core@4.65.2...js/core@4.66.0) (2026-06-28)
23
+
24
+
25
+ ### Features
26
+
27
+ * stream SDK logs to Azure Blob per server flag | AD-13401 ([#3849](https://github.com/Applitools-Dev/sdk/issues/3849)) ([7f9dfec](https://github.com/Applitools-Dev/sdk/commit/7f9dfecd874aefc33104db015451a22eee500324))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * updated extract git fallback logic | FLD-4492 ([#3831](https://github.com/Applitools-Dev/sdk/issues/3831)) ([0d98f3c](https://github.com/Applitools-Dev/sdk/commit/0d98f3cdf828eff756ffbfc5d4cdff7b19a20557))
33
+
34
+
35
+ ### Dependencies
36
+
37
+ * @applitools/utils bumped to 1.15.1
38
+ #### Bug Fixes
39
+
40
+ * updated extract git fallback logic | FLD-4492 ([#3831](https://github.com/Applitools-Dev/sdk/issues/3831)) ([0d98f3c](https://github.com/Applitools-Dev/sdk/commit/0d98f3cdf828eff756ffbfc5d4cdff7b19a20557))
41
+ * @applitools/logger bumped to 2.3.0
42
+ #### Features
43
+
44
+ * stream SDK logs to Azure Blob per server flag | AD-13401 ([#3849](https://github.com/Applitools-Dev/sdk/issues/3849)) ([7f9dfec](https://github.com/Applitools-Dev/sdk/commit/7f9dfecd874aefc33104db015451a22eee500324))
45
+
46
+
47
+
48
+ * @applitools/dom-snapshot bumped to 4.17.5
49
+
50
+ * @applitools/socket bumped to 1.3.15
51
+
52
+ * @applitools/req bumped to 1.11.2
53
+
54
+ * @applitools/image bumped to 1.2.13
55
+
56
+ * @applitools/dom-capture bumped to 11.8.3
57
+
58
+ * @applitools/driver bumped to 1.26.5
59
+
60
+ * @applitools/spec-driver-webdriver bumped to 1.6.5
61
+
62
+ * @applitools/spec-driver-selenium bumped to 1.8.5
63
+
64
+ * @applitools/spec-driver-playwright bumped to 1.9.5
65
+
66
+ * @applitools/spec-driver-puppeteer bumped to 1.8.5
67
+
68
+ * @applitools/screenshoter bumped to 3.12.24
69
+
70
+ * @applitools/nml-client bumped to 1.11.34
71
+
72
+ * @applitools/tunnel-client bumped to 1.12.2
73
+
74
+ * @applitools/ufg-client bumped to 1.22.5
75
+
76
+ * @applitools/core-base bumped to 1.36.0
77
+ #### Features
78
+
79
+ * stream SDK logs to Azure Blob per server flag | AD-13401 ([#3849](https://github.com/Applitools-Dev/sdk/issues/3849)) ([7f9dfec](https://github.com/Applitools-Dev/sdk/commit/7f9dfecd874aefc33104db015451a22eee500324))
80
+
81
+
82
+
83
+ * @applitools/ec-client bumped to 1.12.36
84
+
85
+ * @applitools/test-server bumped to 1.4.6
86
+
87
+
3
88
  ## [4.65.2](https://github.com/Applitools-Dev/sdk/compare/js/core@4.65.1...js/core@4.65.2) (2026-06-18)
4
89
 
5
90
 
@@ -52,6 +52,10 @@ const getAccessToken = (() => {
52
52
  let accessToken;
53
53
  return async () => {
54
54
  if (!accessToken) {
55
+ // SECURITY: interpolated args (RENDER_INFO_URL, getProxyCurlArg()) come from
56
+ // trusted config (serverUrl/apiKey/proxy), not user input. Don't add
57
+ // externally-influenced data here without moving to execFile (no shell) to
58
+ // prevent injection — tracked in the follow-up tech-debt ticket.
55
59
  const { stdout } = await utils.process.execute(`curl -s ${eyes_1.RENDER_INFO_URL} ${(0, utils_1.getProxyCurlArg)()}`, {
56
60
  maxBuffer: 10000000,
57
61
  });
package/dist/ufg/check.js CHANGED
@@ -39,6 +39,10 @@ const create_render_target_from_snapshot_1 = require("./create-render-target-fro
39
39
  const to_base_check_settings_1 = require("../automation/utils/to-base-check-settings");
40
40
  const to_old_infra_environment_1 = require("./to-old-infra-environment");
41
41
  function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironments = [], spec, signal, logger: mainLogger, }) {
42
+ // Sessions whose old-infra retry chain has ended: once a retry doesn't confirm an old-infra match,
43
+ // the backend stops expecting retries, so we must stop sending them. baseEyes is cached per
44
+ // environment, so it is a stable per-session key. See AD-14675.
45
+ const oldInfraRetryDisabled = new WeakSet();
42
46
  return async function check({ target = defaultTarget, settings = {}, logger = mainLogger, } = {}) {
43
47
  var _a;
44
48
  logger = logger.extend(mainLogger);
@@ -193,7 +197,9 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
193
197
  settings: baseSettings,
194
198
  logger: environmentLogger,
195
199
  });
196
- if (!checkResult.asExpected && baseEyes.test.shouldRetryWithOldInfra) {
200
+ if (!checkResult.asExpected &&
201
+ baseEyes.test.shouldRetryWithOldInfra &&
202
+ !oldInfraRetryDisabled.has(baseEyes)) {
197
203
  const oldInfraEnvironment = (0, to_old_infra_environment_1.toOldInfraEnvironment)(environment);
198
204
  if (oldInfraEnvironment) {
199
205
  // Best-effort: the retry adds an extra render + check, and a transient
@@ -203,13 +209,18 @@ function makeCheck({ eyes, target: defaultTarget, environments: defaultEnvironme
203
209
  try {
204
210
  const { target, settings } = await renderForCheck(oldInfraEnvironment);
205
211
  settings.oldInfraRetry = true;
206
- await baseEyes.check({
212
+ const retryResult = await baseEyes.check({
207
213
  target: { ...target, isTransformed: true },
208
214
  settings,
209
215
  logger: environmentLogger,
210
216
  });
217
+ // A retry that doesn't confirm an old-infra match means the backend now treats the
218
+ // session as non-infra and stops expecting retries — so stop sending them.
219
+ if (!retryResult.asExpected)
220
+ oldInfraRetryDisabled.add(baseEyes);
211
221
  }
212
222
  catch (error) {
223
+ oldInfraRetryDisabled.add(baseEyes);
213
224
  environmentLogger.warn('Old-infra retry failed; keeping the primary check result', error);
214
225
  }
215
226
  }