hsync 0.9.0 → 0.11.0
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/Readme.md +0 -4
- package/cli.js +43 -0
- package/config.js +6 -3
- package/connection.js +57 -7
- package/dist/hsync.js +371 -0
- package/dist/hsync.min.js +2 -0
- package/dist/hsync.min.js.LICENSE.txt +10 -0
- package/hsync-web.js +60 -0
- package/hsync.js +23 -0
- package/index.js +8 -4
- package/lib/socket-listen-handler.js +10 -4
- package/lib/socket-relay-handler.js +11 -3
- package/lib/web-handler.js +16 -8
- package/lib/web-net.js +67 -0
- package/package.json +18 -4
- package/webpack.config.js +16 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* The buffer module from node.js, for the browser.
|
|
3
|
+
*
|
|
4
|
+
* @author Feross Aboukhadijeh <https://feross.org>
|
|
5
|
+
* @license MIT
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/*! For license information please see mqtt.browser.js.LICENSE.txt */
|
|
9
|
+
|
|
10
|
+
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
package/hsync-web.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const mqtt = require('precompiled-mqtt');
|
|
2
|
+
const buffer = require('buffer');
|
|
3
|
+
const net = require('net-web');
|
|
4
|
+
const { createHsync, setNet, setMqtt } = require('./connection');
|
|
5
|
+
const config = require('./config');
|
|
6
|
+
|
|
7
|
+
// TODO need to make this work with web/service workers
|
|
8
|
+
window.Buffer = buffer.Buffer;
|
|
9
|
+
|
|
10
|
+
setNet(net);
|
|
11
|
+
setMqtt(mqtt);
|
|
12
|
+
|
|
13
|
+
async function dynamicConnect(dynamicHost, useLocalStorage) {
|
|
14
|
+
let con;
|
|
15
|
+
if (useLocalStorage) {
|
|
16
|
+
const localConfigStr = localStorage.getItem('hsyncConfig');
|
|
17
|
+
if (localConfigStr) {
|
|
18
|
+
const localConfig = JSON.parse(localConfigStr);
|
|
19
|
+
if ((Date.now() - localConfig.created) < (localConfig.timeout * 0.66)) {
|
|
20
|
+
config.hsyncSecret = localConfig.hsyncSecret;
|
|
21
|
+
config.hsyncServer = localConfig.hsyncServer;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (!config.hsyncSecret) {
|
|
26
|
+
config.dynamicHost = dynamicHost || config.defaultDynamicHost;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
con = await createHsync(config);
|
|
30
|
+
|
|
31
|
+
if (config.dynamicHost) {
|
|
32
|
+
const storeConfig = {
|
|
33
|
+
hsyncSecret: con.hsyncSecret,
|
|
34
|
+
hsyncServer: con.hsyncServer,
|
|
35
|
+
timeout: con.dynamicTimeout,
|
|
36
|
+
created: Date.now(),
|
|
37
|
+
};
|
|
38
|
+
localStorage.setItem('hsyncConfig', JSON.stringify(storeConfig));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return con;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
config.dynamicHost = dynamicHost || config.defaultDynamicHost;
|
|
45
|
+
con = await createHsync(config);
|
|
46
|
+
|
|
47
|
+
return con;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const hsync = globalThis.hsync || {
|
|
53
|
+
createConnection: createHsync,
|
|
54
|
+
dynamicConnect,
|
|
55
|
+
net,
|
|
56
|
+
config,
|
|
57
|
+
};
|
|
58
|
+
globalThis.hsync = hsync;
|
|
59
|
+
|
|
60
|
+
module.exports = hsync;
|
package/hsync.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const net = require('net');
|
|
2
|
+
const mqtt = require('mqtt');
|
|
3
|
+
const { createHsync, setNet, setMqtt } = require('./connection');
|
|
4
|
+
const config = require('./config');
|
|
5
|
+
|
|
6
|
+
setNet(net);
|
|
7
|
+
setMqtt(mqtt);
|
|
8
|
+
|
|
9
|
+
async function dynamicConnect(dynamicHost) {
|
|
10
|
+
let con;
|
|
11
|
+
|
|
12
|
+
config.dynamicHost = dynamicHost || config.defaultDynamicHost;
|
|
13
|
+
con = await createHsync(config);
|
|
14
|
+
|
|
15
|
+
return con;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = {
|
|
19
|
+
createConnection: createHsync,
|
|
20
|
+
dynamicConnect,
|
|
21
|
+
config,
|
|
22
|
+
};
|
|
23
|
+
|
package/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
1
|
const config = require('./config');
|
|
3
|
-
const {
|
|
2
|
+
const { createConnection } = require('./hsync');
|
|
3
|
+
|
|
4
|
+
const [defaultCon] = config.connections;
|
|
5
|
+
if (!defaultCon.hsyncServer && !defaultCon.dynamicHost) {
|
|
6
|
+
defaultCon.dynamicHost = config.defaultDynamicHost;
|
|
7
|
+
}
|
|
4
8
|
|
|
5
9
|
config.connections.forEach((conConfig) => {
|
|
6
|
-
const con =
|
|
7
|
-
});
|
|
10
|
+
const con = createConnection(conConfig);
|
|
11
|
+
});
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
const net = require('net');
|
|
2
1
|
const debug = require('debug')('hsync:listener');
|
|
3
2
|
const debugError = require('debug')('hsync:error');
|
|
4
3
|
|
|
5
4
|
const { createRPCPeer } = require('./rpc');
|
|
6
5
|
|
|
7
6
|
debugError.color = 1;
|
|
7
|
+
let net;
|
|
8
8
|
|
|
9
|
-
function
|
|
9
|
+
function setNet(netImpl) {
|
|
10
|
+
net = netImpl;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function createSocketListenHandler({hostName, port, targetPort, targetHost, hsyncClient}) {
|
|
10
14
|
debug('creating handler', hostName, port, targetPort, targetHost);
|
|
11
15
|
|
|
12
16
|
const sockets = {};
|
|
@@ -63,7 +67,6 @@ function createHandler({hostName, port, targetPort, targetHost, hsyncClient}) {
|
|
|
63
67
|
socket.end();
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
|
|
67
70
|
});
|
|
68
71
|
|
|
69
72
|
socketServer.listen(port);
|
|
@@ -89,4 +92,7 @@ function createHandler({hostName, port, targetPort, targetHost, hsyncClient}) {
|
|
|
89
92
|
};
|
|
90
93
|
}
|
|
91
94
|
|
|
92
|
-
module.exports =
|
|
95
|
+
module.exports = {
|
|
96
|
+
createSocketListenHandler,
|
|
97
|
+
setNet,
|
|
98
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const net = require('net');
|
|
2
1
|
const debug = require('debug')('hsync:relay');
|
|
3
2
|
const debugError = require('debug')('hsync:error');
|
|
4
3
|
|
|
@@ -6,13 +5,19 @@ const { createRPCPeer } = require('./rpc');
|
|
|
6
5
|
|
|
7
6
|
debugError.color = 1;
|
|
8
7
|
|
|
8
|
+
let net;
|
|
9
|
+
|
|
10
|
+
function setNet(netImpl) {
|
|
11
|
+
net = netImpl;
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
function createHandler({hostName, port, targetPort, targetHost, hsyncClient}) {
|
|
10
15
|
|
|
11
16
|
const sockets = {};
|
|
12
17
|
|
|
13
18
|
const peer = createRPCPeer({hostName, hsyncClient});
|
|
14
19
|
|
|
15
|
-
const socketServer = net.createServer((socket) => {
|
|
20
|
+
const socketServer = net.createServer(async (socket) => {
|
|
16
21
|
|
|
17
22
|
socket.socketId = b64id.generateId();
|
|
18
23
|
sockets[socket.socketId] = socket;
|
|
@@ -85,4 +90,7 @@ function createHandler({hostName, port, targetPort, targetHost, hsyncClient}) {
|
|
|
85
90
|
};
|
|
86
91
|
}
|
|
87
92
|
|
|
88
|
-
module.exports =
|
|
93
|
+
module.exports = {
|
|
94
|
+
createHandler,
|
|
95
|
+
setNet,
|
|
96
|
+
};
|
package/lib/web-handler.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
const net = require('net');
|
|
2
1
|
const debug = require('debug')('hsync:web');
|
|
3
2
|
const debugError = require('debug')('hsync:error');
|
|
4
3
|
|
|
5
4
|
debugError.color = 1;
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
let net;
|
|
7
|
+
|
|
8
|
+
function setNet(netImpl) {
|
|
9
|
+
net = netImpl;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function createWebHandler({myHostName, localHost, port, mqConn}) {
|
|
8
13
|
|
|
9
14
|
const sockets = {};
|
|
10
15
|
|
|
@@ -26,11 +31,6 @@ function createHanlder({myHostName, localHost, port, mqConn}) {
|
|
|
26
31
|
socket = new net.Socket();
|
|
27
32
|
socket.socketId = socketId;
|
|
28
33
|
sockets[socketId] = socket;
|
|
29
|
-
socket.connect(port, localHost, () => {
|
|
30
|
-
debug(`\nCONNECTED TO ${localHost}:${port}`, socket.socketId);
|
|
31
|
-
debug('← ' + message.slice(0, 200).toString().split('\r\n')[0], message.length);
|
|
32
|
-
socket.write(message);
|
|
33
|
-
});
|
|
34
34
|
socket.on('data', (data) => {
|
|
35
35
|
if (!socket.dataRecieved) {
|
|
36
36
|
const logData = data.slice(0, 200).toString().split('\r\n')[0];
|
|
@@ -51,6 +51,11 @@ function createHanlder({myHostName, localHost, port, mqConn}) {
|
|
|
51
51
|
delete sockets[socket.socketId];
|
|
52
52
|
debugError('error connecting', localHost, port, err);
|
|
53
53
|
});
|
|
54
|
+
socket.connect(port, localHost, () => {
|
|
55
|
+
debug(`\nCONNECTED TO ${localHost}:${port}`, socket.socketId);
|
|
56
|
+
debug('← ' + message.slice(0, 200).toString().split('\r\n')[0], message.length);
|
|
57
|
+
socket.write(message);
|
|
58
|
+
});
|
|
54
59
|
return;
|
|
55
60
|
}
|
|
56
61
|
|
|
@@ -80,4 +85,7 @@ function createHanlder({myHostName, localHost, port, mqConn}) {
|
|
|
80
85
|
};
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
module.exports =
|
|
88
|
+
module.exports = {
|
|
89
|
+
createWebHandler,
|
|
90
|
+
setNet,
|
|
91
|
+
};
|
package/lib/web-net.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const EventEmitter = require('events').EventEmitter;
|
|
2
|
+
|
|
3
|
+
const events = new EventEmitter();
|
|
4
|
+
|
|
5
|
+
const listeners = {};
|
|
6
|
+
|
|
7
|
+
function Socket() {
|
|
8
|
+
const socket = new EventEmitter();
|
|
9
|
+
|
|
10
|
+
socket.connect = function(port, host, clientCallback) {
|
|
11
|
+
events.emit(('socket_connect_' + port), {
|
|
12
|
+
port,
|
|
13
|
+
host,
|
|
14
|
+
clientSocket: socket,
|
|
15
|
+
clientCallback,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
socket.write = function(message) {
|
|
20
|
+
if (socket.serverSocket) {
|
|
21
|
+
socket.serverSocket.emit('data', message);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
socket.end = function() {
|
|
26
|
+
if (socket.serverSocket) {
|
|
27
|
+
socket.serverSocket.emit('close');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return socket;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function createServer(cb) {
|
|
36
|
+
const server = new EventEmitter();
|
|
37
|
+
server.listen = (port) => {
|
|
38
|
+
console.log('server.listen', port);
|
|
39
|
+
listeners['l' + port] = server;
|
|
40
|
+
events.on('socket_connect_' + port, ({ clientSocket, clientCallback }) => {
|
|
41
|
+
console.log('socket_connect_' + port, clientSocket);
|
|
42
|
+
const serverSocket = new EventEmitter();
|
|
43
|
+
clientSocket.serverSocket = serverSocket;
|
|
44
|
+
if (server.cb) {
|
|
45
|
+
server.cb(serverSocket);
|
|
46
|
+
}
|
|
47
|
+
serverSocket.write = (data) => {
|
|
48
|
+
clientSocket.emit('data', data);
|
|
49
|
+
}
|
|
50
|
+
serverSocket.end = () => {
|
|
51
|
+
clientSocket.emit('close');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (clientCallback) {
|
|
55
|
+
clientCallback();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
server.cb = cb;
|
|
60
|
+
return server;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
module.exports = {
|
|
64
|
+
Socket,
|
|
65
|
+
createServer,
|
|
66
|
+
events,
|
|
67
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hsync",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "client for hsync-server",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "hsync.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
8
8
|
"dev": "nodemon --inspect index.js",
|
|
9
|
-
"start": "node index.js"
|
|
9
|
+
"start": "node index.js",
|
|
10
|
+
"build": "webpack && BUILD_MODE=production webpack"
|
|
10
11
|
},
|
|
11
12
|
"repository": {
|
|
12
13
|
"type": "git",
|
|
@@ -19,15 +20,28 @@
|
|
|
19
20
|
"websocket",
|
|
20
21
|
"mqtt"
|
|
21
22
|
],
|
|
23
|
+
"browser": {
|
|
24
|
+
"./hsync": "./hsync-web"
|
|
25
|
+
},
|
|
26
|
+
"bin": {
|
|
27
|
+
"hsync": "./cli.js"
|
|
28
|
+
},
|
|
22
29
|
"author": "Luis Montes",
|
|
23
30
|
"license": "ISC",
|
|
24
31
|
"dependencies": {
|
|
25
32
|
"b64id": "^1.0.0",
|
|
33
|
+
"buffer": "^6.0.3",
|
|
34
|
+
"commander": "^10.0.0",
|
|
26
35
|
"debug": "^4.3.1",
|
|
36
|
+
"isomorphic-fetch": "^3.0.0",
|
|
27
37
|
"mqtt": "^4.2.6",
|
|
38
|
+
"net-web": "^0.2.0",
|
|
39
|
+
"precompiled-mqtt": "^4.3.14-beta",
|
|
28
40
|
"rawr": "^0.14.0"
|
|
29
41
|
},
|
|
30
42
|
"devDependencies": {
|
|
31
|
-
"nodemon": "^2.0.
|
|
43
|
+
"nodemon": "^2.0.20",
|
|
44
|
+
"webpack": "^5.75.0",
|
|
45
|
+
"webpack-cli": "^5.0.1"
|
|
32
46
|
}
|
|
33
47
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
|
|
3
|
+
const mode = process.env.BUILD_MODE || 'development';
|
|
4
|
+
|
|
5
|
+
module.exports = {
|
|
6
|
+
entry: "./hsync-web.js",
|
|
7
|
+
output: {
|
|
8
|
+
path: path.resolve(__dirname, 'dist'),
|
|
9
|
+
filename: mode === 'development' ? 'hsync.js' : 'hsync.min.js'
|
|
10
|
+
},
|
|
11
|
+
mode,
|
|
12
|
+
resolve: {
|
|
13
|
+
alias: {
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
};
|