@applitools/ec-client 1.2.14 → 1.2.16
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/proxy-server.js +1 -0
- package/dist/tunnels/manager-client.js +18 -3
- package/dist/tunnels/manager-server.js +17 -15
- package/dist/tunnels/manager.js +6 -6
- package/package.json +14 -16
- package/types/tunnels/manager-client.d.ts +3 -1
- package/types/tunnels/manager-server.d.ts +5 -2
- package/types/tunnels/manager.d.ts +1 -1
- package/types/types.d.ts +1 -0
package/dist/proxy-server.js
CHANGED
|
@@ -3,23 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.makeTunnelManagerClient = void 0;
|
|
4
4
|
const manager_server_1 = require("./manager-server");
|
|
5
5
|
const socket_1 = require("@applitools/socket");
|
|
6
|
+
const fs_1 = require("fs");
|
|
6
7
|
const net_1 = require("net");
|
|
7
8
|
async function makeTunnelManagerClient({ settings, } = {}) {
|
|
8
9
|
const path = process.env.APPLITOOLS_TUNNEL_MANAGER_SOCK ||
|
|
9
10
|
(process.platform === 'win32' ? '\\\\.\\pipe\\applitools-tunnel-manager' : '/tmp/applitools-tunnel-manager.sock');
|
|
10
11
|
const socket = (0, socket_1.makeSocket)((0, net_1.createConnection)({ path }), { transport: 'ipc' });
|
|
12
|
+
let server;
|
|
11
13
|
socket.once('error', async (error) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
try {
|
|
15
|
+
if (['ECONNREFUSED', 'ENOENT'].includes(error.code)) {
|
|
16
|
+
if (error.code === 'ECONNREFUSED') {
|
|
17
|
+
try {
|
|
18
|
+
await fs_1.promises.unlink(path);
|
|
19
|
+
}
|
|
20
|
+
catch { }
|
|
21
|
+
}
|
|
22
|
+
server = await (0, manager_server_1.makeTunnelManagerServerProcess)({ settings, path });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
14
26
|
socket.use((0, net_1.createConnection)({ path }));
|
|
15
27
|
}
|
|
16
28
|
});
|
|
17
29
|
socket.once('ready', () => socket.target.unref());
|
|
18
30
|
return {
|
|
19
|
-
create: (options) =>
|
|
31
|
+
create: (options) => {
|
|
32
|
+
return socket.request('Tunnel.create', options);
|
|
33
|
+
},
|
|
20
34
|
destroy: (options) => socket.request('Tunnel.destroy', options),
|
|
21
35
|
acquire: (options) => socket.request('Tunnel.acquire', options),
|
|
22
36
|
release: (options) => socket.request('Tunnel.release', options),
|
|
37
|
+
close: () => server === null || server === void 0 ? void 0 : server.close(),
|
|
23
38
|
};
|
|
24
39
|
}
|
|
25
40
|
exports.makeTunnelManagerClient = makeTunnelManagerClient;
|
|
@@ -30,15 +30,12 @@ const logger_1 = require("@applitools/logger");
|
|
|
30
30
|
const socket_1 = require("@applitools/socket");
|
|
31
31
|
const manager_1 = require("./manager");
|
|
32
32
|
const child_process_1 = require("child_process");
|
|
33
|
-
const fs_1 = require("fs");
|
|
34
33
|
const path = __importStar(require("path"));
|
|
35
34
|
const os = __importStar(require("os"));
|
|
36
35
|
const LOG_DIRNAME = (_a = process.env.APPLITOOLS_LOG_DIR) !== null && _a !== void 0 ? _a : path.resolve(os.tmpdir(), `applitools-tunnel-logs`);
|
|
37
|
-
async function makeTunnelManagerServer({ settings, path,
|
|
36
|
+
async function makeTunnelManagerServer({ settings, path, idleTimeout = 600000, // 10min
|
|
38
37
|
}) {
|
|
39
38
|
var _a;
|
|
40
|
-
if (unlink)
|
|
41
|
-
await fs_1.promises.unlink(path);
|
|
42
39
|
const server = await new Promise((resolve, reject) => {
|
|
43
40
|
const server = (0, net_1.createServer)().listen({ path });
|
|
44
41
|
server.on('error', error => reject(error));
|
|
@@ -56,7 +53,7 @@ async function makeTunnelManagerServer({ settings, path, unlink, idleTimeout = 6
|
|
|
56
53
|
let idle;
|
|
57
54
|
let serverClosed = false;
|
|
58
55
|
if (idleTimeout)
|
|
59
|
-
idle = setTimeout(
|
|
56
|
+
idle = setTimeout(close, idleTimeout);
|
|
60
57
|
server.on('close', () => {
|
|
61
58
|
if (idle)
|
|
62
59
|
clearTimeout(idle);
|
|
@@ -64,24 +61,29 @@ async function makeTunnelManagerServer({ settings, path, unlink, idleTimeout = 6
|
|
|
64
61
|
});
|
|
65
62
|
const sockets = new Set();
|
|
66
63
|
server.on('connection', client => {
|
|
67
|
-
const socket = (0, socket_1.makeSocket)(client, { transport: 'ipc', logger });
|
|
68
|
-
sockets.add(socket);
|
|
69
|
-
socket.on('close', () => sockets.delete(socket));
|
|
70
64
|
if (idle) {
|
|
71
65
|
clearTimeout(idle);
|
|
72
66
|
idle = null;
|
|
73
|
-
socket.on('close', () => {
|
|
74
|
-
sockets.delete(socket);
|
|
75
|
-
if (sockets.size > 0 || serverClosed)
|
|
76
|
-
return;
|
|
77
|
-
idle = setTimeout(() => server.close(), idleTimeout);
|
|
78
|
-
});
|
|
79
67
|
}
|
|
68
|
+
const socket = (0, socket_1.makeSocket)(client, { transport: 'ipc', logger });
|
|
69
|
+
sockets.add(socket);
|
|
70
|
+
socket.on('close', () => {
|
|
71
|
+
sockets.delete(socket);
|
|
72
|
+
if (sockets.size > 0 || serverClosed)
|
|
73
|
+
return;
|
|
74
|
+
idle = setTimeout(close, idleTimeout);
|
|
75
|
+
});
|
|
80
76
|
socket.command('Tunnel.create', manager.create);
|
|
81
77
|
socket.command('Tunnel.destroy', manager.destroy);
|
|
82
78
|
socket.command('Tunnel.acquire', manager.acquire);
|
|
83
79
|
socket.command('Tunnel.release', manager.release);
|
|
84
80
|
});
|
|
81
|
+
return { close };
|
|
82
|
+
async function close() {
|
|
83
|
+
server.close();
|
|
84
|
+
manager.close();
|
|
85
|
+
process.kill(0);
|
|
86
|
+
}
|
|
85
87
|
}
|
|
86
88
|
exports.makeTunnelManagerServer = makeTunnelManagerServer;
|
|
87
89
|
async function makeTunnelManagerServerProcess(options) {
|
|
@@ -97,7 +99,7 @@ async function makeTunnelManagerServerProcess(options) {
|
|
|
97
99
|
server.on('error', reject);
|
|
98
100
|
server.once('message', ({ name }) => {
|
|
99
101
|
if (name === 'started') {
|
|
100
|
-
resolve({
|
|
102
|
+
resolve({ close: async () => void server.kill() });
|
|
101
103
|
clearTimeout(timeout);
|
|
102
104
|
server.channel.unref();
|
|
103
105
|
}
|
package/dist/tunnels/manager.js
CHANGED
|
@@ -52,7 +52,7 @@ async function makeTunnelManager({ settings, logger, }) {
|
|
|
52
52
|
},
|
|
53
53
|
});
|
|
54
54
|
const pools = new Map();
|
|
55
|
-
return { create, destroy, acquire, release,
|
|
55
|
+
return { create, destroy, acquire, release, close };
|
|
56
56
|
async function acquire(credentials) {
|
|
57
57
|
const key = JSON.stringify(credentials);
|
|
58
58
|
let pool = pools.get(key);
|
|
@@ -118,7 +118,7 @@ async function makeTunnelManager({ settings, logger, }) {
|
|
|
118
118
|
server = { port, close: cleanupFunction };
|
|
119
119
|
return `http://localhost:${port}`;
|
|
120
120
|
}
|
|
121
|
-
async function
|
|
121
|
+
async function close() {
|
|
122
122
|
await (server === null || server === void 0 ? void 0 : server.close());
|
|
123
123
|
}
|
|
124
124
|
}
|
|
@@ -154,7 +154,7 @@ function makePool(options) {
|
|
|
154
154
|
item.timers.expiration = setTimeout(() => destroy(resource), options.timeout.expiration);
|
|
155
155
|
item.expireAt = Date.now() + options.timeout.expiration;
|
|
156
156
|
}
|
|
157
|
-
pool.set(resource, item);
|
|
157
|
+
pool.set(JSON.stringify(resource), item);
|
|
158
158
|
}
|
|
159
159
|
async function get() {
|
|
160
160
|
var _a;
|
|
@@ -167,7 +167,7 @@ function makePool(options) {
|
|
|
167
167
|
}
|
|
168
168
|
async function use(resource) {
|
|
169
169
|
var _a, _b;
|
|
170
|
-
const item = pool.get(resource);
|
|
170
|
+
const item = pool.get(JSON.stringify(resource));
|
|
171
171
|
if (!item)
|
|
172
172
|
return false;
|
|
173
173
|
if ((_a = item.timers) === null || _a === void 0 ? void 0 : _a.idle)
|
|
@@ -177,7 +177,7 @@ function makePool(options) {
|
|
|
177
177
|
}
|
|
178
178
|
async function release(resource) {
|
|
179
179
|
var _a, _b;
|
|
180
|
-
const item = pool.get(resource);
|
|
180
|
+
const item = pool.get(JSON.stringify(resource));
|
|
181
181
|
if (!item)
|
|
182
182
|
return false;
|
|
183
183
|
item.inuse -= 1;
|
|
@@ -196,7 +196,7 @@ function makePool(options) {
|
|
|
196
196
|
}
|
|
197
197
|
async function destroy(resource) {
|
|
198
198
|
var _a, _b, _c, _d;
|
|
199
|
-
const item = pool.get(resource);
|
|
199
|
+
const item = pool.get(JSON.stringify(resource));
|
|
200
200
|
if (!item)
|
|
201
201
|
return false;
|
|
202
202
|
item.destroyed = true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applitools/ec-client",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.16",
|
|
4
4
|
"homepage": "https://applitools.com",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/applitools/eyes.sdk.javascript1/issues"
|
|
@@ -53,33 +53,31 @@
|
|
|
53
53
|
"scripts": {
|
|
54
54
|
"lint": "node ../../node_modules/.bin/eslint '**/*.ts'",
|
|
55
55
|
"build": "node ../../node_modules/.bin/tsc --project ./tsconfig.build.json",
|
|
56
|
-
"test": "
|
|
57
|
-
"test:
|
|
58
|
-
"test:it": "
|
|
59
|
-
"test:
|
|
56
|
+
"test": "node ../../node_modules/.bin/mocha './test/**/*.spec.ts' --parallel --jobs ${MOCHA_JOBS:-15}",
|
|
57
|
+
"test:e2e": "MOCHA_GROUP=e2e node ../../node_modules/.bin/mocha './test/e2e/*.spec.ts'",
|
|
58
|
+
"test:it": "MOCHA_GROUP=it node ../../node_modules/.bin/mocha './test/it/*.spec.ts'",
|
|
59
|
+
"test:sanity": "yarn test",
|
|
60
60
|
"deps": "bongo deps",
|
|
61
61
|
"preversion": "bongo preversion",
|
|
62
62
|
"version": "bongo version",
|
|
63
|
-
"postversion": "bongo postversion
|
|
63
|
+
"postversion": "bongo postversion"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@applitools/execution-grid-tunnel": "1.0.
|
|
67
|
-
"@applitools/logger": "1.1.
|
|
68
|
-
"@applitools/req": "1.1.
|
|
69
|
-
"@applitools/socket": "1.0.
|
|
70
|
-
"@applitools/utils": "1.3.
|
|
66
|
+
"@applitools/execution-grid-tunnel": "1.0.20",
|
|
67
|
+
"@applitools/logger": "1.1.48",
|
|
68
|
+
"@applitools/req": "1.1.32",
|
|
69
|
+
"@applitools/socket": "1.0.10",
|
|
70
|
+
"@applitools/utils": "1.3.32",
|
|
71
71
|
"abort-controller": "3.0.0",
|
|
72
72
|
"yargs": "17.6.2"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@applitools/bongo": "^
|
|
76
|
-
"@applitools/test-server": "^1.1.
|
|
77
|
-
"@types/
|
|
78
|
-
"@types/node": "12",
|
|
75
|
+
"@applitools/bongo": "^3.0.1",
|
|
76
|
+
"@applitools/test-server": "^1.1.28",
|
|
77
|
+
"@types/node": "^12.20.55",
|
|
79
78
|
"@types/node-fetch": "^2.6.1",
|
|
80
79
|
"@types/selenium-webdriver": "^4.0.19",
|
|
81
80
|
"@types/yargs": "^17.0.19",
|
|
82
|
-
"mocha": "^9.2.2",
|
|
83
81
|
"nock": "^13.2.4",
|
|
84
82
|
"selenium-webdriver": "^4.1.2"
|
|
85
83
|
},
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type TunnelManager, type TunnelManagerSettings } from './manager';
|
|
2
2
|
export declare function makeTunnelManagerClient({ settings, }?: {
|
|
3
3
|
settings?: TunnelManagerSettings;
|
|
4
|
-
}): Promise<TunnelManager
|
|
4
|
+
}): Promise<TunnelManager & {
|
|
5
|
+
close(): Promise<void>;
|
|
6
|
+
}>;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { type TunnelManagerSettings } from './manager';
|
|
2
|
+
export type TunnelManagerServer = {
|
|
3
|
+
close(): Promise<void>;
|
|
4
|
+
};
|
|
2
5
|
export type TunnelManagerServerOptions = {
|
|
3
6
|
settings?: TunnelManagerSettings;
|
|
4
7
|
idleTimeout?: number;
|
|
5
8
|
path: string;
|
|
6
9
|
unlink?: boolean;
|
|
7
10
|
};
|
|
8
|
-
export declare function makeTunnelManagerServer({ settings, path,
|
|
9
|
-
export declare function makeTunnelManagerServerProcess(options: TunnelManagerServerOptions): Promise<
|
|
11
|
+
export declare function makeTunnelManagerServer({ settings, path, idleTimeout, }: TunnelManagerServerOptions): Promise<TunnelManagerServer>;
|
|
12
|
+
export declare function makeTunnelManagerServerProcess(options: TunnelManagerServerOptions): Promise<TunnelManagerServer>;
|