@applitools/nml-client 1.6.6 → 1.7.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,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.7.1](https://github.com/applitools/eyes.sdk.javascript1/compare/js/nml-client@1.7.0...js/nml-client@1.7.1) (2024-02-18)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * @applitools/spec-driver-webdriver bumped to 1.1.0
9
+ #### Features
10
+
11
+ * env var to skip deprected jwp commands ([#2200](https://github.com/applitools/eyes.sdk.javascript1/issues/2200)) ([d9123db](https://github.com/applitools/eyes.sdk.javascript1/commit/d9123dbba85679d1c6999718b90b89debb18ed18))
12
+
13
+ ## [1.7.0](https://github.com/applitools/eyes.sdk.javascript1/compare/js/nml-client@1.6.6...js/nml-client@1.7.0) (2024-02-13)
14
+
15
+
16
+ ### Features
17
+
18
+ * add support for regions and calculated regions ([#2161](https://github.com/applitools/eyes.sdk.javascript1/issues/2161)) ([fea4b1f](https://github.com/applitools/eyes.sdk.javascript1/commit/fea4b1fca3d8f59eada2b5186cd32d47352ccf1a))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * missing viewport when using system screenshot and multi viewport ([#2173](https://github.com/applitools/eyes.sdk.javascript1/issues/2173)) ([411283c](https://github.com/applitools/eyes.sdk.javascript1/commit/411283c7bebc09f178d73b6b47e81e5ce4244d5e))
24
+
25
+
26
+ ### Dependencies
27
+
28
+ * @applitools/spec-driver-webdriver bumped to 1.0.57
29
+ #### Bug Fixes
30
+
31
+ * fixed issue with cdp commands on chromium browsers ([#2180](https://github.com/applitools/eyes.sdk.javascript1/issues/2180)) ([550fc77](https://github.com/applitools/eyes.sdk.javascript1/commit/550fc772d3988aae29e6f4a1a11d2a408072dc38))
32
+
3
33
  ## [1.6.6](https://github.com/applitools/eyes.sdk.javascript1/compare/js/nml-client@1.6.5...js/nml-client@1.6.6) (2024-02-06)
4
34
 
5
35
 
package/dist/client.js CHANGED
@@ -5,13 +5,14 @@ const logger_1 = require("@applitools/logger");
5
5
  const requests_1 = require("./server/requests");
6
6
  const take_snapshots_1 = require("./take-snapshots");
7
7
  const take_screenshots_1 = require("./take-screenshots");
8
+ const pre_take_screenshot_1 = require("./pre-take-screenshot");
8
9
  function makeNMLClient({ settings, logger: defaultLogger, }) {
9
10
  const logger = (0, logger_1.makeLogger)({ logger: defaultLogger, format: { label: 'nml-client' } });
10
11
  const requests = (0, requests_1.makeNMLRequests)({ settings, logger });
11
12
  return {
13
+ preTakeScreenshot: (0, pre_take_screenshot_1.makePreTakeScreenshot)({ requests, logger }),
12
14
  takeScreenshots: (0, take_screenshots_1.makeTakeScreenshots)({ requests, logger }),
13
15
  takeSnapshots: (0, take_snapshots_1.makeTakeSnapshots)({ requests, logger }),
14
- getSupportedEnvironments: requests.getSupportedEnvironments,
15
16
  };
16
17
  }
17
18
  exports.makeNMLClient = makeNMLClient;
package/dist/index.js CHANGED
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./client"), exports);
18
18
  __exportStar(require("./types"), exports);
19
19
  __exportStar(require("./server/requests"), exports);
20
+ __exportStar(require("./utils/get-environments-info"), exports);
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makePreTakeScreenshot = void 0;
4
+ function makePreTakeScreenshot({ requests, logger: defaultLogger }) {
5
+ return async function preTakeScreenshot({ logger = defaultLogger }) {
6
+ return requests.preTakeScreenshot({ logger });
7
+ };
8
+ }
9
+ exports.makePreTakeScreenshot = makePreTakeScreenshot;
@@ -22,57 +22,51 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
26
  exports.makeNMLRequests = void 0;
30
27
  const req_broker_1 = require("./req-broker");
31
- const req_1 = __importDefault(require("@applitools/req"));
32
28
  const utils = __importStar(require("@applitools/utils"));
29
+ const get_environments_info_1 = require("../utils/get-environments-info");
33
30
  function makeNMLRequests({ settings, logger: mainLogger, }) {
34
31
  let brokerUrl = settings.brokerUrl;
32
+ const supportedEnvironmentsUrl = settings.supportedEnvironmentsUrl;
33
+ const proxy = settings.proxy;
35
34
  const req = (0, req_broker_1.makeReqBroker)({ settings, logger: mainLogger });
36
- const getSupportedEnvironmentsWithCache = utils.general.cachify(getSupportedEnvironments, () => 'default');
37
35
  return {
38
- getSupportedEnvironments: getSupportedEnvironmentsWithCache,
36
+ preTakeScreenshot,
39
37
  takeScreenshots,
40
38
  takeSnapshots,
41
39
  };
42
- async function getSupportedEnvironments({ logger: _logger }) {
43
- const response = await (0, req_1.default)(settings.supportedEnvironmentsUrl);
40
+ async function preTakeScreenshot({ logger = mainLogger } = {}) {
41
+ var _a;
42
+ logger = logger.extend(mainLogger, { tags: [`nml-request-${utils.general.shortid()}`] });
43
+ logger.log('Request "preTakeScreenshot" called');
44
+ const response = await req(brokerUrl, {
45
+ name: 'PRE_TAKE_SCREENSHOT',
46
+ body: {
47
+ protocolVersion: '1.0',
48
+ name: 'PRE_TAKE_SCREENSHOT',
49
+ key: utils.general.guid(),
50
+ payload: {},
51
+ },
52
+ logger,
53
+ });
44
54
  const result = await response.json();
45
- return result;
55
+ if (((_a = result === null || result === void 0 ? void 0 : result.payload) === null || _a === void 0 ? void 0 : _a.result) === 'success')
56
+ logger.log('Request "preTakeScreenshot" finished successfully with body', result.payload);
57
+ else
58
+ throw new Error(`There was a problem in pre take screenshot. The provided error message was "${result}"`);
59
+ brokerUrl = result.nextPath;
46
60
  }
47
61
  async function takeScreenshots({ settings, logger = mainLogger, }) {
62
+ var _a, _b;
48
63
  logger = logger.extend(mainLogger, { tags: [`nml-request-${utils.general.shortid()}`] });
49
64
  logger.log('Request "takeScreenshots" called with settings', settings);
50
- const supportedEnvironments = await getSupportedEnvironmentsWithCache({ logger });
51
- const { localEnvironment, renderEnvironments, environmentSettings } = settings.environments.reduce((result, environment) => {
52
- var _a;
53
- if (!utils.types.has(environment, 'iosDeviceInfo') && !utils.types.has(environment, 'androidDeviceInfo')) {
54
- result.localEnvironment = environment;
55
- }
56
- else {
57
- const deviceInfo = utils.types.has(environment, 'iosDeviceInfo')
58
- ? environment.iosDeviceInfo
59
- : environment.androidDeviceInfo;
60
- const orientation = deviceInfo.screenOrientation === 'landscape' ? 'landscapeLeft' : (_a = deviceInfo.screenOrientation) !== null && _a !== void 0 ? _a : 'portrait';
61
- const rawEnvironment = supportedEnvironments[deviceInfo.deviceName][orientation].env;
62
- result.renderEnvironments.push({
63
- requested: environment,
64
- environmentId: utils.general.guid(),
65
- deviceName: rawEnvironment.deviceInfo,
66
- os: rawEnvironment.os + (deviceInfo.version ? ` ${deviceInfo.version}` : ''),
67
- viewportSize: rawEnvironment.displaySize,
68
- });
69
- result.environmentSettings.push({ ...supportedEnvironments[deviceInfo.deviceName], orientation });
70
- }
71
- return result;
72
- }, {
73
- localEnvironment: undefined,
74
- renderEnvironments: [],
75
- environmentSettings: [],
65
+ const { localEnvironment, renderEnvironments, environmentSettings } = await (0, get_environments_info_1.getNMLEnvironmentsInfo)({
66
+ environments: settings.environments,
67
+ supportedEnvironmentsUrl,
68
+ proxy,
69
+ logger,
76
70
  });
77
71
  try {
78
72
  const response = await req(brokerUrl, {
@@ -85,6 +79,9 @@ function makeNMLRequests({ settings, logger: mainLogger, }) {
85
79
  ...settings,
86
80
  environments: undefined,
87
81
  deviceList: !localEnvironment ? environmentSettings : undefined,
82
+ scrollRootElement: fallbackId(settings.scrollRootElement),
83
+ region: fallbackId(settings.region),
84
+ selectorsToFindRegionsFor: (_a = settings.selectorsToFindRegionsFor) === null || _a === void 0 ? void 0 : _a.map(selector => fallbackId(selector)),
88
85
  },
89
86
  },
90
87
  logger,
@@ -95,12 +92,23 @@ function makeNMLRequests({ settings, logger: mainLogger, }) {
95
92
  if (Number(result.protocolVersion) >= 2) {
96
93
  logger.log(`Request "takeScreenshots" was performed on applitools lib v${result.nmlVersion} through protocol v${result.protocolVersion} on device`, result.payload.debugInfo);
97
94
  screenshots = localEnvironment
98
- ? [{ image: result.payload.result[0].result.screenshotUrl, environment: localEnvironment }]
95
+ ? [
96
+ {
97
+ image: result.payload.result[0].result.screenshotUrl,
98
+ environment: localEnvironment,
99
+ calculateRegions: (_b = result.payload.result[0].result) === null || _b === void 0 ? void 0 : _b.selectorRegions,
100
+ },
101
+ ]
99
102
  : renderEnvironments.map((environment, index) => {
103
+ var _a;
100
104
  if (result.payload.result[index].error) {
101
105
  throw new Error(`There was a problem in taking screenshot for environment ${JSON.stringify(environment)}. The provided error message was "${result.payload.result[index].error.message}" and had a stack trace of "${result.payload.result[index].error.stack}"`);
102
106
  }
103
- return { image: result.payload.result[index].result.screenshotUrl, environment };
107
+ return {
108
+ image: result.payload.result[index].result.screenshotUrl,
109
+ calculateRegions: (_a = result.payload.result[index].result) === null || _a === void 0 ? void 0 : _a.selectorRegions,
110
+ environment,
111
+ };
104
112
  });
105
113
  }
106
114
  else {
@@ -118,6 +126,9 @@ function makeNMLRequests({ settings, logger: mainLogger, }) {
118
126
  brokerUrl = error.nextPath;
119
127
  throw error;
120
128
  }
129
+ function fallbackId(selector) {
130
+ return utils.types.isString(selector) ? { type: 'accessibility-identifier', selector } : selector;
131
+ }
121
132
  }
122
133
  async function takeSnapshots({ settings, logger = mainLogger, }) {
123
134
  try {
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getNMLEnvironmentsInfo = void 0;
30
+ const utils = __importStar(require("@applitools/utils"));
31
+ const req_1 = __importDefault(require("@applitools/req"));
32
+ const getNMLSupportedEnvironmentsWithCache = utils.general.cachify(getNMLSupportedEnvironments);
33
+ async function getNMLSupportedEnvironments({ supportedEnvironmentsUrl, proxy, }) {
34
+ const response = await (0, req_1.default)(supportedEnvironmentsUrl, { proxy });
35
+ const result = await response.json();
36
+ return result;
37
+ }
38
+ async function getNMLEnvironmentsInfo({ environments, supportedEnvironmentsUrl, proxy, logger: _logger, }) {
39
+ const supportedEnvironments = await getNMLSupportedEnvironmentsWithCache({ supportedEnvironmentsUrl, proxy });
40
+ return environments.reduce((result, environment) => {
41
+ var _a;
42
+ if (!utils.types.has(environment, 'iosDeviceInfo') && !utils.types.has(environment, 'androidDeviceInfo')) {
43
+ result.localEnvironment = environment;
44
+ }
45
+ else {
46
+ const deviceInfo = utils.types.has(environment, 'iosDeviceInfo')
47
+ ? environment.iosDeviceInfo
48
+ : environment.androidDeviceInfo;
49
+ const orientation = deviceInfo.screenOrientation === 'landscape' ? 'landscapeLeft' : (_a = deviceInfo.screenOrientation) !== null && _a !== void 0 ? _a : 'portrait';
50
+ const rawEnvironment = supportedEnvironments[deviceInfo.deviceName][orientation].env;
51
+ result.renderEnvironments.push({
52
+ requested: environment,
53
+ environmentId: utils.general.guid(),
54
+ deviceName: rawEnvironment.deviceInfo,
55
+ os: rawEnvironment.os + (deviceInfo.version ? ` ${deviceInfo.version}` : ''),
56
+ viewportSize: rawEnvironment.displaySize,
57
+ });
58
+ result.environmentSettings.push({ ...supportedEnvironments[deviceInfo.deviceName], orientation });
59
+ }
60
+ return result;
61
+ }, {
62
+ localEnvironment: undefined,
63
+ renderEnvironments: [],
64
+ environmentSettings: [],
65
+ });
66
+ }
67
+ exports.getNMLEnvironmentsInfo = getNMLEnvironmentsInfo;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/nml-client",
3
- "version": "1.6.6",
3
+ "version": "1.7.1",
4
4
  "description": "Client to integrate the SDKs to the Native Mobile Library (NML)",
5
5
  "homepage": "https://applitools.com",
6
6
  "bugs": {
@@ -41,7 +41,7 @@
41
41
  "@applitools/utils": "1.7.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@applitools/spec-driver-webdriver": "^1.0.56",
44
+ "@applitools/spec-driver-webdriver": "^1.1.0",
45
45
  "@applitools/test-server": "^1.2.2",
46
46
  "@applitools/test-utils": "^1.5.17",
47
47
  "@types/node": "^12.20.55",
package/types/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './client';
2
2
  export * from './types';
3
3
  export * from './server/requests';
4
+ export * from './utils/get-environments-info';
@@ -0,0 +1,10 @@
1
+ import { type Logger } from '@applitools/logger';
2
+ import { type NMLRequests } from './server/requests';
3
+ type Options = {
4
+ requests: NMLRequests;
5
+ logger: Logger;
6
+ };
7
+ export declare function makePreTakeScreenshot({ requests, logger: defaultLogger }: Options): ({ logger }: {
8
+ logger?: Logger | undefined;
9
+ }) => Promise<void>;
10
+ export {};
@@ -1,9 +1,9 @@
1
1
  import type { BrokerServerSettings, ScreenshotSettings, Screenshot, SnapshotSettings, IOSSnapshot, AndroidSnapshot } from '../types';
2
2
  import { type Logger } from '@applitools/logger';
3
3
  export interface NMLRequests {
4
- getSupportedEnvironments(options: {
4
+ preTakeScreenshot(options: {
5
5
  logger?: Logger;
6
- }): Promise<Record<string, any>>;
6
+ }): Promise<void>;
7
7
  takeScreenshots(options: {
8
8
  settings: ScreenshotSettings;
9
9
  logger?: Logger;
package/types/types.d.ts CHANGED
@@ -2,6 +2,9 @@ import type { Size, Location, Region } from '@applitools/utils';
2
2
  import { type Logger } from '@applitools/logger';
3
3
  import { type Proxy } from '@applitools/req';
4
4
  export interface NMLClient {
5
+ preTakeScreenshot(options: {
6
+ logger?: Logger;
7
+ }): Promise<void>;
5
8
  takeScreenshots(options: {
6
9
  settings: ScreenshotSettings;
7
10
  logger?: Logger;
@@ -10,9 +13,6 @@ export interface NMLClient {
10
13
  settings: SnapshotSettings;
11
14
  logger?: Logger;
12
15
  }): Promise<TSnapshot[]>;
13
- getSupportedEnvironments(options: {
14
- logger?: Logger;
15
- }): Promise<Record<string, any>>;
16
16
  }
17
17
  export interface BrokerServerSettings {
18
18
  brokerUrl: string;
@@ -84,7 +84,7 @@ export type Screenshot = {
84
84
  locationInViewport?: Location;
85
85
  locationInView?: Location;
86
86
  fullViewSize?: Size;
87
- calculatedRegions?: Region[];
87
+ calculateRegions?: Region[][];
88
88
  environment: ActualEnvironment;
89
89
  };
90
90
  export type SnapshotSettings = {
@@ -0,0 +1,13 @@
1
+ import { ActualEnvironment, Environment } from '../types';
2
+ import { Logger } from '@applitools/logger';
3
+ import { Proxy } from '@applitools/req';
4
+ export declare function getNMLEnvironmentsInfo({ environments, supportedEnvironmentsUrl, proxy, logger, }: {
5
+ environments: Environment[];
6
+ supportedEnvironmentsUrl: string;
7
+ proxy?: Proxy;
8
+ logger?: Logger;
9
+ }): Promise<{
10
+ localEnvironment: ActualEnvironment | undefined;
11
+ renderEnvironments: ActualEnvironment[];
12
+ environmentSettings: any[];
13
+ }>;