iosignal 1.4.2 → 1.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.
Files changed (50) hide show
  1. package/README.md +247 -240
  2. package/auth_file.json +13 -13
  3. package/auth_file.mjs +23 -23
  4. package/dist/iosignal.cjs +1 -1
  5. package/dist/iosignal.esm.js.map +1 -1
  6. package/dist/iosignal.min.js.map +1 -1
  7. package/index.js +19 -19
  8. package/indexWebBrowser.js +13 -13
  9. package/package.json +59 -60
  10. package/rollup.config.js +69 -69
  11. package/src/api/RedisAPI.js +68 -68
  12. package/src/api/api_constant.js +7 -7
  13. package/src/api/api_reply.js +34 -34
  14. package/src/api/api_sudo.js +96 -96
  15. package/src/auth/Auth_Env.js +78 -78
  16. package/src/auth/Auth_File.js +75 -75
  17. package/src/auth/Auth_Redis.js +50 -50
  18. package/src/auth/BohoAuth.js +168 -168
  19. package/src/client/CongPacket.js +150 -150
  20. package/src/client/IOCongSocket.js +88 -88
  21. package/src/client/IOCore.js +851 -851
  22. package/src/client/IOWS.js +81 -81
  23. package/src/client/IOWebSocket.js +95 -95
  24. package/src/common/constants.js +159 -159
  25. package/src/common/payload.js +82 -82
  26. package/src/common/quotaTable.js +68 -68
  27. package/src/common/util.js +61 -61
  28. package/src/server/FileLogger.js +30 -30
  29. package/src/server/Manager.js +449 -449
  30. package/src/server/Metric.js +154 -154
  31. package/src/server/Server.js +166 -148
  32. package/src/server/ServerRemote.js +227 -227
  33. package/src/server/ServerRemoteCore.js +467 -467
  34. package/src/server/serverOption.js +56 -55
  35. package/test-browser/favicon.ico +0 -0
  36. package/test-browser/index.html +92 -92
  37. package/test-browser/server.js +11 -11
  38. package/test-client-nodejs/client.cjs +17 -17
  39. package/test-client-nodejs/client.mjs +17 -17
  40. package/test-client-nodejs/client_api_reply.mjs +15 -15
  41. package/test-client-nodejs/stateChange.mjs +19 -19
  42. package/test-server/server-Auth_Env.js +19 -19
  43. package/test-server/server-Auth_File.js +12 -12
  44. package/test-server/server-api_reply.js +6 -6
  45. package/test-server/server-api_sudo.js +7 -7
  46. package/test-server/server-commonjs.cjs +8 -8
  47. package/test-server/server-esm.mjs +19 -19
  48. package/test-server/simple-server.mjs +11 -11
  49. package/test-signal-payloadType/signalPack.js +34 -34
  50. package/test-signal-payloadType/signaling.js +60 -60
@@ -1,81 +1,81 @@
1
- import { IOCore } from "./IOCore.js";
2
- import { WebSocket } from "ws";
3
-
4
- // Node.js 'ws' websocket
5
- export class IOWS extends IOCore{
6
- constructor(url ) {
7
- super(url);
8
- if(url) this.open();
9
- }
10
-
11
-
12
-
13
- close() {
14
- if(this.socket ){
15
- this.socket.onclose = null
16
- this.socket.onmessage = null
17
- this.socket.onerror = null
18
- this.socket.close();
19
- this.socket = null;
20
- }
21
- this.emit('close')
22
- }
23
-
24
-
25
-
26
- stop() {
27
- this.close()
28
- clearInterval(this.connectionCheckerIntervalID);
29
- this.connectionCheckerIntervalID = null
30
- }
31
-
32
- keepAlive() {
33
- if ( !this.socket || this.socket?.readyState === 3 ) { //closed
34
- this.open();
35
- }
36
- }
37
-
38
-
39
- createConnection(url){
40
- // node WebSocket
41
- this.socket = new WebSocket ( url );
42
- this.stateChange('opening')
43
-
44
- this.socket.onopen = () => {
45
- this.socket.on('message', this.onWebSocketMessage.bind(this) );
46
- this.emit('open' );
47
- };
48
-
49
- this.socket.onerror = (e)=>{
50
- this.emit('error', e)
51
- }
52
-
53
- this.socket.onclose = ()=>{
54
- this.emit('close' );
55
- }
56
- }
57
-
58
- onWebSocketMessage( data ) {
59
- this.rxCounter++;
60
- this.lastTxRxTime = Date.now();
61
- this.rxBytes += data.byteLength
62
- this.emit('socket_data', data );
63
- }
64
-
65
- socket_send(data) {
66
- if( this.socket?.readyState === 1 ){ //open
67
- // console.log('websocket send', data)
68
- this.socket.send( data )
69
- this.txCounter++;
70
- this.txBytes += data.byteLength
71
- this.lastTxRxTime = Date.now();
72
- }else{
73
- console.log('')
74
- }
75
- }
76
-
77
- }
78
-
79
-
80
-
81
-
1
+ import { IOCore } from "./IOCore.js";
2
+ import { WebSocket } from "ws";
3
+
4
+ // Node.js 'ws' websocket
5
+ export class IOWS extends IOCore{
6
+ constructor(url ) {
7
+ super(url);
8
+ if(url) this.open();
9
+ }
10
+
11
+
12
+
13
+ close() {
14
+ if(this.socket ){
15
+ this.socket.onclose = null
16
+ this.socket.onmessage = null
17
+ this.socket.onerror = null
18
+ this.socket.close();
19
+ this.socket = null;
20
+ }
21
+ this.emit('close')
22
+ }
23
+
24
+
25
+
26
+ stop() {
27
+ this.close()
28
+ clearInterval(this.connectionCheckerIntervalID);
29
+ this.connectionCheckerIntervalID = null
30
+ }
31
+
32
+ keepAlive() {
33
+ if ( !this.socket || this.socket?.readyState === 3 ) { //closed
34
+ this.open();
35
+ }
36
+ }
37
+
38
+
39
+ createConnection(url){
40
+ // node WebSocket
41
+ this.socket = new WebSocket ( url );
42
+ this.stateChange('opening')
43
+
44
+ this.socket.onopen = () => {
45
+ this.socket.on('message', this.onWebSocketMessage.bind(this) );
46
+ this.emit('open' );
47
+ };
48
+
49
+ this.socket.onerror = (e)=>{
50
+ this.emit('error', e)
51
+ }
52
+
53
+ this.socket.onclose = ()=>{
54
+ this.emit('close' );
55
+ }
56
+ }
57
+
58
+ onWebSocketMessage( data ) {
59
+ this.rxCounter++;
60
+ this.lastTxRxTime = Date.now();
61
+ this.rxBytes += data.byteLength
62
+ this.emit('socket_data', data );
63
+ }
64
+
65
+ socket_send(data) {
66
+ if( this.socket?.readyState === 1 ){ //open
67
+ // console.log('websocket send', data)
68
+ this.socket.send( data )
69
+ this.txCounter++;
70
+ this.txBytes += data.byteLength
71
+ this.lastTxRxTime = Date.now();
72
+ }else{
73
+ console.log('')
74
+ }
75
+ }
76
+
77
+ }
78
+
79
+
80
+
81
+
@@ -1,95 +1,95 @@
1
- import { IOCore } from "./IOCore.js";
2
- import { Buffer } from 'meta-buffer-pack'
3
- export { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'
4
- export * from '../common/constants.js'
5
-
6
- // Browser WebSocket
7
- export class IO extends IOCore{
8
- constructor(url ) {
9
- super(url);
10
- document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));
11
- if(url) this.open();
12
- }
13
-
14
- browserVisiblePing(){
15
- if (document.visibilityState === 'visible') {
16
- this.ping()
17
- }
18
- }
19
-
20
-
21
- close() {
22
- if(this.socket ){
23
- this.socket.onclose = null
24
- this.socket.onmessage = null
25
- this.socket.onerror = null
26
- this.socket.close();
27
- this.socket = null;
28
- }
29
- this.emit('close')
30
- }
31
-
32
-
33
- stop(){
34
- this.close()
35
- clearInterval(this.connectionCheckerIntervalID);
36
- this.connectionCheckerIntervalID = null
37
- }
38
-
39
-
40
- keepAlive() {
41
- if ( !this.socket || this.socket?.readyState === 3 ) { //closed
42
- this.open();
43
- }
44
- }
45
-
46
- createConnection(url){
47
- // Web Browser WebSocket
48
- this.socket = new WebSocket (url );
49
- this.stateChange('opening')
50
-
51
- this.socket.binaryType = "arraybuffer"
52
- this.socket.onopen = () => {
53
- this.socket.onmessage = this.onWebSocketMessage.bind(this) ;
54
- this.emit('open' );
55
- };
56
-
57
- this.socket.onerror = (e)=>{
58
- this.emit('error', e)
59
- }
60
-
61
- this.socket.onclose = ()=>{
62
- this.emit('close' );
63
- }
64
- }
65
-
66
- onWebSocketMessage( event ) {
67
- this.rxCounter++;
68
- this.lastTxRxTime = Date.now();
69
- let buffer;
70
-
71
- // if( event.data instanceof ArrayBuffer ){
72
- // //binary frame
73
- // }else{
74
- // //text frame
75
- // }
76
- buffer = Buffer.from( event.data )
77
- this.rxBytes += buffer.byteLength
78
-
79
- this.emit('socket_data', buffer );
80
- }
81
-
82
- socket_send(data) {
83
- if( this.socket?.readyState === 1 ){ //open
84
- // console.log('websocket send', data)
85
- this.socket.send( data )
86
- this.txCounter++;
87
- this.txBytes += data.byteLength
88
- this.lastTxRxTime = Date.now();
89
- }else{
90
- console.log('.')
91
- }
92
- }
93
-
94
- }
95
-
1
+ import { IOCore } from "./IOCore.js";
2
+ import { Buffer } from 'meta-buffer-pack'
3
+ export { Boho, RAND, BohoMsg, Meta, MetaSize , sha256, MBP, Buffer } from 'boho'
4
+ export * from '../common/constants.js'
5
+
6
+ // Browser WebSocket
7
+ export class IO extends IOCore{
8
+ constructor(url ) {
9
+ super(url);
10
+ document.addEventListener('visibilitychange', this.browserVisiblePing.bind(this));
11
+ if(url) this.open();
12
+ }
13
+
14
+ browserVisiblePing(){
15
+ if (document.visibilityState === 'visible') {
16
+ this.ping()
17
+ }
18
+ }
19
+
20
+
21
+ close() {
22
+ if(this.socket ){
23
+ this.socket.onclose = null
24
+ this.socket.onmessage = null
25
+ this.socket.onerror = null
26
+ this.socket.close();
27
+ this.socket = null;
28
+ }
29
+ this.emit('close')
30
+ }
31
+
32
+
33
+ stop(){
34
+ this.close()
35
+ clearInterval(this.connectionCheckerIntervalID);
36
+ this.connectionCheckerIntervalID = null
37
+ }
38
+
39
+
40
+ keepAlive() {
41
+ if ( !this.socket || this.socket?.readyState === 3 ) { //closed
42
+ this.open();
43
+ }
44
+ }
45
+
46
+ createConnection(url){
47
+ // Web Browser WebSocket
48
+ this.socket = new WebSocket (url );
49
+ this.stateChange('opening')
50
+
51
+ this.socket.binaryType = "arraybuffer"
52
+ this.socket.onopen = () => {
53
+ this.socket.onmessage = this.onWebSocketMessage.bind(this) ;
54
+ this.emit('open' );
55
+ };
56
+
57
+ this.socket.onerror = (e)=>{
58
+ this.emit('error', e)
59
+ }
60
+
61
+ this.socket.onclose = ()=>{
62
+ this.emit('close' );
63
+ }
64
+ }
65
+
66
+ onWebSocketMessage( event ) {
67
+ this.rxCounter++;
68
+ this.lastTxRxTime = Date.now();
69
+ let buffer;
70
+
71
+ // if( event.data instanceof ArrayBuffer ){
72
+ // //binary frame
73
+ // }else{
74
+ // //text frame
75
+ // }
76
+ buffer = Buffer.from( event.data )
77
+ this.rxBytes += buffer.byteLength
78
+
79
+ this.emit('socket_data', buffer );
80
+ }
81
+
82
+ socket_send(data) {
83
+ if( this.socket?.readyState === 1 ){ //open
84
+ // console.log('websocket send', data)
85
+ this.socket.send( data )
86
+ this.txCounter++;
87
+ this.txBytes += data.byteLength
88
+ this.lastTxRxTime = Date.now();
89
+ }else{
90
+ console.log('.')
91
+ }
92
+ }
93
+
94
+ }
95
+
@@ -1,159 +1,159 @@
1
-
2
- // IOclient state
3
- export const STATES = {
4
- OPENING: 0,
5
- OPEN: 1,
6
- CLOSING: 2,
7
- CLOSED: 3,
8
- SERVER_READY: 4,
9
- AUTH_FAIL: 5,
10
- AUTH_READY: 6,
11
- READY: 7,
12
- REDIRECTING: 8
13
- }
14
- for (let c in STATES) { STATES[STATES[c]] = c }
15
-
16
- // server side client state
17
- export const CLIENT_STATE = {
18
- INIT: 0,
19
- SENT_SERVER_READY: 1,
20
- RECV_AUTH_REQ: 2,
21
- SENT_SERVER_NONCE: 3,
22
- RECV_AUTH_HMAC: 4,
23
- AUTH_FAIL: 5,
24
- AUTH_READY: 6,
25
- CID_READY: 7
26
- }
27
- for (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }
28
-
29
- export let ENC_MODE = {
30
- NO: 0,
31
- YES: 1,
32
- AUTO: 2
33
- }
34
-
35
- for (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }
36
-
37
-
38
- export const SIZE_LIMIT = {
39
- TAG_LEN1: 255,
40
- TAG_LEN2: 65535,
41
- CONNECTION_CHECKER_PERIOD: 3000,
42
- PROMISE_TIMEOUT: 5000,
43
- DID: 8,
44
- CID: 12
45
- }
46
-
47
- export let PAYLOAD_TYPE = {
48
- EMPTY: 0,
49
- TEXT: 1,
50
- BINARY: 2,
51
- OBJECT: 3, // one stringify able object. no buffer.
52
- MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer
53
- MBA: 5 // "meta_buffer_arguments" arbitary types. buffer included.
54
- }
55
- for (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }
56
- // console.log( PAYLOAD_TYPE )
57
-
58
- // MJSON: multiple arguments
59
- // accepet only string, number, root depth js primittive object,
60
- // unpack and will send to receiver handler with multiple params.
61
-
62
- // MBA: buffer pack of multiple arguments. check "meta-buffer-pack" module.
63
- // MBA: when armuents includes raw Buffer( TypedArray )
64
-
65
- // IO message pack one byte header.
66
- export let IOMsg = {
67
-
68
- /*
69
- * 0~127dec. reserved. for text stream.
70
- * 0~31: control code
71
- * 32~126: ascii charactor
72
- * 127: DEL
73
- */
74
-
75
- // ADMIN_REQ: 0xA0,
76
-
77
- // DO NOT USE: 0xB0~ 0xBF
78
- // Boho module using this numbers.
79
- // AUTH_REQ : 0xB0,
80
- // AUTH_NONCE: 0xB1,
81
- // AUTH_HMAC: 0xB2,
82
- // AUTH_ACK: 0xB3,
83
- // AUTH_FAIL: 0xB4,
84
- // AUTH_EXT: 0xB5,
85
- // ENC_PACK : 0xB6,
86
- // ENC_E2E : 0xB7,
87
- // ENC_488 : 0xB8
88
- // reserved ~0xBF
89
-
90
- // C. IO status contorl.
91
- SERVER_READY: 0xC0,
92
- CID_REQ: 0xC1,
93
- CID_RES: 0xC2,
94
- QUOTA_LEVEL: 0xC3,
95
- SERVER_CLEAR_AUTH: 0xC4,
96
- SERVER_REDIRECT: 0xC5,
97
-
98
- // ..
99
- LOOP: 0xCB,
100
- ECHO: 0xCC,
101
- PING: 0xCD,
102
- PONG: 0xCE,
103
- CLOSE: 0xCF,
104
- // ~CF
105
-
106
-
107
- // D. IO data signaling
108
- SIGNAL: 0xD0,
109
- SIGNAL_REQ: 0xD1,
110
- SIGNAL_E2E: 0xD2,
111
- SUBSCRIBE: 0xD3,
112
- SUBSCRIBE_REQ: 0xD4,
113
- UNSUBSCRIBE: 0xD5,
114
- SERVER_SIGNAL: 0xD6,
115
-
116
- // ..
117
- IAM: 0xD9,
118
- IAM_RES: 0xDA,
119
-
120
- //..
121
- SET: 0xDB, //
122
- RESPONSE_CODE: 0xDC,
123
- RESPONSE_MBP: 0xDD,
124
-
125
- REQUEST: 0xDE, //client public
126
- RESPONSE: 0xDF,
127
- // ~DF
128
-
129
-
130
- // F. Framing Flow control related framing protocol.(CongPacket)
131
- FLOW_MODE: 0xF0,
132
- WAIT: 0xF1,
133
- RESUME: 0xF2,
134
- //..
135
- TIME_OUT: 0xFD,
136
- OVER_SIZE: 0xFE,
137
- OVER_FLOW: 0xFF
138
-
139
- }
140
-
141
- for (let c in IOMsg) { IOMsg[IOMsg[c]] = c }
142
-
143
- // console.log( IOMsg );
144
-
145
-
146
- export const API_TYPE = {
147
- 'REQUEST_RESPONSE': 'requet_response',
148
- 'ONE_WAY': 'one_way'
149
- }
150
-
151
-
152
-
153
- // api response status code
154
- export const STATUS = {
155
- OK: 0,
156
- //0~127: success
157
- //128~255: fail
158
- ERROR: 255
159
- }
1
+
2
+ // IOclient state
3
+ export const STATES = {
4
+ OPENING: 0,
5
+ OPEN: 1,
6
+ CLOSING: 2,
7
+ CLOSED: 3,
8
+ SERVER_READY: 4,
9
+ AUTH_FAIL: 5,
10
+ AUTH_READY: 6,
11
+ READY: 7,
12
+ REDIRECTING: 8
13
+ }
14
+ for (let c in STATES) { STATES[STATES[c]] = c }
15
+
16
+ // server side client state
17
+ export const CLIENT_STATE = {
18
+ INIT: 0,
19
+ SENT_SERVER_READY: 1,
20
+ RECV_AUTH_REQ: 2,
21
+ SENT_SERVER_NONCE: 3,
22
+ RECV_AUTH_HMAC: 4,
23
+ AUTH_FAIL: 5,
24
+ AUTH_READY: 6,
25
+ CID_READY: 7
26
+ }
27
+ for (let c in CLIENT_STATE) { CLIENT_STATE[CLIENT_STATE[c]] = c }
28
+
29
+ export let ENC_MODE = {
30
+ NO: 0,
31
+ YES: 1,
32
+ AUTO: 2
33
+ }
34
+
35
+ for (let c in ENC_MODE) { ENC_MODE[ENC_MODE[c]] = c }
36
+
37
+
38
+ export const SIZE_LIMIT = {
39
+ TAG_LEN1: 255,
40
+ TAG_LEN2: 65535,
41
+ CONNECTION_CHECKER_PERIOD: 3000,
42
+ PROMISE_TIMEOUT: 5000,
43
+ DID: 8,
44
+ CID: 12
45
+ }
46
+
47
+ export let PAYLOAD_TYPE = {
48
+ EMPTY: 0,
49
+ TEXT: 1,
50
+ BINARY: 2,
51
+ OBJECT: 3, // one stringify able object. no buffer.
52
+ MJSON: 4, // multiple stringify able obejct. JSON string. with top levle array , no buffer
53
+ MBA: 5 // "meta_buffer_arguments" arbitary types. buffer included.
54
+ }
55
+ for (let c in PAYLOAD_TYPE) { PAYLOAD_TYPE[PAYLOAD_TYPE[c]] = c }
56
+ // console.log( PAYLOAD_TYPE )
57
+
58
+ // MJSON: multiple arguments
59
+ // accepet only string, number, root depth js primittive object,
60
+ // unpack and will send to receiver handler with multiple params.
61
+
62
+ // MBA: buffer pack of multiple arguments. check "meta-buffer-pack" module.
63
+ // MBA: when armuents includes raw Buffer( TypedArray )
64
+
65
+ // IO message pack one byte header.
66
+ export let IOMsg = {
67
+
68
+ /*
69
+ * 0~127dec. reserved. for text stream.
70
+ * 0~31: control code
71
+ * 32~126: ascii charactor
72
+ * 127: DEL
73
+ */
74
+
75
+ // ADMIN_REQ: 0xA0,
76
+
77
+ // DO NOT USE: 0xB0~ 0xBF
78
+ // Boho module using this numbers.
79
+ // AUTH_REQ : 0xB0,
80
+ // AUTH_NONCE: 0xB1,
81
+ // AUTH_HMAC: 0xB2,
82
+ // AUTH_ACK: 0xB3,
83
+ // AUTH_FAIL: 0xB4,
84
+ // AUTH_EXT: 0xB5,
85
+ // ENC_PACK : 0xB6,
86
+ // ENC_E2E : 0xB7,
87
+ // ENC_488 : 0xB8
88
+ // reserved ~0xBF
89
+
90
+ // C. IO status contorl.
91
+ SERVER_READY: 0xC0,
92
+ CID_REQ: 0xC1,
93
+ CID_RES: 0xC2,
94
+ QUOTA_LEVEL: 0xC3,
95
+ SERVER_CLEAR_AUTH: 0xC4,
96
+ SERVER_REDIRECT: 0xC5,
97
+
98
+ // ..
99
+ LOOP: 0xCB,
100
+ ECHO: 0xCC,
101
+ PING: 0xCD,
102
+ PONG: 0xCE,
103
+ CLOSE: 0xCF,
104
+ // ~CF
105
+
106
+
107
+ // D. IO data signaling
108
+ SIGNAL: 0xD0,
109
+ SIGNAL_REQ: 0xD1,
110
+ SIGNAL_E2E: 0xD2,
111
+ SUBSCRIBE: 0xD3,
112
+ SUBSCRIBE_REQ: 0xD4,
113
+ UNSUBSCRIBE: 0xD5,
114
+ SERVER_SIGNAL: 0xD6,
115
+
116
+ // ..
117
+ IAM: 0xD9,
118
+ IAM_RES: 0xDA,
119
+
120
+ //..
121
+ SET: 0xDB, //
122
+ RESPONSE_CODE: 0xDC,
123
+ RESPONSE_MBP: 0xDD,
124
+
125
+ REQUEST: 0xDE, //client public
126
+ RESPONSE: 0xDF,
127
+ // ~DF
128
+
129
+
130
+ // F. Framing Flow control related framing protocol.(CongPacket)
131
+ FLOW_MODE: 0xF0,
132
+ WAIT: 0xF1,
133
+ RESUME: 0xF2,
134
+ //..
135
+ TIME_OUT: 0xFD,
136
+ OVER_SIZE: 0xFE,
137
+ OVER_FLOW: 0xFF
138
+
139
+ }
140
+
141
+ for (let c in IOMsg) { IOMsg[IOMsg[c]] = c }
142
+
143
+ // console.log( IOMsg );
144
+
145
+
146
+ export const API_TYPE = {
147
+ 'REQUEST_RESPONSE': 'requet_response',
148
+ 'ONE_WAY': 'one_way'
149
+ }
150
+
151
+
152
+
153
+ // api response status code
154
+ export const STATUS = {
155
+ OK: 0,
156
+ //0~127: success
157
+ //128~255: fail
158
+ ERROR: 255
159
+ }