iosignal 3.3.0 → 4.5.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/.vscode/settings.json +3 -0
- package/README.md +38 -559
- package/dist/io.d.ts +16 -9
- package/dist/io.js +5 -5
- package/dist/io.js.map +1 -1
- package/dist/io.min.js +5 -5
- package/dist/io.min.js.map +1 -1
- package/dist/iosignal.js +339 -268
- package/dist/types/client/IOCore.d.ts +17 -10
- package/dist/types/common/constants.d.ts +27 -37
- package/index.js +4 -3
- package/package.json +3 -4
- package/src/auth/BohoAuth.js +48 -11
- package/src/auth/{Auth_File.js → key_providers/FileKeyProvider.js} +8 -20
- package/src/auth/{Auth_Redis.js → key_providers/RedisKeyProvider.js} +4 -7
- package/src/auth/key_providers/StringKeyProvider.js +54 -0
- package/src/client/IOCongSocket.js +5 -3
- package/src/client/IOCore.js +118 -89
- package/src/client/IOWS.js +5 -3
- package/src/client/browser/IOWebSocket.js +5 -3
- package/src/common/constants.js +31 -44
- package/src/common/util.js +3 -0
- package/src/server/Manager.js +13 -12
- package/src/server/Remote.js +4 -1
- package/src/server/RemoteCore.js +23 -17
- package/src/server/Server.js +7 -7
- package/README.ko.md +0 -566
- package/auth_file.js +0 -23
- package/auth_file.json +0 -13
- package/docs/iosignal_architecture.png +0 -0
- package/examples/react-chat-js/dist/assets/index-Cy4qaVcJ.js +0 -56
- package/examples/react-chat-js/dist/assets/index-NETrjYhz.css +0 -1
- package/examples/react-chat-js/dist/assets/index-e2KOTYW8.js +0 -65
- package/examples/react-chat-js/dist/index.html +0 -14
- package/examples/react-chat-js/index.html +0 -13
- package/examples/react-chat-js/package-lock.json +0 -1723
- package/examples/react-chat-js/package.json +0 -20
- package/examples/react-chat-js/src/App.css +0 -61
- package/examples/react-chat-js/src/App.jsx +0 -125
- package/examples/react-chat-js/src/index.css +0 -13
- package/examples/react-chat-js/src/main.jsx +0 -13
- package/examples/react-chat-js/src/shared_io.js +0 -12
- package/examples/react-chat-js/vite.config.js +0 -7
- package/examples/server/index.js +0 -65
- package/examples/server/package-lock.json +0 -878
- package/examples/server/package.json +0 -13
- package/examples/server/public/index.html +0 -26
- package/examples/svelte-chat-js/.devtools +0 -3
- package/examples/svelte-chat-js/README.md +0 -38
- package/examples/svelte-chat-js/package-lock.json +0 -1421
- package/examples/svelte-chat-js/package.json +0 -23
- package/examples/svelte-chat-js/src/app.css +0 -105
- package/examples/svelte-chat-js/src/app.d.ts +0 -13
- package/examples/svelte-chat-js/src/app.html +0 -13
- package/examples/svelte-chat-js/src/lib/images/github.svg +0 -1
- package/examples/svelte-chat-js/src/lib/images/svelte-logo.svg +0 -1
- package/examples/svelte-chat-js/src/lib/images/svelte-welcome.png +0 -0
- package/examples/svelte-chat-js/src/lib/images/svelte-welcome.webp +0 -0
- package/examples/svelte-chat-js/src/lib/shared_io.js +0 -12
- package/examples/svelte-chat-js/src/routes/+layout.svelte +0 -5
- package/examples/svelte-chat-js/src/routes/+page.js +0 -3
- package/examples/svelte-chat-js/src/routes/+page.svelte +0 -167
- package/examples/svelte-chat-js/static/favicon.svg +0 -1
- package/examples/svelte-chat-js/static/global.css +0 -19
- package/examples/svelte-chat-js/static/robots.txt +0 -3
- package/examples/svelte-chat-js/svelte.config.js +0 -23
- package/examples/svelte-chat-js/vite.config.js +0 -6
- package/src/auth/Auth_Env.js +0 -76
- package/test-browser/favicon.ico +0 -0
- package/test-browser/index.html +0 -95
- package/test-browser/server.js +0 -12
- package/test-nodejs/client-playToggle.js +0 -19
- package/test-nodejs/client.js +0 -17
- package/test-nodejs/client_api_reply.js +0 -15
- package/test-nodejs/server-Auth_Env.js +0 -19
- package/test-nodejs/server-Auth_File.js +0 -12
- package/test-nodejs/server-api_reply.js +0 -6
- package/test-nodejs/server-api_sudo.js +0 -7
- package/test-nodejs/server.js +0 -20
- package/test-nodejs/signalPack.js +0 -34
- package/test-nodejs/signaling.js +0 -61
- package/test-nodejs/simple-server.js +0 -13
package/src/server/Manager.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import MBP from 'meta-buffer-pack'
|
|
2
2
|
import { Remote } from './Remote.js'
|
|
3
3
|
import { serverOption } from './serverOption.js'
|
|
4
|
-
import { IOMsg,
|
|
4
|
+
import { IOMsg, STATE } from '../common/constants.js'
|
|
5
5
|
import { getSignalPack } from '../common/payload.js';
|
|
6
6
|
import { FileLogger } from './FileLogger.js'
|
|
7
7
|
import { Metric } from './Metric.js'
|
|
@@ -73,7 +73,7 @@ export class Manager {
|
|
|
73
73
|
let remote = new Remote(socket, req, this)
|
|
74
74
|
this.remotes.add(remote)
|
|
75
75
|
remote.send(Buffer.from([IOMsg.SERVER_READY]))
|
|
76
|
-
remote.setState(
|
|
76
|
+
remote.setState(STATE.SERVER_READY)
|
|
77
77
|
this.lastSSID = remote.ssid;
|
|
78
78
|
let connectionInfo = `+ IP:${remote.ip} #${remote.ssid} ${socket.socketType === 'websocket' ? "WS" : "CS"} `;
|
|
79
79
|
// console.log( connectionInfo)
|
|
@@ -181,8 +181,8 @@ export class Manager {
|
|
|
181
181
|
serverSignalTo(tag, ...args) {
|
|
182
182
|
let cid = tag.split('@')[0]
|
|
183
183
|
let topic = tag.split('@')[1]
|
|
184
|
-
let sigPack = getSignalPack('@' + topic, ...args)
|
|
185
184
|
if (cid && this.cid2remote.has(cid)) {
|
|
185
|
+
let sigPack = getSignalPack('@' + topic, ...args)
|
|
186
186
|
let targetRemote = this.cid2remote.get(cid)
|
|
187
187
|
console.log('target', targetRemote.state, targetRemote.cid)
|
|
188
188
|
targetRemote.send_enc_mode(sigPack)
|
|
@@ -194,8 +194,8 @@ export class Manager {
|
|
|
194
194
|
|
|
195
195
|
sender(tag, remote, message) {
|
|
196
196
|
if (serverOption.membersOnly && !remote.boho.isAuthorized) {
|
|
197
|
-
console.log("[membersOnly]
|
|
198
|
-
remote.send(Buffer.from([IOMsg.
|
|
197
|
+
// console.log("### server reject client signal reason: [membersOnly]" ,tag, remote.cid )
|
|
198
|
+
remote.send(Buffer.from([IOMsg.AUTH_CLEAR]))
|
|
199
199
|
remote.close()
|
|
200
200
|
return ['err', 'unAuthorized']
|
|
201
201
|
}
|
|
@@ -284,17 +284,18 @@ export class Manager {
|
|
|
284
284
|
// console.log('## null remote' )
|
|
285
285
|
break;
|
|
286
286
|
}
|
|
287
|
-
|
|
287
|
+
// change: from v4.x allow receiveSelfMessages.
|
|
288
|
+
// if (c !== remote) {
|
|
288
289
|
c.send_enc_mode(message);
|
|
289
290
|
sentCounter++;
|
|
290
|
-
}
|
|
291
|
+
// }
|
|
291
292
|
}
|
|
292
293
|
|
|
293
|
-
if (serverOption.useQuota.publishCounter) {
|
|
294
|
-
|
|
295
|
-
} else {
|
|
296
|
-
|
|
297
|
-
}
|
|
294
|
+
// if (serverOption.useQuota.publishCounter) {
|
|
295
|
+
// // console.log(`pub >> [${tag}] sent: ${sentCounter} [use quota limit: ${remote.quota.publishCounter }] total: ${remotes.size} subscribers. ` )
|
|
296
|
+
// } else {
|
|
297
|
+
// // console.log(`pub >> [${tag}] sent: ${sentCounter} [no quota limit] total: ${remotes.size} subscribers. ` )
|
|
298
|
+
// }
|
|
298
299
|
return ['ok', sentCounter]
|
|
299
300
|
}
|
|
300
301
|
}
|
package/src/server/Remote.js
CHANGED
|
@@ -185,6 +185,7 @@ export class Remote extends RemoteCore {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
// node.js server side remote.
|
|
188
189
|
send(message, isBinary) {
|
|
189
190
|
this.manager.txBytes += message.byteLength;
|
|
190
191
|
this.socket.txCounter++;
|
|
@@ -196,13 +197,15 @@ export class Remote extends RemoteCore {
|
|
|
196
197
|
this.socket.send(message);
|
|
197
198
|
}
|
|
198
199
|
} else {
|
|
200
|
+
console.log('server(ws)Remote.send() called. not open state. current readyState:', this.socket.readyState )
|
|
199
201
|
this.close(true)
|
|
200
202
|
}
|
|
201
|
-
|
|
203
|
+
|
|
202
204
|
} else { //CongSocket
|
|
203
205
|
if (this.socket.readyState == 'open') {
|
|
204
206
|
this.socket.write(pack(message))
|
|
205
207
|
} else {
|
|
208
|
+
console.log('server(cong)Remote.send() called. not open state. current readyState:', this.socket.readyState )
|
|
206
209
|
this.close(true)
|
|
207
210
|
}
|
|
208
211
|
}
|
package/src/server/RemoteCore.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import MBP from 'meta-buffer-pack'
|
|
2
2
|
import Boho from 'boho'
|
|
3
3
|
import { serverOption } from './serverOption.js';
|
|
4
|
-
import { IOMsg, ENC_MODE,
|
|
4
|
+
import { IOMsg, ENC_MODE, STATE } from '../common/constants.js'
|
|
5
5
|
import { quotaTable } from '../common/quotaTable.js'
|
|
6
6
|
|
|
7
7
|
const decoder = new TextDecoder()
|
|
@@ -40,7 +40,7 @@ export class RemoteCore {
|
|
|
40
40
|
|
|
41
41
|
this.state;
|
|
42
42
|
this.stateLog = [];
|
|
43
|
-
this.setState(
|
|
43
|
+
this.setState(STATE.OPEN)
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -49,7 +49,7 @@ export class RemoteCore {
|
|
|
49
49
|
setState(state) {
|
|
50
50
|
this.state = state
|
|
51
51
|
if (serverOption.debug.showAuthInfo) {
|
|
52
|
-
|
|
52
|
+
state = state + ":" + STATE[ state]
|
|
53
53
|
this.stateLog.push( state )
|
|
54
54
|
console.log(this.stateLog.join('>'))
|
|
55
55
|
}
|
|
@@ -60,24 +60,30 @@ export class RemoteCore {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
getStateName() { // <String>
|
|
63
|
-
return (
|
|
63
|
+
return (STATE[this.state]).toLowerCase()
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
showMessageLog(message, isBinary) {
|
|
68
|
-
let
|
|
68
|
+
let h = '->S '
|
|
69
|
+
let from = this.boho.isAuthorized ? ` did: ${this.did} cid: ${this.cid}` : ` cid: ${this.cid}`
|
|
70
|
+
let prnLimit = 20
|
|
69
71
|
if (isBinary) {
|
|
70
72
|
let msgTypeName = IOMsg[message[0]]
|
|
71
73
|
if (!msgTypeName) msgTypeName = Boho.BohoMsg[message[0]]
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
|
|
75
|
+
msgTypeName = '[' + msgTypeName + ']';
|
|
76
|
+
let size = message.byteLength;
|
|
77
|
+
if (size < prnLimit) {
|
|
78
|
+
console.log( h + msgTypeName + from +` [${size}]`, message);
|
|
75
79
|
} else {
|
|
76
|
-
|
|
80
|
+
let elseLen = size - prnLimit
|
|
81
|
+
let some = message.subarray(0,prnLimit)
|
|
82
|
+
console.log( h + msgTypeName + from +` [${size}]` , some , ' ... else: ', elseLen);
|
|
77
83
|
}
|
|
78
84
|
|
|
79
85
|
} else {
|
|
80
|
-
console.log(
|
|
86
|
+
console.log( h + ' [TEXT] %s' + from, message);
|
|
81
87
|
}
|
|
82
88
|
}
|
|
83
89
|
|
|
@@ -162,7 +168,7 @@ export class RemoteCore {
|
|
|
162
168
|
break;
|
|
163
169
|
|
|
164
170
|
case IOMsg.CID_REQ:
|
|
165
|
-
if (this.state <
|
|
171
|
+
if (this.state < STATE.SERVER_READY) {
|
|
166
172
|
// Protocol violation: CID_REQ was sent before receiving the SERVER_READY signal.
|
|
167
173
|
console.log('CID_REQ before SERVER_READY')
|
|
168
174
|
this.close()
|
|
@@ -179,7 +185,7 @@ export class RemoteCore {
|
|
|
179
185
|
MB('#cid', this.cid)
|
|
180
186
|
))
|
|
181
187
|
|
|
182
|
-
this.setState(
|
|
188
|
+
this.setState(STATE.CID_RES)
|
|
183
189
|
break;
|
|
184
190
|
|
|
185
191
|
case IOMsg.ECHO:
|
|
@@ -285,24 +291,24 @@ export class RemoteCore {
|
|
|
285
291
|
// Auth
|
|
286
292
|
case Boho.BohoMsg.AUTH_REQ:
|
|
287
293
|
if (!this.manager.authManager) return
|
|
288
|
-
if (this.state <
|
|
294
|
+
if (this.state < STATE.SERVER_READY) {
|
|
289
295
|
console.log('protocol error. auth_req before server_ready')
|
|
290
296
|
this.close();
|
|
291
297
|
}
|
|
292
|
-
this.setState(
|
|
298
|
+
this.setState(STATE.AUTH_REQ)
|
|
293
299
|
let auth_nonce_pack = this.boho.auth_nonce()
|
|
294
300
|
// console.log('## auth_nonce_pack', auth_nonce_pack )
|
|
295
301
|
this.send(auth_nonce_pack)
|
|
296
|
-
this.setState(
|
|
302
|
+
this.setState(STATE.AUTH_NONCE)
|
|
297
303
|
break;
|
|
298
304
|
|
|
299
305
|
case Boho.BohoMsg.AUTH_HMAC:
|
|
300
306
|
if (!this.manager.authManager) return
|
|
301
|
-
if (this.state <
|
|
307
|
+
if (this.state < STATE.AUTH_NONCE) {
|
|
302
308
|
console.log('protocol error. auth_hmac before server_nonce')
|
|
303
309
|
this.close();
|
|
304
310
|
}
|
|
305
|
-
this.setState(
|
|
311
|
+
this.setState(STATE.AUTH_HMAC)
|
|
306
312
|
//async
|
|
307
313
|
this.manager.authManager.verify_auth_hmac(message, this)
|
|
308
314
|
.then(authInfo => {
|
package/src/server/Server.js
CHANGED
|
@@ -81,7 +81,7 @@ export class Server extends EventEmitter {
|
|
|
81
81
|
|
|
82
82
|
this.wss.once('listening', () => {
|
|
83
83
|
this.port = this.wss.address().port;
|
|
84
|
-
console.log('wss server bound port:', this.port );
|
|
84
|
+
// console.log('wss server bound port:', this.port );
|
|
85
85
|
this.listeningServerCount++;
|
|
86
86
|
if (this.listeningServerCount === this.serverCountToListen) {
|
|
87
87
|
this.emit('ready');
|
|
@@ -97,7 +97,7 @@ export class Server extends EventEmitter {
|
|
|
97
97
|
})
|
|
98
98
|
|
|
99
99
|
this.wss.on('close', () => {
|
|
100
|
-
console.log('### WS server is closed.')
|
|
100
|
+
// console.log('### WS server is closed.')
|
|
101
101
|
})
|
|
102
102
|
|
|
103
103
|
this.wss.on('connection', (ws, req) => {
|
|
@@ -118,10 +118,10 @@ export class Server extends EventEmitter {
|
|
|
118
118
|
process.exit()
|
|
119
119
|
}
|
|
120
120
|
}).on('close', () => {
|
|
121
|
-
console.log('### congsocket server is closed.')
|
|
121
|
+
// console.log('### congsocket server is closed.')
|
|
122
122
|
}).listen(this.congPort, () => {
|
|
123
123
|
this.congPort = this.congServer.address().port;
|
|
124
|
-
console.log('congsocket server bound port:', this.congPort );
|
|
124
|
+
// console.log('congsocket server bound port:', this.congPort );
|
|
125
125
|
this.listeningServerCount++;
|
|
126
126
|
if (this.listeningServerCount === this.serverCountToListen) {
|
|
127
127
|
this.emit('ready');
|
|
@@ -156,7 +156,7 @@ export class Server extends EventEmitter {
|
|
|
156
156
|
return
|
|
157
157
|
}
|
|
158
158
|
if( api.commands.includes( req.topic )){
|
|
159
|
-
console.log('server api req', req )
|
|
159
|
+
// console.log('server api req', req )
|
|
160
160
|
await api.request(remote, req)
|
|
161
161
|
}else{
|
|
162
162
|
remote.response(req.mid, STATUS.ERROR, "UNKNOWN_COMMAND");
|
|
@@ -186,7 +186,7 @@ export class Server extends EventEmitter {
|
|
|
186
186
|
})
|
|
187
187
|
}
|
|
188
188
|
this.apiNames.add(target)
|
|
189
|
-
console.log(`[API registed: ${target} ] accept commands: ${api.commands}`)
|
|
189
|
+
// console.log(`[API registed: ${target} ] accept commands: ${api.commands}`)
|
|
190
190
|
return this
|
|
191
191
|
}
|
|
192
192
|
|
|
@@ -226,7 +226,7 @@ export class Server extends EventEmitter {
|
|
|
226
226
|
|
|
227
227
|
if (this.congServer) {
|
|
228
228
|
this.congServer.close((err) => {
|
|
229
|
-
if (err) console.error('congServer close error', err)
|
|
229
|
+
// if (err) console.error('congServer close error', err)
|
|
230
230
|
// console.log('cong server closed.')
|
|
231
231
|
onClosed()
|
|
232
232
|
})
|