Skip to content

Commit 22de55c

Browse files
committed
Completely new structure.
1 parent c81c257 commit 22de55c

13 files changed

+474
-221
lines changed

api/connect.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var debug = require('debug')('api:connect')
2+
var request = require('request')
3+
var Promise = require('es6-promise').Promise;
4+
5+
function Connect(gateway) {
6+
7+
var api = gateway.api
8+
var logger = gateway.logger
9+
10+
api.connect = function (ip) {
11+
12+
return new Promise(function(resolve, reject) {
13+
14+
var url = 'http://' + ip + '/json'
15+
var options = {
16+
url: url,
17+
method: 'GET',
18+
json: true
19+
}
20+
21+
debug('api.connect', url)
22+
23+
request(options, function (err, data) {
24+
if(err) {
25+
debug('api.connect.error', err)
26+
reject(err)
27+
} else {
28+
debug('api.connect.complete', data.body)
29+
30+
data.body.forEach(function (target) {
31+
api.addTarget(target, url)
32+
})
33+
34+
gateway.combinedTargets = api.getTargetsOverview()
35+
resolve(gateway.combinedTargets)
36+
}
37+
})
38+
39+
})
40+
}
41+
42+
}
43+
44+
module.exports = Connect

api/launch.js

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
var debug = require('debug')('api:launch')
2+
var Promise = require('es6-promise').Promise;
3+
var launch = require('launchpad');
4+
var portscanner = require('portscanner')
5+
6+
function Launch(gateway) {
7+
8+
var openBrowsers = [];
9+
10+
var api = gateway.api
11+
var logger = gateway.logger
12+
13+
api.launchBrowser = function (browserName, url) {
14+
15+
return new Promise(function(resolve, reject) {
16+
17+
debug('command.launchBrowser', {
18+
browser: browserName,
19+
url: url
20+
})
21+
22+
switch (browserName) {
23+
case 'chrome':
24+
findPort().then(function(debugPort) {
25+
console.log('debugPort', debugPort)
26+
launch.local(function(err, local) {
27+
var options = {
28+
clean: true,
29+
args: ['--remote-debugging-port=' + debugPort]
30+
}
31+
32+
local.chrome(url, options, function(err, instance) {
33+
if(err) reject(err)
34+
35+
openBrowsers.push(instance)
36+
setTimeout(function() {
37+
resolve({
38+
debugPort: debugPort,
39+
debugUrl: 'localhost:' + debugPort
40+
})
41+
}, 2000)
42+
})
43+
})
44+
})
45+
break;
46+
47+
case 'canary':
48+
var debugPort = 9222
49+
// findPort().then(function(debugPort) {
50+
51+
launch.local(function(err, local) {
52+
var options = {
53+
clean: true,
54+
args: ['--remote-debugging-port=' + debugPort]
55+
}
56+
57+
local.canary(url, options, function(err, instance) {
58+
if(err) reject(err)
59+
60+
openBrowsers.push(instance)
61+
setTimeout(function() {
62+
resolve({
63+
debugPort: debugPort,
64+
debugUrl: 'localhost:' + debugPort
65+
})
66+
}, 2000)
67+
68+
})
69+
})
70+
// })
71+
break;
72+
73+
case 'opera':
74+
var debugPort = 9223
75+
76+
launch.local(function(err, local) {
77+
var options = {
78+
clean: true,
79+
args: ['--remote-debugging-port=' + debugPort]
80+
}
81+
82+
local.opera(url, options, function(err, instance) {
83+
if(err) reject(err)
84+
85+
openBrowsers.push(instance)
86+
setTimeout(function() {
87+
resolve({
88+
debugPort: debugPort,
89+
debugUrl: 'localhost:' + debugPort
90+
})
91+
}, 2000);
92+
})
93+
})
94+
// })
95+
break;
96+
}
97+
})
98+
}
99+
100+
api.closeOpenBrowsers = function() {
101+
openBrowsers.forEach(function(b) {
102+
b.stop()
103+
})
104+
}
105+
106+
var findPort = function() {
107+
return new Promise(function(resolve, reject) {
108+
portscanner.findAPortNotInUse(9222, 9300, '127.0.0.1', function(err, port) {
109+
if(err) reject(err)
110+
resolve(port)
111+
})
112+
})
113+
}
114+
}
115+
116+
module.exports = Launch

api/targets.js

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
var request = require('request')
2+
var Promise = require('es6-promise').Promise;
3+
4+
function Targets(gateway) {
5+
6+
var api = gateway.api
7+
var logger = gateway.logger
8+
9+
api.findTargetByUrl = function (url) {
10+
var combinedTargets = gateway.combinedTargets
11+
12+
var item = combinedTargets.filter(function (item) {
13+
return item.url === url
14+
})
15+
16+
return item ? item[0] : null
17+
}
18+
19+
api.findTargetById = function (id) {
20+
var combinedTargets = gateway.combinedTargets
21+
22+
var item = combinedTargets.filter(function (item) {
23+
return item.id === id
24+
})
25+
return item ? item[0] : null
26+
}
27+
28+
api.addTarget = function (info, sourceKey) {
29+
var targets = gateway.targets
30+
var id = info.id
31+
var webSocketUrl = (process.env.HEROKU_URL ? process.env.HEROKU_URL : ('localhost:' + app.get('port'))) + '/devtools/page/' + id
32+
33+
var target = {
34+
description: info.description,
35+
devtoolsFrontendUrl: '/devtools/devtools.html?ws=' + webSocketUrl,
36+
devtoolsUrl: 'chrome-devtools://devtools/bundled/devtools.html?ws=' + webSocketUrl + '&remoteFrontend=true',
37+
id: id,
38+
title: info.title,
39+
type: 'page',
40+
url: info.url,
41+
webSocketDebuggerUrl: 'ws://' + webSocketUrl,
42+
clientUrls: [info.webSocketDebuggerUrl],
43+
source: sourceKey,
44+
connections: []
45+
}
46+
47+
targets[sourceKey] = targets[sourceKey] || {}
48+
targets[sourceKey][info.id] = target
49+
}
50+
51+
api.getTargetsOverview = function () {
52+
var unifiedTargets = []
53+
var targets = gateway.targets
54+
55+
Object.keys(targets).forEach(function (sourceKey) {
56+
var targetList = targets[sourceKey]
57+
58+
Object.keys(targetList).forEach(function (targetKey) {
59+
var target = targetList[targetKey]
60+
61+
if (!unifiedTargets[target.url]) { // New
62+
unifiedTargets[target.url] = target
63+
} else { // Pad client to clientUrls
64+
unifiedTargets[target.url].clientUrls.push(target.clientUrls[0])
65+
}
66+
})
67+
})
68+
69+
return Object.keys(unifiedTargets).map(function (key) {
70+
return unifiedTargets[key]
71+
})
72+
73+
}
74+
}
75+
76+
module.exports = Targets

http/connect.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var request = require('request')
2+
3+
function Connect(gateway) {
4+
5+
var app = gateway.app
6+
7+
app.get('/connect', function (req, res) {
8+
var ips = (req.query['ip'] || '').split(',')
9+
var ports = (req.query['port'] || '').split(',')
10+
11+
logger.info('http.connect', {
12+
ips: ips
13+
})
14+
15+
ips.forEach(function (ip) {
16+
gateway.api.connect(ip);
17+
})
18+
19+
ports.forEach(function (port) {
20+
gateway.api.connect('localhost:' + port);
21+
})
22+
23+
res.json({
24+
msg: 'Ok'
25+
})
26+
})
27+
28+
}
29+
30+
module.exports = Connect

http/core.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
var debug = require('debug')('http:core')
2+
var express = require('express')
3+
var http = require('http')
4+
5+
var logger = require('../logger')
6+
7+
function HTTP(gateway) {
8+
9+
debug('http.booting')
10+
11+
var app = express()
12+
app.set('port', gateway.options.httpPort)
13+
14+
app.get('/', function (req, res) {
15+
logger.info('http.index')
16+
res.json({
17+
msg: 'Hello! This is RemoteDebug Gateway'
18+
})
19+
})
20+
21+
var server = http.Server(app)
22+
23+
server.listen(app.get('port'), function () {
24+
debug('http.listening')
25+
debug('- listening on port %d in %s mode', app.get('port'), app.settings.env)
26+
})
27+
28+
this.app = app
29+
this.server = server
30+
31+
return this
32+
33+
}
34+
35+
module.exports = HTTP
36+

http/json.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var clone = require('clone')
2+
3+
function JSON(gateway) {
4+
5+
var app = gateway.app
6+
var logger = gateway.logger
7+
8+
app.get('/json', function (req, res) {
9+
10+
var combinedTargets = gateway.combinedTargets
11+
var formattedTargets = Object.keys(combinedTargets).map(function (key) {
12+
var target = clone(combinedTargets[key], false)
13+
delete target.connections
14+
return target
15+
})
16+
17+
logger.info('http.json', {
18+
targets: formattedTargets
19+
})
20+
21+
res.send(formattedTargets)
22+
})
23+
24+
}
25+
26+
module.exports = JSON;

0 commit comments

Comments
 (0)