clone3 commited on
Commit
f1aa5a4
·
verified ·
1 Parent(s): 5046b21

Upload 4 files

Browse files
Files changed (4) hide show
  1. app/index.html +66 -0
  2. app/package-lock.json +1381 -0
  3. app/package.json +10 -0
  4. app/server.js +64 -0
app/index.html ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <html>
2
+ <head>
3
+ <title>SSH Terminal</title>
4
+ <link rel="stylesheet" href="/xterm.css" />
5
+ <script src="/xterm.js"></script>
6
+ <script src="/xterm-addon-fit.js"></script>
7
+ <script src="/socket.io/socket.io.js"></script>
8
+ <script>
9
+ window.addEventListener('load', function() {
10
+ var terminalContainer = document.getElementById('terminal-container');
11
+ const term = new Terminal({ cursorBlink: true });
12
+ const fitAddon = new FitAddon.FitAddon();
13
+ term.loadAddon(fitAddon);
14
+ term.open(terminalContainer);
15
+ fitAddon.fit();
16
+
17
+ var socket = io() //.connect();
18
+ socket.on('connect', function() {
19
+ term.write('\r\n*** Connected to backend ***\r\n');
20
+ });
21
+
22
+ // Browser -> Backend
23
+ term.onKey(function (ev) {
24
+ socket.emit('data', ev.key);
25
+ });
26
+
27
+ // Backend -> Browser
28
+ socket.on('data', function(data) {
29
+ term.write(data);
30
+ });
31
+
32
+ socket.on('disconnect', function() {
33
+ term.write('\r\n*** Disconnected from backend ***\r\n');
34
+ });
35
+ }, false);
36
+ </script>
37
+ <style>
38
+ body {
39
+ font-family: helvetica, sans-serif, arial;
40
+ font-size: 1em;
41
+ color: #111;
42
+ }
43
+ h1 {
44
+ text-align: center;
45
+ }
46
+ #terminal-container {
47
+ width: 960px;
48
+ height: 600px;
49
+ margin: 0 auto;
50
+ padding: 2px;
51
+ }
52
+ #terminal-container .terminal {
53
+ background-color: #111;
54
+ color: #fafafa;
55
+ padding: 2px;
56
+ }
57
+ #terminal-container .terminal:focus .terminal-cursor {
58
+ background-color: #fafafa;
59
+ }
60
+ </style>
61
+ </head>
62
+ <body>
63
+ <h3>WebSSH</h3>
64
+ <div id="terminal-container"></div>
65
+ </body>
66
+ </html>
app/package-lock.json ADDED
@@ -0,0 +1,1381 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "app",
3
+ "lockfileVersion": 2,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "dependencies": {
8
+ "express": "^4.17.1",
9
+ "soc": "^0.2.0",
10
+ "socket.io": "^4.4.0",
11
+ "ssh2": "^1.5.0",
12
+ "xterm": "^4.15.0",
13
+ "xterm-addon-fit": "^0.5.0"
14
+ }
15
+ },
16
+ "node_modules/@types/component-emitter": {
17
+ "version": "1.2.11",
18
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
19
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
20
+ },
21
+ "node_modules/@types/cookie": {
22
+ "version": "0.4.1",
23
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
24
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
25
+ },
26
+ "node_modules/@types/cors": {
27
+ "version": "2.8.12",
28
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
29
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
30
+ },
31
+ "node_modules/@types/node": {
32
+ "version": "16.11.12",
33
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
34
+ "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
35
+ },
36
+ "node_modules/accepts": {
37
+ "version": "1.3.7",
38
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
39
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
40
+ "dependencies": {
41
+ "mime-types": "~2.1.24",
42
+ "negotiator": "0.6.2"
43
+ },
44
+ "engines": {
45
+ "node": ">= 0.6"
46
+ }
47
+ },
48
+ "node_modules/array-flatten": {
49
+ "version": "1.1.1",
50
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
51
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
52
+ },
53
+ "node_modules/asn1": {
54
+ "version": "0.2.6",
55
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
56
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
57
+ "dependencies": {
58
+ "safer-buffer": "~2.1.0"
59
+ }
60
+ },
61
+ "node_modules/base64-arraybuffer": {
62
+ "version": "1.0.1",
63
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
64
+ "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==",
65
+ "engines": {
66
+ "node": ">= 0.6.0"
67
+ }
68
+ },
69
+ "node_modules/base64id": {
70
+ "version": "2.0.0",
71
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
72
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
73
+ "engines": {
74
+ "node": "^4.5.0 || >= 5.9"
75
+ }
76
+ },
77
+ "node_modules/bcrypt-pbkdf": {
78
+ "version": "1.0.2",
79
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
80
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
81
+ "dependencies": {
82
+ "tweetnacl": "^0.14.3"
83
+ }
84
+ },
85
+ "node_modules/body-parser": {
86
+ "version": "1.19.0",
87
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
88
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
89
+ "dependencies": {
90
+ "bytes": "3.1.0",
91
+ "content-type": "~1.0.4",
92
+ "debug": "2.6.9",
93
+ "depd": "~1.1.2",
94
+ "http-errors": "1.7.2",
95
+ "iconv-lite": "0.4.24",
96
+ "on-finished": "~2.3.0",
97
+ "qs": "6.7.0",
98
+ "raw-body": "2.4.0",
99
+ "type-is": "~1.6.17"
100
+ },
101
+ "engines": {
102
+ "node": ">= 0.8"
103
+ }
104
+ },
105
+ "node_modules/bytes": {
106
+ "version": "3.1.0",
107
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
108
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
109
+ "engines": {
110
+ "node": ">= 0.8"
111
+ }
112
+ },
113
+ "node_modules/component-emitter": {
114
+ "version": "1.3.0",
115
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
116
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
117
+ },
118
+ "node_modules/content-disposition": {
119
+ "version": "0.5.3",
120
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
121
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
122
+ "dependencies": {
123
+ "safe-buffer": "5.1.2"
124
+ },
125
+ "engines": {
126
+ "node": ">= 0.6"
127
+ }
128
+ },
129
+ "node_modules/content-type": {
130
+ "version": "1.0.4",
131
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
132
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
133
+ "engines": {
134
+ "node": ">= 0.6"
135
+ }
136
+ },
137
+ "node_modules/cookie": {
138
+ "version": "0.4.0",
139
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
140
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
141
+ "engines": {
142
+ "node": ">= 0.6"
143
+ }
144
+ },
145
+ "node_modules/cookie-signature": {
146
+ "version": "1.0.6",
147
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
148
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
149
+ },
150
+ "node_modules/cors": {
151
+ "version": "2.8.5",
152
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
153
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
154
+ "dependencies": {
155
+ "object-assign": "^4",
156
+ "vary": "^1"
157
+ },
158
+ "engines": {
159
+ "node": ">= 0.10"
160
+ }
161
+ },
162
+ "node_modules/cpu-features": {
163
+ "version": "0.0.2",
164
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.2.tgz",
165
+ "integrity": "sha512-/2yieBqvMcRj8McNzkycjW2v3OIUOibBfd2dLEJ0nWts8NobAxwiyw9phVNS6oDL8x8tz9F7uNVFEVpJncQpeA==",
166
+ "hasInstallScript": true,
167
+ "optional": true,
168
+ "dependencies": {
169
+ "nan": "^2.14.1"
170
+ },
171
+ "engines": {
172
+ "node": ">=8.0.0"
173
+ }
174
+ },
175
+ "node_modules/debug": {
176
+ "version": "2.6.9",
177
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
178
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
179
+ "dependencies": {
180
+ "ms": "2.0.0"
181
+ }
182
+ },
183
+ "node_modules/depd": {
184
+ "version": "1.1.2",
185
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
186
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
187
+ "engines": {
188
+ "node": ">= 0.6"
189
+ }
190
+ },
191
+ "node_modules/destroy": {
192
+ "version": "1.0.4",
193
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
194
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
195
+ },
196
+ "node_modules/ee-first": {
197
+ "version": "1.1.1",
198
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
199
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
200
+ },
201
+ "node_modules/encodeurl": {
202
+ "version": "1.0.2",
203
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
204
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
205
+ "engines": {
206
+ "node": ">= 0.8"
207
+ }
208
+ },
209
+ "node_modules/engine.io": {
210
+ "version": "6.1.0",
211
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz",
212
+ "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
213
+ "dependencies": {
214
+ "@types/cookie": "^0.4.1",
215
+ "@types/cors": "^2.8.12",
216
+ "@types/node": ">=10.0.0",
217
+ "accepts": "~1.3.4",
218
+ "base64id": "2.0.0",
219
+ "cookie": "~0.4.1",
220
+ "cors": "~2.8.5",
221
+ "debug": "~4.3.1",
222
+ "engine.io-parser": "~5.0.0",
223
+ "ws": "~8.2.3"
224
+ },
225
+ "engines": {
226
+ "node": ">=10.0.0"
227
+ }
228
+ },
229
+ "node_modules/engine.io-parser": {
230
+ "version": "5.0.2",
231
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz",
232
+ "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==",
233
+ "dependencies": {
234
+ "base64-arraybuffer": "~1.0.1"
235
+ },
236
+ "engines": {
237
+ "node": ">=10.0.0"
238
+ }
239
+ },
240
+ "node_modules/engine.io/node_modules/cookie": {
241
+ "version": "0.4.1",
242
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
243
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
244
+ "engines": {
245
+ "node": ">= 0.6"
246
+ }
247
+ },
248
+ "node_modules/engine.io/node_modules/debug": {
249
+ "version": "4.3.3",
250
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
251
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
252
+ "dependencies": {
253
+ "ms": "2.1.2"
254
+ },
255
+ "engines": {
256
+ "node": ">=6.0"
257
+ },
258
+ "peerDependenciesMeta": {
259
+ "supports-color": {
260
+ "optional": true
261
+ }
262
+ }
263
+ },
264
+ "node_modules/engine.io/node_modules/ms": {
265
+ "version": "2.1.2",
266
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
267
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
268
+ },
269
+ "node_modules/escape-html": {
270
+ "version": "1.0.3",
271
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
272
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
273
+ },
274
+ "node_modules/etag": {
275
+ "version": "1.8.1",
276
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
277
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
278
+ "engines": {
279
+ "node": ">= 0.6"
280
+ }
281
+ },
282
+ "node_modules/express": {
283
+ "version": "4.17.1",
284
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
285
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
286
+ "dependencies": {
287
+ "accepts": "~1.3.7",
288
+ "array-flatten": "1.1.1",
289
+ "body-parser": "1.19.0",
290
+ "content-disposition": "0.5.3",
291
+ "content-type": "~1.0.4",
292
+ "cookie": "0.4.0",
293
+ "cookie-signature": "1.0.6",
294
+ "debug": "2.6.9",
295
+ "depd": "~1.1.2",
296
+ "encodeurl": "~1.0.2",
297
+ "escape-html": "~1.0.3",
298
+ "etag": "~1.8.1",
299
+ "finalhandler": "~1.1.2",
300
+ "fresh": "0.5.2",
301
+ "merge-descriptors": "1.0.1",
302
+ "methods": "~1.1.2",
303
+ "on-finished": "~2.3.0",
304
+ "parseurl": "~1.3.3",
305
+ "path-to-regexp": "0.1.7",
306
+ "proxy-addr": "~2.0.5",
307
+ "qs": "6.7.0",
308
+ "range-parser": "~1.2.1",
309
+ "safe-buffer": "5.1.2",
310
+ "send": "0.17.1",
311
+ "serve-static": "1.14.1",
312
+ "setprototypeof": "1.1.1",
313
+ "statuses": "~1.5.0",
314
+ "type-is": "~1.6.18",
315
+ "utils-merge": "1.0.1",
316
+ "vary": "~1.1.2"
317
+ },
318
+ "engines": {
319
+ "node": ">= 0.10.0"
320
+ }
321
+ },
322
+ "node_modules/finalhandler": {
323
+ "version": "1.1.2",
324
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
325
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
326
+ "dependencies": {
327
+ "debug": "2.6.9",
328
+ "encodeurl": "~1.0.2",
329
+ "escape-html": "~1.0.3",
330
+ "on-finished": "~2.3.0",
331
+ "parseurl": "~1.3.3",
332
+ "statuses": "~1.5.0",
333
+ "unpipe": "~1.0.0"
334
+ },
335
+ "engines": {
336
+ "node": ">= 0.8"
337
+ }
338
+ },
339
+ "node_modules/forwarded": {
340
+ "version": "0.2.0",
341
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
342
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
343
+ "engines": {
344
+ "node": ">= 0.6"
345
+ }
346
+ },
347
+ "node_modules/fresh": {
348
+ "version": "0.5.2",
349
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
350
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
351
+ "engines": {
352
+ "node": ">= 0.6"
353
+ }
354
+ },
355
+ "node_modules/http-errors": {
356
+ "version": "1.7.2",
357
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
358
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
359
+ "dependencies": {
360
+ "depd": "~1.1.2",
361
+ "inherits": "2.0.3",
362
+ "setprototypeof": "1.1.1",
363
+ "statuses": ">= 1.5.0 < 2",
364
+ "toidentifier": "1.0.0"
365
+ },
366
+ "engines": {
367
+ "node": ">= 0.6"
368
+ }
369
+ },
370
+ "node_modules/iconv-lite": {
371
+ "version": "0.4.24",
372
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
373
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
374
+ "dependencies": {
375
+ "safer-buffer": ">= 2.1.2 < 3"
376
+ },
377
+ "engines": {
378
+ "node": ">=0.10.0"
379
+ }
380
+ },
381
+ "node_modules/inherits": {
382
+ "version": "2.0.3",
383
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
384
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
385
+ },
386
+ "node_modules/ipaddr.js": {
387
+ "version": "1.9.1",
388
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
389
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
390
+ "engines": {
391
+ "node": ">= 0.10"
392
+ }
393
+ },
394
+ "node_modules/media-typer": {
395
+ "version": "0.3.0",
396
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
397
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
398
+ "engines": {
399
+ "node": ">= 0.6"
400
+ }
401
+ },
402
+ "node_modules/merge-descriptors": {
403
+ "version": "1.0.1",
404
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
405
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
406
+ },
407
+ "node_modules/methods": {
408
+ "version": "1.1.2",
409
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
410
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
411
+ "engines": {
412
+ "node": ">= 0.6"
413
+ }
414
+ },
415
+ "node_modules/mime": {
416
+ "version": "1.6.0",
417
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
418
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
419
+ "bin": {
420
+ "mime": "cli.js"
421
+ },
422
+ "engines": {
423
+ "node": ">=4"
424
+ }
425
+ },
426
+ "node_modules/mime-db": {
427
+ "version": "1.51.0",
428
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
429
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
430
+ "engines": {
431
+ "node": ">= 0.6"
432
+ }
433
+ },
434
+ "node_modules/mime-types": {
435
+ "version": "2.1.34",
436
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
437
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
438
+ "dependencies": {
439
+ "mime-db": "1.51.0"
440
+ },
441
+ "engines": {
442
+ "node": ">= 0.6"
443
+ }
444
+ },
445
+ "node_modules/ms": {
446
+ "version": "2.0.0",
447
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
448
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
449
+ },
450
+ "node_modules/nan": {
451
+ "version": "2.15.0",
452
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
453
+ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
454
+ "optional": true
455
+ },
456
+ "node_modules/negotiator": {
457
+ "version": "0.6.2",
458
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
459
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
460
+ "engines": {
461
+ "node": ">= 0.6"
462
+ }
463
+ },
464
+ "node_modules/object-assign": {
465
+ "version": "4.1.1",
466
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
467
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
468
+ "engines": {
469
+ "node": ">=0.10.0"
470
+ }
471
+ },
472
+ "node_modules/on-finished": {
473
+ "version": "2.3.0",
474
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
475
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
476
+ "dependencies": {
477
+ "ee-first": "1.1.1"
478
+ },
479
+ "engines": {
480
+ "node": ">= 0.8"
481
+ }
482
+ },
483
+ "node_modules/parseurl": {
484
+ "version": "1.3.3",
485
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
486
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
487
+ "engines": {
488
+ "node": ">= 0.8"
489
+ }
490
+ },
491
+ "node_modules/path-to-regexp": {
492
+ "version": "0.1.7",
493
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
494
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
495
+ },
496
+ "node_modules/proxy-addr": {
497
+ "version": "2.0.7",
498
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
499
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
500
+ "dependencies": {
501
+ "forwarded": "0.2.0",
502
+ "ipaddr.js": "1.9.1"
503
+ },
504
+ "engines": {
505
+ "node": ">= 0.10"
506
+ }
507
+ },
508
+ "node_modules/qs": {
509
+ "version": "6.7.0",
510
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
511
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
512
+ "engines": {
513
+ "node": ">=0.6"
514
+ }
515
+ },
516
+ "node_modules/range-parser": {
517
+ "version": "1.2.1",
518
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
519
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
520
+ "engines": {
521
+ "node": ">= 0.6"
522
+ }
523
+ },
524
+ "node_modules/raw-body": {
525
+ "version": "2.4.0",
526
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
527
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
528
+ "dependencies": {
529
+ "bytes": "3.1.0",
530
+ "http-errors": "1.7.2",
531
+ "iconv-lite": "0.4.24",
532
+ "unpipe": "1.0.0"
533
+ },
534
+ "engines": {
535
+ "node": ">= 0.8"
536
+ }
537
+ },
538
+ "node_modules/safe-buffer": {
539
+ "version": "5.1.2",
540
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
541
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
542
+ },
543
+ "node_modules/safer-buffer": {
544
+ "version": "2.1.2",
545
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
546
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
547
+ },
548
+ "node_modules/send": {
549
+ "version": "0.17.1",
550
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
551
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
552
+ "dependencies": {
553
+ "debug": "2.6.9",
554
+ "depd": "~1.1.2",
555
+ "destroy": "~1.0.4",
556
+ "encodeurl": "~1.0.2",
557
+ "escape-html": "~1.0.3",
558
+ "etag": "~1.8.1",
559
+ "fresh": "0.5.2",
560
+ "http-errors": "~1.7.2",
561
+ "mime": "1.6.0",
562
+ "ms": "2.1.1",
563
+ "on-finished": "~2.3.0",
564
+ "range-parser": "~1.2.1",
565
+ "statuses": "~1.5.0"
566
+ },
567
+ "engines": {
568
+ "node": ">= 0.8.0"
569
+ }
570
+ },
571
+ "node_modules/send/node_modules/ms": {
572
+ "version": "2.1.1",
573
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
574
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
575
+ },
576
+ "node_modules/serve-static": {
577
+ "version": "1.14.1",
578
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
579
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
580
+ "dependencies": {
581
+ "encodeurl": "~1.0.2",
582
+ "escape-html": "~1.0.3",
583
+ "parseurl": "~1.3.3",
584
+ "send": "0.17.1"
585
+ },
586
+ "engines": {
587
+ "node": ">= 0.8.0"
588
+ }
589
+ },
590
+ "node_modules/setprototypeof": {
591
+ "version": "1.1.1",
592
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
593
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
594
+ },
595
+ "node_modules/soc": {
596
+ "version": "0.2.0",
597
+ "resolved": "https://registry.npmjs.org/soc/-/soc-0.2.0.tgz",
598
+ "integrity": "sha1-gu/yy11F34Z680au8f3mPUx6hh8=",
599
+ "dependencies": {
600
+ "object-assign": "^4.0.1"
601
+ }
602
+ },
603
+ "node_modules/socket.io": {
604
+ "version": "4.4.0",
605
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz",
606
+ "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==",
607
+ "dependencies": {
608
+ "accepts": "~1.3.4",
609
+ "base64id": "~2.0.0",
610
+ "debug": "~4.3.2",
611
+ "engine.io": "~6.1.0",
612
+ "socket.io-adapter": "~2.3.3",
613
+ "socket.io-parser": "~4.0.4"
614
+ },
615
+ "engines": {
616
+ "node": ">=10.0.0"
617
+ }
618
+ },
619
+ "node_modules/socket.io-adapter": {
620
+ "version": "2.3.3",
621
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
622
+ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ=="
623
+ },
624
+ "node_modules/socket.io-parser": {
625
+ "version": "4.0.4",
626
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
627
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
628
+ "dependencies": {
629
+ "@types/component-emitter": "^1.2.10",
630
+ "component-emitter": "~1.3.0",
631
+ "debug": "~4.3.1"
632
+ },
633
+ "engines": {
634
+ "node": ">=10.0.0"
635
+ }
636
+ },
637
+ "node_modules/socket.io-parser/node_modules/debug": {
638
+ "version": "4.3.3",
639
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
640
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
641
+ "dependencies": {
642
+ "ms": "2.1.2"
643
+ },
644
+ "engines": {
645
+ "node": ">=6.0"
646
+ },
647
+ "peerDependenciesMeta": {
648
+ "supports-color": {
649
+ "optional": true
650
+ }
651
+ }
652
+ },
653
+ "node_modules/socket.io-parser/node_modules/ms": {
654
+ "version": "2.1.2",
655
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
656
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
657
+ },
658
+ "node_modules/socket.io/node_modules/debug": {
659
+ "version": "4.3.3",
660
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
661
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
662
+ "dependencies": {
663
+ "ms": "2.1.2"
664
+ },
665
+ "engines": {
666
+ "node": ">=6.0"
667
+ },
668
+ "peerDependenciesMeta": {
669
+ "supports-color": {
670
+ "optional": true
671
+ }
672
+ }
673
+ },
674
+ "node_modules/socket.io/node_modules/ms": {
675
+ "version": "2.1.2",
676
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
677
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
678
+ },
679
+ "node_modules/ssh2": {
680
+ "version": "1.5.0",
681
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.5.0.tgz",
682
+ "integrity": "sha512-iUmRkhH9KGeszQwDW7YyyqjsMTf4z+0o48Cp4xOwlY5LjtbIAvyd3fwnsoUZW/hXmTCRA3yt7S/Jb9uVjErVlA==",
683
+ "hasInstallScript": true,
684
+ "dependencies": {
685
+ "asn1": "^0.2.4",
686
+ "bcrypt-pbkdf": "^1.0.2",
687
+ "cpu-features": "0.0.2",
688
+ "nan": "^2.15.0"
689
+ },
690
+ "engines": {
691
+ "node": ">=10.16.0"
692
+ },
693
+ "optionalDependencies": {
694
+ "cpu-features": "0.0.2",
695
+ "nan": "^2.15.0"
696
+ }
697
+ },
698
+ "node_modules/statuses": {
699
+ "version": "1.5.0",
700
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
701
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
702
+ "engines": {
703
+ "node": ">= 0.6"
704
+ }
705
+ },
706
+ "node_modules/toidentifier": {
707
+ "version": "1.0.0",
708
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
709
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
710
+ "engines": {
711
+ "node": ">=0.6"
712
+ }
713
+ },
714
+ "node_modules/tweetnacl": {
715
+ "version": "0.14.5",
716
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
717
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
718
+ },
719
+ "node_modules/type-is": {
720
+ "version": "1.6.18",
721
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
722
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
723
+ "dependencies": {
724
+ "media-typer": "0.3.0",
725
+ "mime-types": "~2.1.24"
726
+ },
727
+ "engines": {
728
+ "node": ">= 0.6"
729
+ }
730
+ },
731
+ "node_modules/unpipe": {
732
+ "version": "1.0.0",
733
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
734
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
735
+ "engines": {
736
+ "node": ">= 0.8"
737
+ }
738
+ },
739
+ "node_modules/utils-merge": {
740
+ "version": "1.0.1",
741
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
742
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
743
+ "engines": {
744
+ "node": ">= 0.4.0"
745
+ }
746
+ },
747
+ "node_modules/vary": {
748
+ "version": "1.1.2",
749
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
750
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
751
+ "engines": {
752
+ "node": ">= 0.8"
753
+ }
754
+ },
755
+ "node_modules/ws": {
756
+ "version": "8.2.3",
757
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
758
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
759
+ "engines": {
760
+ "node": ">=10.0.0"
761
+ },
762
+ "peerDependencies": {
763
+ "bufferutil": "^4.0.1",
764
+ "utf-8-validate": "^5.0.2"
765
+ },
766
+ "peerDependenciesMeta": {
767
+ "bufferutil": {
768
+ "optional": true
769
+ },
770
+ "utf-8-validate": {
771
+ "optional": true
772
+ }
773
+ }
774
+ },
775
+ "node_modules/xterm": {
776
+ "version": "4.15.0",
777
+ "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.15.0.tgz",
778
+ "integrity": "sha512-Ik1GoSq1yqKZQ2LF37RPS01kX9t4TP8gpamUYblD09yvWX5mEYuMK4CcqH6+plgiNEZduhTz/UrcaWs97gOlOw=="
779
+ },
780
+ "node_modules/xterm-addon-fit": {
781
+ "version": "0.5.0",
782
+ "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz",
783
+ "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==",
784
+ "peerDependencies": {
785
+ "xterm": "^4.0.0"
786
+ }
787
+ }
788
+ },
789
+ "dependencies": {
790
+ "@types/component-emitter": {
791
+ "version": "1.2.11",
792
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
793
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
794
+ },
795
+ "@types/cookie": {
796
+ "version": "0.4.1",
797
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
798
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
799
+ },
800
+ "@types/cors": {
801
+ "version": "2.8.12",
802
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
803
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
804
+ },
805
+ "@types/node": {
806
+ "version": "16.11.12",
807
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
808
+ "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
809
+ },
810
+ "accepts": {
811
+ "version": "1.3.7",
812
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
813
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
814
+ "requires": {
815
+ "mime-types": "~2.1.24",
816
+ "negotiator": "0.6.2"
817
+ }
818
+ },
819
+ "array-flatten": {
820
+ "version": "1.1.1",
821
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
822
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
823
+ },
824
+ "asn1": {
825
+ "version": "0.2.6",
826
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
827
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
828
+ "requires": {
829
+ "safer-buffer": "~2.1.0"
830
+ }
831
+ },
832
+ "base64-arraybuffer": {
833
+ "version": "1.0.1",
834
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
835
+ "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA=="
836
+ },
837
+ "base64id": {
838
+ "version": "2.0.0",
839
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
840
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
841
+ },
842
+ "bcrypt-pbkdf": {
843
+ "version": "1.0.2",
844
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
845
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
846
+ "requires": {
847
+ "tweetnacl": "^0.14.3"
848
+ }
849
+ },
850
+ "body-parser": {
851
+ "version": "1.19.0",
852
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
853
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
854
+ "requires": {
855
+ "bytes": "3.1.0",
856
+ "content-type": "~1.0.4",
857
+ "debug": "2.6.9",
858
+ "depd": "~1.1.2",
859
+ "http-errors": "1.7.2",
860
+ "iconv-lite": "0.4.24",
861
+ "on-finished": "~2.3.0",
862
+ "qs": "6.7.0",
863
+ "raw-body": "2.4.0",
864
+ "type-is": "~1.6.17"
865
+ }
866
+ },
867
+ "bytes": {
868
+ "version": "3.1.0",
869
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
870
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
871
+ },
872
+ "component-emitter": {
873
+ "version": "1.3.0",
874
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
875
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
876
+ },
877
+ "content-disposition": {
878
+ "version": "0.5.3",
879
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
880
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
881
+ "requires": {
882
+ "safe-buffer": "5.1.2"
883
+ }
884
+ },
885
+ "content-type": {
886
+ "version": "1.0.4",
887
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
888
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
889
+ },
890
+ "cookie": {
891
+ "version": "0.4.0",
892
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
893
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
894
+ },
895
+ "cookie-signature": {
896
+ "version": "1.0.6",
897
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
898
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
899
+ },
900
+ "cors": {
901
+ "version": "2.8.5",
902
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
903
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
904
+ "requires": {
905
+ "object-assign": "^4",
906
+ "vary": "^1"
907
+ }
908
+ },
909
+ "cpu-features": {
910
+ "version": "0.0.2",
911
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.2.tgz",
912
+ "integrity": "sha512-/2yieBqvMcRj8McNzkycjW2v3OIUOibBfd2dLEJ0nWts8NobAxwiyw9phVNS6oDL8x8tz9F7uNVFEVpJncQpeA==",
913
+ "optional": true,
914
+ "requires": {
915
+ "nan": "^2.14.1"
916
+ }
917
+ },
918
+ "debug": {
919
+ "version": "2.6.9",
920
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
921
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
922
+ "requires": {
923
+ "ms": "2.0.0"
924
+ }
925
+ },
926
+ "depd": {
927
+ "version": "1.1.2",
928
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
929
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
930
+ },
931
+ "destroy": {
932
+ "version": "1.0.4",
933
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
934
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
935
+ },
936
+ "ee-first": {
937
+ "version": "1.1.1",
938
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
939
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
940
+ },
941
+ "encodeurl": {
942
+ "version": "1.0.2",
943
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
944
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
945
+ },
946
+ "engine.io": {
947
+ "version": "6.1.0",
948
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz",
949
+ "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
950
+ "requires": {
951
+ "@types/cookie": "^0.4.1",
952
+ "@types/cors": "^2.8.12",
953
+ "@types/node": ">=10.0.0",
954
+ "accepts": "~1.3.4",
955
+ "base64id": "2.0.0",
956
+ "cookie": "~0.4.1",
957
+ "cors": "~2.8.5",
958
+ "debug": "~4.3.1",
959
+ "engine.io-parser": "~5.0.0",
960
+ "ws": "~8.2.3"
961
+ },
962
+ "dependencies": {
963
+ "cookie": {
964
+ "version": "0.4.1",
965
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
966
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
967
+ },
968
+ "debug": {
969
+ "version": "4.3.3",
970
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
971
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
972
+ "requires": {
973
+ "ms": "2.1.2"
974
+ }
975
+ },
976
+ "ms": {
977
+ "version": "2.1.2",
978
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
979
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
980
+ }
981
+ }
982
+ },
983
+ "engine.io-parser": {
984
+ "version": "5.0.2",
985
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz",
986
+ "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==",
987
+ "requires": {
988
+ "base64-arraybuffer": "~1.0.1"
989
+ }
990
+ },
991
+ "escape-html": {
992
+ "version": "1.0.3",
993
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
994
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
995
+ },
996
+ "etag": {
997
+ "version": "1.8.1",
998
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
999
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1000
+ },
1001
+ "express": {
1002
+ "version": "4.17.1",
1003
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
1004
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
1005
+ "requires": {
1006
+ "accepts": "~1.3.7",
1007
+ "array-flatten": "1.1.1",
1008
+ "body-parser": "1.19.0",
1009
+ "content-disposition": "0.5.3",
1010
+ "content-type": "~1.0.4",
1011
+ "cookie": "0.4.0",
1012
+ "cookie-signature": "1.0.6",
1013
+ "debug": "2.6.9",
1014
+ "depd": "~1.1.2",
1015
+ "encodeurl": "~1.0.2",
1016
+ "escape-html": "~1.0.3",
1017
+ "etag": "~1.8.1",
1018
+ "finalhandler": "~1.1.2",
1019
+ "fresh": "0.5.2",
1020
+ "merge-descriptors": "1.0.1",
1021
+ "methods": "~1.1.2",
1022
+ "on-finished": "~2.3.0",
1023
+ "parseurl": "~1.3.3",
1024
+ "path-to-regexp": "0.1.7",
1025
+ "proxy-addr": "~2.0.5",
1026
+ "qs": "6.7.0",
1027
+ "range-parser": "~1.2.1",
1028
+ "safe-buffer": "5.1.2",
1029
+ "send": "0.17.1",
1030
+ "serve-static": "1.14.1",
1031
+ "setprototypeof": "1.1.1",
1032
+ "statuses": "~1.5.0",
1033
+ "type-is": "~1.6.18",
1034
+ "utils-merge": "1.0.1",
1035
+ "vary": "~1.1.2"
1036
+ }
1037
+ },
1038
+ "finalhandler": {
1039
+ "version": "1.1.2",
1040
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1041
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1042
+ "requires": {
1043
+ "debug": "2.6.9",
1044
+ "encodeurl": "~1.0.2",
1045
+ "escape-html": "~1.0.3",
1046
+ "on-finished": "~2.3.0",
1047
+ "parseurl": "~1.3.3",
1048
+ "statuses": "~1.5.0",
1049
+ "unpipe": "~1.0.0"
1050
+ }
1051
+ },
1052
+ "forwarded": {
1053
+ "version": "0.2.0",
1054
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1055
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1056
+ },
1057
+ "fresh": {
1058
+ "version": "0.5.2",
1059
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1060
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1061
+ },
1062
+ "http-errors": {
1063
+ "version": "1.7.2",
1064
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1065
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1066
+ "requires": {
1067
+ "depd": "~1.1.2",
1068
+ "inherits": "2.0.3",
1069
+ "setprototypeof": "1.1.1",
1070
+ "statuses": ">= 1.5.0 < 2",
1071
+ "toidentifier": "1.0.0"
1072
+ }
1073
+ },
1074
+ "iconv-lite": {
1075
+ "version": "0.4.24",
1076
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1077
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1078
+ "requires": {
1079
+ "safer-buffer": ">= 2.1.2 < 3"
1080
+ }
1081
+ },
1082
+ "inherits": {
1083
+ "version": "2.0.3",
1084
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1085
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1086
+ },
1087
+ "ipaddr.js": {
1088
+ "version": "1.9.1",
1089
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1090
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1091
+ },
1092
+ "media-typer": {
1093
+ "version": "0.3.0",
1094
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1095
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1096
+ },
1097
+ "merge-descriptors": {
1098
+ "version": "1.0.1",
1099
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1100
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1101
+ },
1102
+ "methods": {
1103
+ "version": "1.1.2",
1104
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1105
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1106
+ },
1107
+ "mime": {
1108
+ "version": "1.6.0",
1109
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1110
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1111
+ },
1112
+ "mime-db": {
1113
+ "version": "1.51.0",
1114
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
1115
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
1116
+ },
1117
+ "mime-types": {
1118
+ "version": "2.1.34",
1119
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
1120
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
1121
+ "requires": {
1122
+ "mime-db": "1.51.0"
1123
+ }
1124
+ },
1125
+ "ms": {
1126
+ "version": "2.0.0",
1127
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1128
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1129
+ },
1130
+ "nan": {
1131
+ "version": "2.15.0",
1132
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
1133
+ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
1134
+ "optional": true
1135
+ },
1136
+ "negotiator": {
1137
+ "version": "0.6.2",
1138
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1139
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1140
+ },
1141
+ "object-assign": {
1142
+ "version": "4.1.1",
1143
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1144
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
1145
+ },
1146
+ "on-finished": {
1147
+ "version": "2.3.0",
1148
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1149
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1150
+ "requires": {
1151
+ "ee-first": "1.1.1"
1152
+ }
1153
+ },
1154
+ "parseurl": {
1155
+ "version": "1.3.3",
1156
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1157
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1158
+ },
1159
+ "path-to-regexp": {
1160
+ "version": "0.1.7",
1161
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1162
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1163
+ },
1164
+ "proxy-addr": {
1165
+ "version": "2.0.7",
1166
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1167
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1168
+ "requires": {
1169
+ "forwarded": "0.2.0",
1170
+ "ipaddr.js": "1.9.1"
1171
+ }
1172
+ },
1173
+ "qs": {
1174
+ "version": "6.7.0",
1175
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1176
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1177
+ },
1178
+ "range-parser": {
1179
+ "version": "1.2.1",
1180
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1181
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1182
+ },
1183
+ "raw-body": {
1184
+ "version": "2.4.0",
1185
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1186
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1187
+ "requires": {
1188
+ "bytes": "3.1.0",
1189
+ "http-errors": "1.7.2",
1190
+ "iconv-lite": "0.4.24",
1191
+ "unpipe": "1.0.0"
1192
+ }
1193
+ },
1194
+ "safe-buffer": {
1195
+ "version": "5.1.2",
1196
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1197
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1198
+ },
1199
+ "safer-buffer": {
1200
+ "version": "2.1.2",
1201
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1202
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1203
+ },
1204
+ "send": {
1205
+ "version": "0.17.1",
1206
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1207
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1208
+ "requires": {
1209
+ "debug": "2.6.9",
1210
+ "depd": "~1.1.2",
1211
+ "destroy": "~1.0.4",
1212
+ "encodeurl": "~1.0.2",
1213
+ "escape-html": "~1.0.3",
1214
+ "etag": "~1.8.1",
1215
+ "fresh": "0.5.2",
1216
+ "http-errors": "~1.7.2",
1217
+ "mime": "1.6.0",
1218
+ "ms": "2.1.1",
1219
+ "on-finished": "~2.3.0",
1220
+ "range-parser": "~1.2.1",
1221
+ "statuses": "~1.5.0"
1222
+ },
1223
+ "dependencies": {
1224
+ "ms": {
1225
+ "version": "2.1.1",
1226
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1227
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1228
+ }
1229
+ }
1230
+ },
1231
+ "serve-static": {
1232
+ "version": "1.14.1",
1233
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1234
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1235
+ "requires": {
1236
+ "encodeurl": "~1.0.2",
1237
+ "escape-html": "~1.0.3",
1238
+ "parseurl": "~1.3.3",
1239
+ "send": "0.17.1"
1240
+ }
1241
+ },
1242
+ "setprototypeof": {
1243
+ "version": "1.1.1",
1244
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1245
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1246
+ },
1247
+ "soc": {
1248
+ "version": "0.2.0",
1249
+ "resolved": "https://registry.npmjs.org/soc/-/soc-0.2.0.tgz",
1250
+ "integrity": "sha1-gu/yy11F34Z680au8f3mPUx6hh8=",
1251
+ "requires": {
1252
+ "object-assign": "^4.0.1"
1253
+ }
1254
+ },
1255
+ "socket.io": {
1256
+ "version": "4.4.0",
1257
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.0.tgz",
1258
+ "integrity": "sha512-bnpJxswR9ov0Bw6ilhCvO38/1WPtE3eA2dtxi2Iq4/sFebiDJQzgKNYA7AuVVdGW09nrESXd90NbZqtDd9dzRQ==",
1259
+ "requires": {
1260
+ "accepts": "~1.3.4",
1261
+ "base64id": "~2.0.0",
1262
+ "debug": "~4.3.2",
1263
+ "engine.io": "~6.1.0",
1264
+ "socket.io-adapter": "~2.3.3",
1265
+ "socket.io-parser": "~4.0.4"
1266
+ },
1267
+ "dependencies": {
1268
+ "debug": {
1269
+ "version": "4.3.3",
1270
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
1271
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
1272
+ "requires": {
1273
+ "ms": "2.1.2"
1274
+ }
1275
+ },
1276
+ "ms": {
1277
+ "version": "2.1.2",
1278
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1279
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1280
+ }
1281
+ }
1282
+ },
1283
+ "socket.io-adapter": {
1284
+ "version": "2.3.3",
1285
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
1286
+ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ=="
1287
+ },
1288
+ "socket.io-parser": {
1289
+ "version": "4.0.4",
1290
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
1291
+ "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
1292
+ "requires": {
1293
+ "@types/component-emitter": "^1.2.10",
1294
+ "component-emitter": "~1.3.0",
1295
+ "debug": "~4.3.1"
1296
+ },
1297
+ "dependencies": {
1298
+ "debug": {
1299
+ "version": "4.3.3",
1300
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
1301
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
1302
+ "requires": {
1303
+ "ms": "2.1.2"
1304
+ }
1305
+ },
1306
+ "ms": {
1307
+ "version": "2.1.2",
1308
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1309
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1310
+ }
1311
+ }
1312
+ },
1313
+ "ssh2": {
1314
+ "version": "1.5.0",
1315
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.5.0.tgz",
1316
+ "integrity": "sha512-iUmRkhH9KGeszQwDW7YyyqjsMTf4z+0o48Cp4xOwlY5LjtbIAvyd3fwnsoUZW/hXmTCRA3yt7S/Jb9uVjErVlA==",
1317
+ "requires": {
1318
+ "asn1": "^0.2.4",
1319
+ "bcrypt-pbkdf": "^1.0.2",
1320
+ "cpu-features": "0.0.2",
1321
+ "nan": "^2.15.0"
1322
+ }
1323
+ },
1324
+ "statuses": {
1325
+ "version": "1.5.0",
1326
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1327
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1328
+ },
1329
+ "toidentifier": {
1330
+ "version": "1.0.0",
1331
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1332
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1333
+ },
1334
+ "tweetnacl": {
1335
+ "version": "0.14.5",
1336
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
1337
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
1338
+ },
1339
+ "type-is": {
1340
+ "version": "1.6.18",
1341
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1342
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1343
+ "requires": {
1344
+ "media-typer": "0.3.0",
1345
+ "mime-types": "~2.1.24"
1346
+ }
1347
+ },
1348
+ "unpipe": {
1349
+ "version": "1.0.0",
1350
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1351
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1352
+ },
1353
+ "utils-merge": {
1354
+ "version": "1.0.1",
1355
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1356
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1357
+ },
1358
+ "vary": {
1359
+ "version": "1.1.2",
1360
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1361
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1362
+ },
1363
+ "ws": {
1364
+ "version": "8.2.3",
1365
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
1366
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
1367
+ "requires": {}
1368
+ },
1369
+ "xterm": {
1370
+ "version": "4.15.0",
1371
+ "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.15.0.tgz",
1372
+ "integrity": "sha512-Ik1GoSq1yqKZQ2LF37RPS01kX9t4TP8gpamUYblD09yvWX5mEYuMK4CcqH6+plgiNEZduhTz/UrcaWs97gOlOw=="
1373
+ },
1374
+ "xterm-addon-fit": {
1375
+ "version": "0.5.0",
1376
+ "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz",
1377
+ "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==",
1378
+ "requires": {}
1379
+ }
1380
+ }
1381
+ }
app/package.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dependencies": {
3
+ "express": "^4.17.1",
4
+ "soc": "^0.2.0",
5
+ "socket.io": "^4.4.0",
6
+ "ssh2": "^1.5.0",
7
+ "xterm": "^4.15.0",
8
+ "xterm-addon-fit": "^0.5.0"
9
+ }
10
+ }
app/server.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var fs = require('fs');
2
+ var path = require('path');
3
+ var server = require('http').createServer(onRequest);
4
+
5
+ var io = require('socket.io')(server);
6
+ var SSHClient = require('ssh2').Client;
7
+
8
+ // Load static files into memory
9
+ var staticFiles = {};
10
+ var basePath = path.join(require.resolve('xterm'), '..');
11
+ staticFiles['/xterm.css'] = fs.readFileSync(path.join(basePath, '../css/xterm.css'));
12
+ staticFiles['/xterm.js'] = fs.readFileSync(path.join(basePath, 'xterm.js'));
13
+ basePath = path.join(require.resolve('xterm-addon-fit'), '..');
14
+ staticFiles['/xterm-addon-fit.js'] = fs.readFileSync(path.join(basePath, 'xterm-addon-fit.js'));
15
+ staticFiles['/'] = fs.readFileSync('index.html');
16
+
17
+ // Handle static file serving
18
+ function onRequest(req, res) {
19
+ var file;
20
+ if (req.method === 'GET' && (file = staticFiles[req.url])) {
21
+ res.writeHead(200, {
22
+ 'Content-Type': 'text/'
23
+ + (/css$/.test(req.url)
24
+ ? 'css'
25
+ : (/js$/.test(req.url) ? 'javascript' : 'html'))
26
+ });
27
+ return res.end(file);
28
+ }
29
+ res.writeHead(404);
30
+ res.end();
31
+ }
32
+
33
+ io.on('connection', function(socket) {
34
+ var conn = new SSHClient();
35
+ conn.on('ready', function() {
36
+ socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n');
37
+ conn.shell(function(err, stream) {
38
+ if (err)
39
+ return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n');
40
+ socket.on('data', function(data) {
41
+ stream.write(data);
42
+ });
43
+ stream.on('data', function(d) {
44
+ socket.emit('data', d.toString('binary'));
45
+ }).on('close', function() {
46
+ conn.end();
47
+ });
48
+ });
49
+ }).on('close', function() {
50
+ socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n');
51
+ }).on('error', function(err) {
52
+ socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n');
53
+ }).connect({
54
+ host: 'process.env.REMOTE_HOST',
55
+ port: 22,
56
+ username: 'process.env.REMOTE_USERNAME',
57
+ password: 'process.env.REMOTE_PASSWORD'
58
+ //privateKey: require('fs').readFileSync('path/to/keyfile')
59
+ });
60
+ });
61
+
62
+ let port = 8000;
63
+ console.log('Listening on port', port)
64
+ server.listen(port);