@cloudpss/ubrpc 0.5.16 → 0.5.18
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/dist/client.js +7 -0
- package/dist/client.js.map +1 -1
- package/dist/codes.d.ts +2 -1
- package/dist/codes.js +1 -0
- package/dist/codes.js.map +1 -1
- package/dist/logger.d.ts +3 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/server.d.ts +2 -2
- package/dist/server.js +21 -5
- package/dist/server.js.map +1 -1
- package/dist/socket.d.ts +3 -0
- package/dist/socket.js +23 -1
- package/dist/socket.js.map +1 -1
- package/dist/types/utils.js.map +1 -1
- package/package.json +4 -4
- package/src/client.ts +7 -0
- package/src/codes.ts +1 -0
- package/src/logger.ts +3 -0
- package/src/server.ts +23 -5
- package/src/socket.ts +20 -1
- package/src/types/utils.ts +7 -6
- package/tests/runner.js +17 -0
package/dist/client.js
CHANGED
|
@@ -5,6 +5,7 @@ import { RpcSocket } from './socket.js';
|
|
|
5
5
|
import { send } from './utils/messaging.js';
|
|
6
6
|
import { VERSION } from './version.js';
|
|
7
7
|
import { APP_CODE } from './codes.js';
|
|
8
|
+
import { logger } from './logger.js';
|
|
8
9
|
/** 由 WS Client 建立的 RPC 连接 */
|
|
9
10
|
export class RpcClientSocket extends RpcSocket {
|
|
10
11
|
constructor(url, metadata, local) {
|
|
@@ -12,11 +13,13 @@ export class RpcClientSocket extends RpcSocket {
|
|
|
12
13
|
this._localMetadata = metadata;
|
|
13
14
|
this.url = typeof url == 'string' ? url : url.href;
|
|
14
15
|
this.seq = 2;
|
|
16
|
+
logger('[%s] client socket created. url=', this.id, this.url);
|
|
15
17
|
this.connect();
|
|
16
18
|
}
|
|
17
19
|
url;
|
|
18
20
|
/** @inheritdoc */
|
|
19
21
|
async authSocket() {
|
|
22
|
+
logger('[%s] authenticating...', this.id);
|
|
20
23
|
const socket = this.socket;
|
|
21
24
|
const seq = this.nextSeq();
|
|
22
25
|
send(socket, 'auth', {
|
|
@@ -26,6 +29,7 @@ export class RpcClientSocket extends RpcSocket {
|
|
|
26
29
|
metadata: this.localMetadata ?? {},
|
|
27
30
|
});
|
|
28
31
|
const [, , metadata] = await waitAuth(socket, seq, this.id);
|
|
32
|
+
logger('[%s] authenticated. remoteMeta=%o', this.id, metadata);
|
|
29
33
|
return metadata;
|
|
30
34
|
}
|
|
31
35
|
/** @inheritdoc */
|
|
@@ -34,6 +38,7 @@ export class RpcClientSocket extends RpcSocket {
|
|
|
34
38
|
const code = ev.code;
|
|
35
39
|
if (code === WEB_SOCKET_STATUS_CODES.NORMAL_CLOSURE || code === APP_CODE.AUTH_ERROR)
|
|
36
40
|
return;
|
|
41
|
+
logger('[%s] connect closed. reconnecting...', this.id);
|
|
37
42
|
setTimeout(() => {
|
|
38
43
|
this.connect();
|
|
39
44
|
}, 1000);
|
|
@@ -42,7 +47,9 @@ export class RpcClientSocket extends RpcSocket {
|
|
|
42
47
|
connect() {
|
|
43
48
|
this.socket = new WebSocket(this.url);
|
|
44
49
|
this.socket.binaryType = 'arraybuffer';
|
|
50
|
+
logger('[%s] connecting...', this.id);
|
|
45
51
|
this.ready.catch(() => {
|
|
52
|
+
logger('[%s] connect failed. retrying...', this.id);
|
|
46
53
|
setTimeout(() => {
|
|
47
54
|
this.connect();
|
|
48
55
|
}, 2000);
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/codes.d.ts
CHANGED
package/dist/codes.js
CHANGED
package/dist/codes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAChB,sDAAiB,CAAA;IACjB,kDAAe,CAAA;AACnB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB"}
|
package/dist/logger.d.ts
ADDED
package/dist/logger.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA4B,MAAM,WAAW,CAAC;AAE/D,MAAM,CAAC,IAAI,MAAM,GAAwB,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -33,10 +33,10 @@ export declare class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
33
33
|
/** WebSocket 连接后调用此方法建立 RPC 连接 */
|
|
34
34
|
connect(socket: WebSocket): Promise<RpcServerSocket<TRemote, TLocal>>;
|
|
35
35
|
/** 认证客户端 */
|
|
36
|
-
protected authSocket(socket: WebSocket): Promise<[ConnectionID, RpcMetadata]>;
|
|
36
|
+
protected authSocket(socket: WebSocket, tempId: string): Promise<[ConnectionID, RpcMetadata]>;
|
|
37
37
|
private readonly disconnectingSockets;
|
|
38
38
|
/** WebSocket 断开时调用 */
|
|
39
|
-
[kOnClose](socket: RpcServerSocket<TRemote, TLocal
|
|
39
|
+
[kOnClose](socket: RpcServerSocket<TRemote, TLocal>): void;
|
|
40
40
|
}
|
|
41
41
|
/** 由 WS Server 建立的 RPC 连接 */
|
|
42
42
|
export declare class RpcServerSocket<TRemote extends object, TLocal extends object> extends RpcSocket<TRemote, TLocal> {
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { waitAuth } from './auth.js';
|
|
2
2
|
import { APP_CODE } from './codes.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
3
4
|
import { RpcSocket } from './socket.js';
|
|
4
5
|
import { send } from './utils/messaging.js';
|
|
5
6
|
import { serializeError } from './utils/serialize.js';
|
|
@@ -7,6 +8,7 @@ import { VERSION } from './version.js';
|
|
|
7
8
|
const kOnClose = Symbol('kOnClose');
|
|
8
9
|
const kMetadata = Symbol('kMetadata');
|
|
9
10
|
const kReplaceSocket = Symbol('kReplaceSocket');
|
|
11
|
+
let tempIdGen = 0;
|
|
10
12
|
/** 由 WS Server 建立的 RPC 连接组 */
|
|
11
13
|
export class RpcServer {
|
|
12
14
|
authenticator;
|
|
@@ -36,16 +38,20 @@ export class RpcServer {
|
|
|
36
38
|
}
|
|
37
39
|
/** WebSocket 连接后调用此方法建立 RPC 连接 */
|
|
38
40
|
async connect(socket) {
|
|
41
|
+
const tempId = `#${++tempIdGen}`;
|
|
42
|
+
logger('[%s] incoming connection', tempId);
|
|
39
43
|
socket.binaryType = 'arraybuffer';
|
|
40
44
|
const s = socket;
|
|
41
|
-
const [id, metadata] = await this.authSocket(socket);
|
|
45
|
+
const [id, metadata] = await this.authSocket(socket, tempId);
|
|
42
46
|
s[kMetadata] = metadata;
|
|
43
47
|
let client = this._sockets.get(id);
|
|
44
48
|
if (!client) {
|
|
49
|
+
logger('[%s] new connection created', id);
|
|
45
50
|
client = new RpcServerSocket(id, this);
|
|
46
51
|
this._sockets.set(id, client);
|
|
47
52
|
}
|
|
48
53
|
else {
|
|
54
|
+
logger('[%s] connection resumed', id);
|
|
49
55
|
const tid = this.disconnectingSockets.get(id);
|
|
50
56
|
if (tid != null) {
|
|
51
57
|
this.disconnectingSockets.delete(id);
|
|
@@ -56,11 +62,14 @@ export class RpcServer {
|
|
|
56
62
|
return client;
|
|
57
63
|
}
|
|
58
64
|
/** 认证客户端 */
|
|
59
|
-
async authSocket(socket) {
|
|
65
|
+
async authSocket(socket, tempId) {
|
|
60
66
|
let seq, id, remoteMetadata;
|
|
61
67
|
try {
|
|
68
|
+
logger('[%s] authenticating...', tempId);
|
|
62
69
|
[seq, id, remoteMetadata] = await waitAuth(socket);
|
|
70
|
+
logger('[%s -> %s] got server auth. remoteMeta=%o', tempId, id, remoteMetadata);
|
|
63
71
|
const localMetadata = await this.authenticator(remoteMetadata);
|
|
72
|
+
logger('[%s] server auth success. localMeta=%o', id, localMetadata);
|
|
64
73
|
send(socket, 'auth', {
|
|
65
74
|
seq,
|
|
66
75
|
id,
|
|
@@ -70,6 +79,7 @@ export class RpcServer {
|
|
|
70
79
|
return [id, remoteMetadata];
|
|
71
80
|
}
|
|
72
81
|
catch (ex) {
|
|
82
|
+
logger('[%s] server auth failed. remoteMeta=%o, error=%o', id ?? tempId, remoteMetadata, ex);
|
|
73
83
|
if (seq != null && id != null) {
|
|
74
84
|
send(socket, 'auth', {
|
|
75
85
|
seq,
|
|
@@ -91,9 +101,15 @@ export class RpcServer {
|
|
|
91
101
|
}
|
|
92
102
|
disconnectingSockets = new Map();
|
|
93
103
|
/** WebSocket 断开时调用 */
|
|
94
|
-
[kOnClose](socket
|
|
95
|
-
const delay =
|
|
104
|
+
[kOnClose](socket) {
|
|
105
|
+
const delay = socket.destroyed ? 0 : 5000;
|
|
106
|
+
logger('[%s] socket closed, drop connection in %dms', socket.id, delay);
|
|
107
|
+
const oldTid = this.disconnectingSockets.get(socket.id);
|
|
108
|
+
if (oldTid != null) {
|
|
109
|
+
clearTimeout(oldTid);
|
|
110
|
+
}
|
|
96
111
|
const tid = setTimeout(() => {
|
|
112
|
+
logger('[%s] connection dropped', socket.id);
|
|
97
113
|
socket.destroy();
|
|
98
114
|
this._sockets.delete(socket.id);
|
|
99
115
|
this.disconnectingSockets.delete(socket.id);
|
|
@@ -120,7 +136,7 @@ export class RpcServerSocket extends RpcSocket {
|
|
|
120
136
|
/** @inheritdoc */
|
|
121
137
|
onClose(ev) {
|
|
122
138
|
super.onClose(ev);
|
|
123
|
-
this.server[kOnClose](this
|
|
139
|
+
this.server[kOnClose](this);
|
|
124
140
|
}
|
|
125
141
|
/** 替换 socket */
|
|
126
142
|
[kReplaceSocket](newSocket) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACtC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAYhD,8BAA8B;AAC9B,MAAM,OAAO,SAAS;IAKL;IAJb;IACI,iBAAiB;IACjB,KAA6F;IAC7F,cAAc;IACL,gBAAwC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAAlD,kBAAa,GAAb,aAAa,CAAqC;QAE3D,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,GAAG,KAAwE,CAAC;QAC1F,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAC7B,CAAC;IACL,CAAC;IACD,kBAAkB;IACT,KAAK,CAAmE;IAEjF,gBAAgB;IACG,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;IACxF,gBAAgB;IAChB,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,OAAO,CAAC,MAAiB;QAC3B,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;QAClC,MAAM,CAAC,GAAG,MAA+B,CAAC;QAC1C,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/socket.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { ConnectionID, RpcCallPayload, RpcMetadata, RpcNotifyPayload, RpcPa
|
|
|
3
3
|
import type { Methods, Notifications, RpcObject, RpcParameters, RpcReturns, Subjects } from './types/utils.js';
|
|
4
4
|
/** RPC 连接 */
|
|
5
5
|
export declare abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
6
|
+
#private;
|
|
6
7
|
readonly id: ConnectionID;
|
|
7
8
|
constructor(id: ConnectionID, local?: RpcObject<TLocal>);
|
|
8
9
|
protected _localMetadata?: RpcMetadata;
|
|
@@ -60,6 +61,8 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
|
|
|
60
61
|
private readonly pendingSubscriptions;
|
|
61
62
|
/** 调用远程订阅 */
|
|
62
63
|
subscribe<TSubject extends Subjects<TRemote>>(method: TSubject, ...args: RpcParameters<TRemote[TSubject]>): Observable<RpcReturns<TRemote[TSubject]>>;
|
|
64
|
+
/** 是否已结束 */
|
|
65
|
+
get destroyed(): boolean;
|
|
63
66
|
/** 结束 */
|
|
64
67
|
destroy(): void;
|
|
65
68
|
}
|
package/dist/socket.js
CHANGED
|
@@ -2,6 +2,8 @@ import { connected } from '@cloudpss/fetch';
|
|
|
2
2
|
import { from, Observable, Subscriber, Subscription } from 'rxjs';
|
|
3
3
|
import { send } from './utils/messaging.js';
|
|
4
4
|
import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
|
|
5
|
+
import { logger } from './logger.js';
|
|
6
|
+
import { APP_CODE } from './codes.js';
|
|
5
7
|
/** RPC 连接 */
|
|
6
8
|
export class RpcSocket {
|
|
7
9
|
id;
|
|
@@ -32,11 +34,15 @@ export class RpcSocket {
|
|
|
32
34
|
__socket;
|
|
33
35
|
/** 作为底层传输的 WebSocket */
|
|
34
36
|
get socket() {
|
|
37
|
+
if (this.#destroyed)
|
|
38
|
+
throw new Error(`RPC Socket destroyed.`);
|
|
35
39
|
if (!this.__socket)
|
|
36
40
|
throw new Error(`Socket not initialized`);
|
|
37
41
|
return this.__socket;
|
|
38
42
|
}
|
|
39
43
|
set socket(value) {
|
|
44
|
+
if (this.#destroyed)
|
|
45
|
+
throw new Error(`RPC Socket destroyed.`);
|
|
40
46
|
if (this.__socket === value)
|
|
41
47
|
return;
|
|
42
48
|
const callbacks = this.makeReady();
|
|
@@ -78,6 +84,10 @@ export class RpcSocket {
|
|
|
78
84
|
oldValue.removeEventListener('close', this.__handlers.close);
|
|
79
85
|
oldValue.removeEventListener('error', this.__handlers.error);
|
|
80
86
|
oldValue.removeEventListener('message', this.__handlers.message);
|
|
87
|
+
if (oldValue.readyState === WebSocket.OPEN || oldValue.readyState === WebSocket.CONNECTING) {
|
|
88
|
+
logger('[%s] close old socket', this.id);
|
|
89
|
+
oldValue.close(APP_CODE.REPLACED);
|
|
90
|
+
}
|
|
81
91
|
}
|
|
82
92
|
await connected(newValue);
|
|
83
93
|
const info = await this.authSocket();
|
|
@@ -90,6 +100,7 @@ export class RpcSocket {
|
|
|
90
100
|
}
|
|
91
101
|
}
|
|
92
102
|
catch (ex) {
|
|
103
|
+
logger('[%s] connection initialize failed. error=', this.id, ex);
|
|
93
104
|
this._remoteMetadata = undefined;
|
|
94
105
|
throw ex;
|
|
95
106
|
}
|
|
@@ -248,6 +259,8 @@ export class RpcSocket {
|
|
|
248
259
|
}
|
|
249
260
|
/** 发送数据 */
|
|
250
261
|
async sendPayload(type, info) {
|
|
262
|
+
if (this.#destroyed)
|
|
263
|
+
throw new Error(`RPC Socket destroyed.`);
|
|
251
264
|
await this.ready;
|
|
252
265
|
send(this.socket, type, info);
|
|
253
266
|
}
|
|
@@ -286,19 +299,28 @@ export class RpcSocket {
|
|
|
286
299
|
};
|
|
287
300
|
});
|
|
288
301
|
}
|
|
302
|
+
#destroyed = false;
|
|
303
|
+
/** 是否已结束 */
|
|
304
|
+
get destroyed() {
|
|
305
|
+
return this.#destroyed;
|
|
306
|
+
}
|
|
289
307
|
/** 结束 */
|
|
290
308
|
destroy() {
|
|
309
|
+
if (this.#destroyed)
|
|
310
|
+
return;
|
|
311
|
+
logger('[%s] socket destroyed', this.id);
|
|
291
312
|
if (this.__socket &&
|
|
292
313
|
(this.__socket.readyState === this.__socket.CONNECTING || this.__socket.readyState === this.__socket.OPEN)) {
|
|
293
314
|
this.__socket.close(1000);
|
|
294
|
-
this.__socket = undefined;
|
|
295
315
|
}
|
|
316
|
+
this.__socket = undefined;
|
|
296
317
|
this.localSubscription.forEach((s) => s.unsubscribe());
|
|
297
318
|
this.localSubscription.clear();
|
|
298
319
|
this.pendingCalls.forEach(([, reject]) => reject(new Error(`RPC Socket closed.`)));
|
|
299
320
|
this.pendingCalls.clear();
|
|
300
321
|
this.pendingSubscriptions.forEach((s) => s.error(new Error(`RPC Socket closed.`)));
|
|
301
322
|
this.pendingSubscriptions.clear();
|
|
323
|
+
this.#destroyed = true;
|
|
302
324
|
}
|
|
303
325
|
}
|
|
304
326
|
//# sourceMappingURL=socket.js.map
|
package/dist/socket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAkBlE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,aAAa;AACb,MAAM,OAAgB,SAAS;IAEd;IADb,YACa,EAAgB,EACzB,KAAyB;QADhB,OAAE,GAAF,EAAE,CAAc;QAGzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IACS,cAAc,CAAe;IAC7B,eAAe,CAAe;IACxC,aAAa;IACb,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,aAAa;IACb,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,cAAc;IACd,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IACxC,CAAC;IACgB,OAAO,CAAqB;IAC7C,kBAAkB;IAClB,IAAc,KAAK;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IACO,QAAQ,CAAa;IAC7B,wBAAwB;IACxB,IAAI,MAAM;QACN,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,IAAc,MAAM,CAAC,KAAgB;QACjC,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,OAAO;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7D,CAAC;IACD,uBAAuB;IACf,SAAS;QACb,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7E,KAAK;aACA,KAAK,CAAC,GAAG,EAAE;YACR,4BAA4B;QAChC,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;gBAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAChE,CAAC,CAAC,CAAC;QACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACO,gBAAgB,CAA8D;IAC5E,KAAK,CAAiB;IACf,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE,CAAC,EAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,KAAK,EAAE,CAAC,EAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,KAAK,EAAE,CAAC,EAAsB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,EAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KAC3C,CAAC,CAAC;IACZ,oBAAoB;IACV,KAAK,CAAC,UAAU,CAAC,QAA+B,EAAE,QAAmB;QAC3E,IAAI,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACX,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3D,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7D,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC7D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjE,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;oBACzF,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACtC,CAAC;YACL,CAAC;YACD,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC1D,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC1D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;YACtC,CAAC;QACL,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACV,MAAM,CAAC,2CAA2C,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC;IAGD,yBAAyB;IACf,OAAO,CAAC,GAAuB;QACrC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IACD,wBAAwB;IACd,MAAM,CAAC,GAAU;QACvB,EAAE;IACN,CAAC;IACD,yBAAyB;IACf,OAAO,CAAC,EAAc;QAC5B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IACD,2BAA2B;IACjB,SAAS,CAAC,EAAgB;QAChC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC;QACV,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO;gBAAE,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,oCAAoC,CAAU,CAAC;QACvF,CAAC;aAAM,CAAC;YACJ,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,kCAAkC,CAAU,CAAC;QAC1E,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBAC3B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,EAAE,cAAc,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACnD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,gBAAgB;IACN,SAAS,CAAC,OAAmB;QACnC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ;gBACT,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,IAAI,CAAC;YAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnD,uBAAuB;gBACvB,IAAI,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,KAAK,WAAW;gBACZ,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;YAChB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7D,sBAAsB;gBACtB,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC;gBAC/B,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACb,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC9D,sBAAsB;gBACtB,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC3D,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC1B,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC;YAChB;gBACI,OAAO,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;IACD,aAAa;IACH,KAAK,CAAC,SAAS,CAAC,OAA0C;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAoC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,IAAI,OAAO,MAAM,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;gBAC9B,GAAG;gBACH,KAAK,EAAE,cAAc,CAAC,IAAI,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;aAC9E,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC;YACD,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9E,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACV,IAAI,QAAQ;gBAAE,OAAO;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;IACgB,iBAAiB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACrE,aAAa;IACH,KAAK,CAAC,cAAc,CAAC,OAA4B;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAqC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,IAAI,OAAO,MAAM,IAAI,UAAU,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;gBAC/B,GAAG;gBACH,KAAK,EAAE,cAAc,CAAC,IAAI,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;aAC9E,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC;YACxG,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;gBAClC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACZ,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;oBACX,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3C,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACX,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3C,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IACD,WAAW;IACD,KAAK,CAAC,WAAW,CACvB,IAAO,EACP,IAA4C;QAE5C,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,KAAK,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,UAAU;IACA,GAAG,GAAG,CAAC,CAAC;IAClB,eAAe;IACL,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACf,CAAC;IACgB,YAAY,GAAG,IAAI,GAAG,EAGpC,CAAC;IACJ,aAAa;IACb,IAAI,CACA,MAAe,EACf,GAAG,IAAqC;QAExC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAoC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACP,CAAC;IACD,mBAAmB;IACnB,MAAM,CACF,MAAqB,EACrB,GAAG,IAA2C;QAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEgB,oBAAoB,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC/E,aAAa;IACb,SAAS,CACL,MAAgB,EAChB,GAAG,IAAsC;QAEzC,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,OAAO,GAAG,EAAE;gBACR,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtC,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU,GAAG,KAAK,CAAC;IACnB,YAAY;IACZ,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,SAAS;IACT,OAAO;QACH,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IACI,IAAI,CAAC,QAAQ;YACb,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC5G,CAAC;YACC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;CACJ"}
|
package/dist/types/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/types/utils.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/types/utils.ts"],"names":[],"mappings":";AA8DA,gBAAgB;AAChB,qBAAqB;AACrB,qBAAqB;AACrB,8CAA8C;AAC9C,0DAA0D;AAC1D,gDAAgD;AAChD,gEAAgE;AAChE,+CAA+C;AAC/C,mDAAmD;AACnD,6BAA6B;AAC7B,mEAAmE;AACnE,0DAA0D;AAC1D,+CAA+C;AAC/C,4DAA4D;AAC5D,8DAA8D;AAC9D,8CAA8C;AAC9C,2DAA2D;AAC3D,IAAI;AAEJ,uBAAuB;AACvB,wBAAwB;AACxB,6BAA6B;AAE7B,yBAAyB;AACzB,0BAA0B;AAE1B,sBAAsB;AACtB,cAAc"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/ubrpc",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.18",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"rxjs": "^7.8.1",
|
|
21
21
|
"uuid": "^9.0.1",
|
|
22
|
-
"@cloudpss/
|
|
23
|
-
"@cloudpss/
|
|
22
|
+
"@cloudpss/fetch": "~0.5.18",
|
|
23
|
+
"@cloudpss/ubjson": "~0.5.18"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@types/uuid": "^9.0.
|
|
26
|
+
"@types/uuid": "^9.0.8",
|
|
27
27
|
"@types/ws": "^8.5.10",
|
|
28
28
|
"ws": "^8.16.0"
|
|
29
29
|
},
|
package/src/client.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { RpcObject } from './types/utils.js';
|
|
|
7
7
|
import { send } from './utils/messaging.js';
|
|
8
8
|
import { VERSION } from './version.js';
|
|
9
9
|
import { APP_CODE } from './codes.js';
|
|
10
|
+
import { logger } from './logger.js';
|
|
10
11
|
|
|
11
12
|
/** 由 WS Client 建立的 RPC 连接 */
|
|
12
13
|
export class RpcClientSocket<TRemote extends object, TLocal extends object> extends RpcSocket<TRemote, TLocal> {
|
|
@@ -15,11 +16,13 @@ export class RpcClientSocket<TRemote extends object, TLocal extends object> exte
|
|
|
15
16
|
this._localMetadata = metadata;
|
|
16
17
|
this.url = typeof url == 'string' ? url : url.href;
|
|
17
18
|
this.seq = 2;
|
|
19
|
+
logger('[%s] client socket created. url=', this.id, this.url);
|
|
18
20
|
this.connect();
|
|
19
21
|
}
|
|
20
22
|
readonly url: string;
|
|
21
23
|
/** @inheritdoc */
|
|
22
24
|
protected override async authSocket(): Promise<RpcMetadata> {
|
|
25
|
+
logger('[%s] authenticating...', this.id);
|
|
23
26
|
const socket = this.socket;
|
|
24
27
|
const seq = this.nextSeq();
|
|
25
28
|
send(socket, 'auth', {
|
|
@@ -29,6 +32,7 @@ export class RpcClientSocket<TRemote extends object, TLocal extends object> exte
|
|
|
29
32
|
metadata: this.localMetadata ?? {},
|
|
30
33
|
});
|
|
31
34
|
const [, , metadata] = await waitAuth(socket, seq, this.id);
|
|
35
|
+
logger('[%s] authenticated. remoteMeta=%o', this.id, metadata);
|
|
32
36
|
return metadata;
|
|
33
37
|
}
|
|
34
38
|
/** @inheritdoc */
|
|
@@ -37,6 +41,7 @@ export class RpcClientSocket<TRemote extends object, TLocal extends object> exte
|
|
|
37
41
|
const code = ev.code as WEB_SOCKET_STATUS_CODES | APP_CODE;
|
|
38
42
|
if (code === WEB_SOCKET_STATUS_CODES.NORMAL_CLOSURE || code === APP_CODE.AUTH_ERROR) return;
|
|
39
43
|
|
|
44
|
+
logger('[%s] connect closed. reconnecting...', this.id);
|
|
40
45
|
setTimeout(() => {
|
|
41
46
|
this.connect();
|
|
42
47
|
}, 1000);
|
|
@@ -46,7 +51,9 @@ export class RpcClientSocket<TRemote extends object, TLocal extends object> exte
|
|
|
46
51
|
protected connect(): void {
|
|
47
52
|
this.socket = new WebSocket(this.url);
|
|
48
53
|
this.socket.binaryType = 'arraybuffer';
|
|
54
|
+
logger('[%s] connecting...', this.id);
|
|
49
55
|
this.ready.catch(() => {
|
|
56
|
+
logger('[%s] connect failed. retrying...', this.id);
|
|
50
57
|
setTimeout(() => {
|
|
51
58
|
this.connect();
|
|
52
59
|
}, 2000);
|
package/src/codes.ts
CHANGED
package/src/logger.ts
ADDED
package/src/server.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { waitAuth } from './auth.js';
|
|
2
2
|
import { APP_CODE } from './codes.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
3
4
|
import { RpcSocket } from './socket.js';
|
|
4
5
|
import type { ConnectionID, RpcMetadata } from './types/payload.js';
|
|
5
6
|
import type { RpcObject } from './types/utils.js';
|
|
@@ -21,6 +22,8 @@ type WebSocketWithMetadata = WebSocket & { [kMetadata]: RpcMetadata };
|
|
|
21
22
|
*/
|
|
22
23
|
type RpcClientAuthenticator = (metadata: RpcMetadata) => RpcMetadata | Promise<RpcMetadata>;
|
|
23
24
|
|
|
25
|
+
let tempIdGen = 0;
|
|
26
|
+
|
|
24
27
|
/** 由 WS Server 建立的 RPC 连接组 */
|
|
25
28
|
export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
26
29
|
constructor(
|
|
@@ -49,15 +52,19 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
49
52
|
|
|
50
53
|
/** WebSocket 连接后调用此方法建立 RPC 连接 */
|
|
51
54
|
async connect(socket: WebSocket): Promise<RpcServerSocket<TRemote, TLocal>> {
|
|
55
|
+
const tempId = `#${++tempIdGen}`;
|
|
56
|
+
logger('[%s] incoming connection', tempId);
|
|
52
57
|
socket.binaryType = 'arraybuffer';
|
|
53
58
|
const s = socket as WebSocketWithMetadata;
|
|
54
|
-
const [id, metadata] = await this.authSocket(socket);
|
|
59
|
+
const [id, metadata] = await this.authSocket(socket, tempId);
|
|
55
60
|
s[kMetadata] = metadata;
|
|
56
61
|
let client = this._sockets.get(id);
|
|
57
62
|
if (!client) {
|
|
63
|
+
logger('[%s] new connection created', id);
|
|
58
64
|
client = new RpcServerSocket(id, this);
|
|
59
65
|
this._sockets.set(id, client);
|
|
60
66
|
} else {
|
|
67
|
+
logger('[%s] connection resumed', id);
|
|
61
68
|
const tid = this.disconnectingSockets.get(id);
|
|
62
69
|
if (tid != null) {
|
|
63
70
|
this.disconnectingSockets.delete(id);
|
|
@@ -68,11 +75,14 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
68
75
|
return client;
|
|
69
76
|
}
|
|
70
77
|
/** 认证客户端 */
|
|
71
|
-
protected async authSocket(socket: WebSocket): Promise<[ConnectionID, RpcMetadata]> {
|
|
78
|
+
protected async authSocket(socket: WebSocket, tempId: string): Promise<[ConnectionID, RpcMetadata]> {
|
|
72
79
|
let seq, id, remoteMetadata;
|
|
73
80
|
try {
|
|
81
|
+
logger('[%s] authenticating...', tempId);
|
|
74
82
|
[seq, id, remoteMetadata] = await waitAuth(socket);
|
|
83
|
+
logger('[%s -> %s] got server auth. remoteMeta=%o', tempId, id, remoteMetadata);
|
|
75
84
|
const localMetadata = await this.authenticator(remoteMetadata);
|
|
85
|
+
logger('[%s] server auth success. localMeta=%o', id, localMetadata);
|
|
76
86
|
send(socket, 'auth', {
|
|
77
87
|
seq,
|
|
78
88
|
id,
|
|
@@ -81,6 +91,7 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
81
91
|
});
|
|
82
92
|
return [id, remoteMetadata];
|
|
83
93
|
} catch (ex) {
|
|
94
|
+
logger('[%s] server auth failed. remoteMeta=%o, error=%o', id ?? tempId, remoteMetadata, ex);
|
|
84
95
|
if (seq != null && id != null) {
|
|
85
96
|
send(socket, 'auth', {
|
|
86
97
|
seq,
|
|
@@ -102,9 +113,16 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
102
113
|
|
|
103
114
|
private readonly disconnectingSockets = new Map<ConnectionID, ReturnType<typeof setTimeout>>();
|
|
104
115
|
/** WebSocket 断开时调用 */
|
|
105
|
-
[kOnClose](socket: RpcServerSocket<TRemote, TLocal
|
|
106
|
-
const delay =
|
|
116
|
+
[kOnClose](socket: RpcServerSocket<TRemote, TLocal>): void {
|
|
117
|
+
const delay = socket.destroyed ? 0 : 5000;
|
|
118
|
+
logger('[%s] socket closed, drop connection in %dms', socket.id, delay);
|
|
119
|
+
|
|
120
|
+
const oldTid = this.disconnectingSockets.get(socket.id);
|
|
121
|
+
if (oldTid != null) {
|
|
122
|
+
clearTimeout(oldTid);
|
|
123
|
+
}
|
|
107
124
|
const tid = setTimeout(() => {
|
|
125
|
+
logger('[%s] connection dropped', socket.id);
|
|
108
126
|
socket.destroy();
|
|
109
127
|
this._sockets.delete(socket.id);
|
|
110
128
|
this.disconnectingSockets.delete(socket.id);
|
|
@@ -133,7 +151,7 @@ export class RpcServerSocket<TRemote extends object, TLocal extends object> exte
|
|
|
133
151
|
/** @inheritdoc */
|
|
134
152
|
protected override onClose(ev: CloseEvent): void {
|
|
135
153
|
super.onClose(ev);
|
|
136
|
-
this.server[kOnClose](this
|
|
154
|
+
this.server[kOnClose](this);
|
|
137
155
|
}
|
|
138
156
|
/** 替换 socket */
|
|
139
157
|
[kReplaceSocket](newSocket: WebSocketWithMetadata): Promise<void> {
|
package/src/socket.ts
CHANGED
|
@@ -19,6 +19,8 @@ import type {
|
|
|
19
19
|
} from './types/utils.js';
|
|
20
20
|
import { send } from './utils/messaging.js';
|
|
21
21
|
import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
|
|
22
|
+
import { logger } from './logger.js';
|
|
23
|
+
import { APP_CODE } from './codes.js';
|
|
22
24
|
|
|
23
25
|
/** RPC 连接 */
|
|
24
26
|
export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
@@ -51,10 +53,12 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
51
53
|
private __socket?: WebSocket;
|
|
52
54
|
/** 作为底层传输的 WebSocket */
|
|
53
55
|
get socket(): WebSocket {
|
|
56
|
+
if (this.#destroyed) throw new Error(`RPC Socket destroyed.`);
|
|
54
57
|
if (!this.__socket) throw new Error(`Socket not initialized`);
|
|
55
58
|
return this.__socket;
|
|
56
59
|
}
|
|
57
60
|
protected set socket(value: WebSocket) {
|
|
61
|
+
if (this.#destroyed) throw new Error(`RPC Socket destroyed.`);
|
|
58
62
|
if (this.__socket === value) return;
|
|
59
63
|
const callbacks = this.makeReady();
|
|
60
64
|
const oldValue = this.__socket;
|
|
@@ -92,6 +96,10 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
92
96
|
oldValue.removeEventListener('close', this.__handlers.close);
|
|
93
97
|
oldValue.removeEventListener('error', this.__handlers.error);
|
|
94
98
|
oldValue.removeEventListener('message', this.__handlers.message);
|
|
99
|
+
if (oldValue.readyState === WebSocket.OPEN || oldValue.readyState === WebSocket.CONNECTING) {
|
|
100
|
+
logger('[%s] close old socket', this.id);
|
|
101
|
+
oldValue.close(APP_CODE.REPLACED);
|
|
102
|
+
}
|
|
95
103
|
}
|
|
96
104
|
await connected(newValue);
|
|
97
105
|
const info = await this.authSocket();
|
|
@@ -103,6 +111,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
103
111
|
this._remoteMetadata = info ?? {};
|
|
104
112
|
}
|
|
105
113
|
} catch (ex) {
|
|
114
|
+
logger('[%s] connection initialize failed. error=', this.id, ex);
|
|
106
115
|
this._remoteMetadata = undefined;
|
|
107
116
|
throw ex;
|
|
108
117
|
}
|
|
@@ -254,6 +263,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
254
263
|
type: T,
|
|
255
264
|
info: Omit<RpcPayload & { type: T }, 'type'>,
|
|
256
265
|
): Promise<void> {
|
|
266
|
+
if (this.#destroyed) throw new Error(`RPC Socket destroyed.`);
|
|
257
267
|
await this.ready;
|
|
258
268
|
send(this.socket, type, info);
|
|
259
269
|
}
|
|
@@ -305,20 +315,29 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
305
315
|
};
|
|
306
316
|
});
|
|
307
317
|
}
|
|
318
|
+
|
|
319
|
+
#destroyed = false;
|
|
320
|
+
/** 是否已结束 */
|
|
321
|
+
get destroyed(): boolean {
|
|
322
|
+
return this.#destroyed;
|
|
323
|
+
}
|
|
308
324
|
/** 结束 */
|
|
309
325
|
destroy(): void {
|
|
326
|
+
if (this.#destroyed) return;
|
|
327
|
+
logger('[%s] socket destroyed', this.id);
|
|
310
328
|
if (
|
|
311
329
|
this.__socket &&
|
|
312
330
|
(this.__socket.readyState === this.__socket.CONNECTING || this.__socket.readyState === this.__socket.OPEN)
|
|
313
331
|
) {
|
|
314
332
|
this.__socket.close(1000);
|
|
315
|
-
this.__socket = undefined;
|
|
316
333
|
}
|
|
334
|
+
this.__socket = undefined;
|
|
317
335
|
this.localSubscription.forEach((s) => s.unsubscribe());
|
|
318
336
|
this.localSubscription.clear();
|
|
319
337
|
this.pendingCalls.forEach(([, reject]) => reject(new Error(`RPC Socket closed.`)));
|
|
320
338
|
this.pendingCalls.clear();
|
|
321
339
|
this.pendingSubscriptions.forEach((s) => s.error(new Error(`RPC Socket closed.`)));
|
|
322
340
|
this.pendingSubscriptions.clear();
|
|
341
|
+
this.#destroyed = true;
|
|
323
342
|
}
|
|
324
343
|
}
|
package/src/types/utils.ts
CHANGED
|
@@ -8,13 +8,14 @@ export type ObservableLike<T> = Observable<T> | InteropObservable<T> | AsyncIter
|
|
|
8
8
|
type IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends <G>() => G extends B ? 1 : 2 ? true : false;
|
|
9
9
|
|
|
10
10
|
/** 作为通知输出的方法 */
|
|
11
|
-
type IsNotificationReturn<R> =
|
|
12
|
-
|
|
13
|
-
: IsEqual<R, undefined> extends true
|
|
14
|
-
? true
|
|
15
|
-
: R extends PromiseLike<void> | void
|
|
11
|
+
type IsNotificationReturn<R> =
|
|
12
|
+
IsEqual<R, void> extends true
|
|
16
13
|
? true
|
|
17
|
-
:
|
|
14
|
+
: IsEqual<R, undefined> extends true
|
|
15
|
+
? true
|
|
16
|
+
: R extends PromiseLike<void> | void
|
|
17
|
+
? true
|
|
18
|
+
: false;
|
|
18
19
|
|
|
19
20
|
/** 作为 Observable 输出的方法 */
|
|
20
21
|
type ObservableReturn = ObservableLike<any> | PromiseLike<ObservableLike<any>>;
|
package/tests/runner.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { RpcClientSocket } from '@cloudpss/ubrpc';
|
|
3
|
+
import { v5 } from 'uuid';
|
|
4
|
+
import { setTimeout } from 'node:timers/promises';
|
|
5
|
+
|
|
6
|
+
const token = 'a7193dc0-f65f-465f-89ed-18a3f72cf13a';
|
|
7
|
+
const id = v5(token, '24b716e5-01c6-452a-9584-845b586d915f');
|
|
8
|
+
const rpc = new RpcClientSocket('wss://internal.cloudpss.net/api/job', {
|
|
9
|
+
info: {
|
|
10
|
+
id,
|
|
11
|
+
token,
|
|
12
|
+
name: 'test mock',
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
await setTimeout(1000);
|
|
17
|
+
rpc.socket.close(3600);
|