UNPKG

2.03 kBJavaScriptView Raw
1"use strict";
2
3const Promise = require('bluebird');
4const logger = require('./logger').getLogger('tunnel');
5const _ = require('lodash');
6const ArgError = require('../errors.js').ArgError;
7const lazyRequire = require('./lazyRequire');
8
9function connect(options, authData) {
10 if (!options.tunnel) {
11 return Promise.resolve();
12 } else if (options.tunnel && !authData.ngrokToken) {
13 throw new ArgError("tunnel feature is not enabled, please contact support - info@testim.io.");
14 }
15
16 return new Promise((resolve, reject) => {
17 let connectOpt = {
18 proto: 'http',
19 addr: options.tunnelPort || 80,
20 authtoken: authData.ngrokToken
21 };
22
23 if (options.tunnelHostHeader) {
24 connectOpt.host_header = options.tunnelHostHeader;
25 }
26
27 return lazyRequire('ngrok').then(ngrok => {
28
29 return ngrok.connect(connectOpt)
30 .then((url) => {
31 if (options.tunnelUseHttpAddress && _.startsWith(url, "https://")) {
32 logger.info("replace https to http");
33 const newUrl = url.replace("https://", "http://");
34 return resolve(newUrl);
35 }
36 return resolve(url);
37 }).catch(err => {
38 const msg = "Failed to open tunnel error message error - " + err;
39 logger.error(msg, {err: err});
40 return reject(new Error(msg));
41 });
42 });
43
44 });
45}
46
47function disconnect(url) {
48 if (!url) {
49 return Promise.resolve();
50 }
51 return new Promise(function (resolve, reject) {
52 return lazyRequire('ngrok').then(ngrok => {
53 return ngrok.disconnect(url)
54 .then(resolve)
55 .catch((err) => {
56 logger.error("catch error - failed to close tunnel", {err: err});
57 reject(err);
58 });
59 });
60 });
61}
62
63module.exports = {
64 connect: connect,
65 disconnect: disconnect
66};