@cloudpss/ubrpc 0.6.16 → 0.6.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/auth.d.ts +4 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +50 -35
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -12
- package/dist/client.js.map +1 -1
- package/dist/codes.d.ts +2 -0
- package/dist/codes.d.ts.map +1 -1
- package/dist/codes.js +9 -0
- package/dist/codes.js.map +1 -1
- package/dist/server.d.ts +6 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -4
- package/dist/server.js.map +1 -1
- package/dist/socket.d.ts +3 -3
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +21 -24
- package/dist/socket.js.map +1 -1
- package/dist/{ready.d.ts → utils/ready.d.ts} +1 -1
- package/dist/utils/ready.d.ts.map +1 -0
- package/dist/utils/ready.js.map +1 -0
- package/package.json +3 -3
- package/src/auth.ts +52 -42
- package/src/client.ts +33 -15
- package/src/codes.ts +9 -0
- package/src/server.ts +17 -7
- package/src/socket.ts +22 -28
- package/src/{ready.ts → utils/ready.ts} +1 -1
- package/tests/server.ts +6 -4
- package/dist/ready.d.ts.map +0 -1
- package/dist/ready.js.map +0 -1
- /package/dist/{ready.js → utils/ready.js} +0 -0
package/dist/auth.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { ConnectionID, RpcMetadata } from './types/payload.js';
|
|
2
|
+
/** 认证结果 */
|
|
3
|
+
type AuthResult = [seq: number, id: ConnectionID, meta: RpcMetadata];
|
|
2
4
|
/** 接受认证消息 */
|
|
3
|
-
export declare function waitAuth(socket: WebSocket, seq?: number, id?: ConnectionID): Promise<
|
|
5
|
+
export declare function waitAuth(socket: WebSocket, seq?: number, id?: ConnectionID): Promise<AuthResult>;
|
|
6
|
+
export {};
|
|
4
7
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOpE,WAAW;AACX,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AA4BrE,aAAa;AACb,wBAAsB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BtG"}
|
package/dist/auth.js
CHANGED
|
@@ -1,52 +1,67 @@
|
|
|
1
1
|
import { decodePayload, deserializeError } from './utils/serialize.js';
|
|
2
2
|
import { VERSION } from './version.js';
|
|
3
|
+
import { WebSocketAppCode } from './codes.js';
|
|
3
4
|
const AUTH_TIMEOUT = 5000;
|
|
5
|
+
/** 检查认证消息 */
|
|
6
|
+
function checkAuthMessage(data, seq, id) {
|
|
7
|
+
const isResponse = seq != null && id != null;
|
|
8
|
+
const payload = decodePayload(data);
|
|
9
|
+
if (payload?.type !== 'auth') {
|
|
10
|
+
if (isResponse)
|
|
11
|
+
throw new Error(`Failed to authenticate, bad response from server`);
|
|
12
|
+
else
|
|
13
|
+
throw new Error(`Failed to authenticate, bad request from client`);
|
|
14
|
+
}
|
|
15
|
+
if (payload.version !== VERSION) {
|
|
16
|
+
throw new Error(`Failed to authenticate, version not match, expected ${VERSION}, got ${payload.version}`);
|
|
17
|
+
}
|
|
18
|
+
if (isResponse) {
|
|
19
|
+
if (payload.seq !== seq) {
|
|
20
|
+
throw new Error(`Failed to authenticate, bad response seq from server`);
|
|
21
|
+
}
|
|
22
|
+
if (payload.id !== id) {
|
|
23
|
+
throw new Error(`Failed to authenticate, bad response id from server`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (payload.error) {
|
|
27
|
+
throw deserializeError(payload.error);
|
|
28
|
+
}
|
|
29
|
+
const metadata = typeof payload.metadata != 'object' || payload.metadata == null ? {} : payload.metadata;
|
|
30
|
+
return [payload.seq, payload.id, metadata];
|
|
31
|
+
}
|
|
4
32
|
/** 接受认证消息 */
|
|
5
33
|
export async function waitAuth(socket, seq, id) {
|
|
6
34
|
return new Promise((resolve, reject) => {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
35
|
+
const onTimeout = () => {
|
|
36
|
+
reject(new Error(`Failed to authenticate, no remote message in ${AUTH_TIMEOUT}ms`));
|
|
37
|
+
finalize(false);
|
|
38
|
+
};
|
|
39
|
+
const onClose = (ev) => {
|
|
40
|
+
reject(new Error(`Failed to authenticate, socket closed, code=${ev.code}: ${ev.reason}`));
|
|
41
|
+
finalize(false);
|
|
42
|
+
};
|
|
43
|
+
const onMessage = (ev) => {
|
|
13
44
|
try {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return reject(new Error(`Failed to authenticate, bad response from server`));
|
|
18
|
-
else
|
|
19
|
-
return reject(new Error(`Failed to authenticate, bad request from client`));
|
|
20
|
-
}
|
|
21
|
-
if (payload.version !== VERSION) {
|
|
22
|
-
return reject(new Error(`Failed to authenticate, version not match, expected ${VERSION}, got ${payload.version}`));
|
|
23
|
-
}
|
|
24
|
-
if (isResponse) {
|
|
25
|
-
if (payload.seq !== seq) {
|
|
26
|
-
return reject(new Error(`Failed to authenticate, bad response seq from server`));
|
|
27
|
-
}
|
|
28
|
-
if (payload.id !== id) {
|
|
29
|
-
return reject(new Error(`Failed to authenticate, bad response id from server`));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (payload.error) {
|
|
33
|
-
return reject(deserializeError(payload.error));
|
|
34
|
-
}
|
|
35
|
-
const metadata = typeof payload.metadata != 'object' ? {} : (payload.metadata ?? {});
|
|
36
|
-
resolve([payload.seq, payload.id, metadata]);
|
|
45
|
+
const result = checkAuthMessage(ev.data, seq, id);
|
|
46
|
+
resolve(result);
|
|
47
|
+
finalize(true);
|
|
37
48
|
}
|
|
38
49
|
catch (ex) {
|
|
39
50
|
reject(ex);
|
|
40
|
-
|
|
41
|
-
finally {
|
|
42
|
-
finalize();
|
|
51
|
+
finalize(false);
|
|
43
52
|
}
|
|
44
53
|
};
|
|
45
|
-
const
|
|
54
|
+
const timeout = setTimeout(onTimeout, AUTH_TIMEOUT);
|
|
55
|
+
socket.addEventListener('close', onClose);
|
|
56
|
+
socket.addEventListener('message', onMessage);
|
|
57
|
+
const finalize = (ok) => {
|
|
46
58
|
clearTimeout(timeout);
|
|
47
|
-
socket.removeEventListener('message',
|
|
59
|
+
socket.removeEventListener('message', onMessage);
|
|
60
|
+
socket.removeEventListener('close', onClose);
|
|
61
|
+
if (ok)
|
|
62
|
+
return;
|
|
63
|
+
socket.close(WebSocketAppCode.AUTH_ERROR);
|
|
48
64
|
};
|
|
49
|
-
socket.addEventListener('message', handleMessage, { once: true });
|
|
50
65
|
});
|
|
51
66
|
}
|
|
52
67
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -4,9 +4,12 @@ import type { RpcMetadata } from './types/payload.js';
|
|
|
4
4
|
import type { RpcObject } from './types/utils.js';
|
|
5
5
|
/** 由 WS Client 建立的 RPC 连接 */
|
|
6
6
|
export declare class RpcClientSocket<TRemote extends object, TLocal extends object> extends RpcSocket<TRemote, TLocal> {
|
|
7
|
+
#private;
|
|
7
8
|
/** 建立连接使用的 WebSocket 实现 */
|
|
8
9
|
static WebSocket: typeof WebSocket | null;
|
|
9
10
|
constructor(url: string | URL, metadata?: RpcMetadata, local?: RpcObject<TLocal>);
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
protected get local(): RpcObject<TLocal> | undefined;
|
|
10
13
|
readonly url: string;
|
|
11
14
|
/** @inheritdoc */
|
|
12
15
|
protected authSocket(): Promise<RpcMetadata>;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQlD,6BAA6B;AAC7B,qBAAa,eAAe,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,CAAE,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;;IAC1G,2BAA2B;IAC3B,MAAM,CAAC,SAAS,EAAE,OAAO,SAAS,GAAG,IAAI,CAAQ;gBAErC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;IAUhF,kBAAkB;IAClB,cAAuB,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAE5D;IACD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kBAAkB;cACO,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAgB3D,kBAAkB;cACC,OAAO,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAUhD,WAAW;IACX,SAAS,CAAC,OAAO,IAAI,IAAI;CAoB5B"}
|
package/dist/client.js
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
|
-
import { WebSocket
|
|
1
|
+
import { WebSocket } from '@cloudpss/fetch';
|
|
2
2
|
import { v4 } from 'uuid';
|
|
3
3
|
import { waitAuth } from './auth.js';
|
|
4
4
|
import { RpcSocket } from './socket.js';
|
|
5
5
|
import { send } from './utils/messaging.js';
|
|
6
6
|
import { VERSION } from './version.js';
|
|
7
|
-
import { WebSocketAppCode } from './codes.js';
|
|
8
7
|
import { logger } from './logger.js';
|
|
8
|
+
const INIT_RECONNECT_TIMEOUT = 500;
|
|
9
|
+
const MAX_RECONNECT_TIMEOUT = 30000;
|
|
9
10
|
/** 由 WS Client 建立的 RPC 连接 */
|
|
10
11
|
export class RpcClientSocket extends RpcSocket {
|
|
11
12
|
/** 建立连接使用的 WebSocket 实现 */
|
|
12
13
|
static { this.WebSocket = null; }
|
|
13
14
|
constructor(url, metadata, local) {
|
|
14
|
-
super(v4()
|
|
15
|
+
super(v4());
|
|
16
|
+
this.#local = local;
|
|
15
17
|
this._localMetadata = metadata;
|
|
16
18
|
this.url = typeof url == 'string' ? url : url.href;
|
|
17
19
|
this.seq = 2;
|
|
18
20
|
logger('[%s] client socket created. url=', this.id, this.url);
|
|
19
21
|
this.connect();
|
|
20
22
|
}
|
|
23
|
+
#local;
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
get local() {
|
|
26
|
+
return this.#local;
|
|
27
|
+
}
|
|
21
28
|
/** @inheritdoc */
|
|
22
29
|
async authSocket() {
|
|
23
30
|
logger('[%s] authenticating...', this.id);
|
|
@@ -33,27 +40,34 @@ export class RpcClientSocket extends RpcSocket {
|
|
|
33
40
|
logger('[%s] authenticated. remoteMeta=%o', this.id, metadata);
|
|
34
41
|
return metadata;
|
|
35
42
|
}
|
|
43
|
+
#reconnectTimeout = INIT_RECONNECT_TIMEOUT;
|
|
36
44
|
/** @inheritdoc */
|
|
37
45
|
onClose(ev) {
|
|
38
46
|
super.onClose(ev);
|
|
39
|
-
|
|
40
|
-
if (code === WebSocketStatusCode.NORMAL_CLOSURE || code === WebSocketAppCode.AUTH_ERROR)
|
|
47
|
+
if (this.destroyed)
|
|
41
48
|
return;
|
|
42
|
-
logger('[%s]
|
|
49
|
+
logger('[%s] reconnecting in %dms...', this.id, this.#reconnectTimeout);
|
|
43
50
|
setTimeout(() => {
|
|
44
51
|
this.connect();
|
|
45
|
-
},
|
|
52
|
+
}, this.#reconnectTimeout);
|
|
46
53
|
}
|
|
47
54
|
/** 建立连接 */
|
|
48
55
|
connect() {
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
const socket = new (this.constructor.WebSocket ?? WebSocket)(this.url);
|
|
57
|
+
socket.binaryType = 'arraybuffer';
|
|
58
|
+
this.socket = socket;
|
|
51
59
|
logger('[%s] connecting...', this.id);
|
|
52
|
-
this.ready.
|
|
53
|
-
logger('[%s]
|
|
60
|
+
this.ready.then(() => {
|
|
61
|
+
logger('[%s] connected.', this.id);
|
|
62
|
+
this.#reconnectTimeout = INIT_RECONNECT_TIMEOUT;
|
|
63
|
+
}, () => {
|
|
64
|
+
if (this.destroyed)
|
|
65
|
+
return;
|
|
66
|
+
this.#reconnectTimeout = Math.min(this.#reconnectTimeout * 2, MAX_RECONNECT_TIMEOUT);
|
|
67
|
+
logger('[%s] connect failed. retrying in %dms...', this.id, this.#reconnectTimeout);
|
|
54
68
|
setTimeout(() => {
|
|
55
69
|
this.connect();
|
|
56
|
-
},
|
|
70
|
+
}, this.#reconnectTimeout);
|
|
57
71
|
});
|
|
58
72
|
}
|
|
59
73
|
}
|
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,
|
|
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.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAEA,qBAAqB;AACrB,oBAAY,gBAAgB;IACxB,UAAU,OAAO;IACjB,QAAQ,OAAO;CAClB;AAED,cAAc;AACd,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI9D"}
|
package/dist/codes.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import { WebSocketStatusCode } from '@cloudpss/fetch';
|
|
1
2
|
/** WebSocket 关闭代码 */
|
|
2
3
|
export var WebSocketAppCode;
|
|
3
4
|
(function (WebSocketAppCode) {
|
|
4
5
|
WebSocketAppCode[WebSocketAppCode["AUTH_ERROR"] = 3401] = "AUTH_ERROR";
|
|
5
6
|
WebSocketAppCode[WebSocketAppCode["REPLACED"] = 3402] = "REPLACED";
|
|
6
7
|
})(WebSocketAppCode || (WebSocketAppCode = {}));
|
|
8
|
+
/** 是否应进行重连 */
|
|
9
|
+
export function shouldReconnectWebSocket(code) {
|
|
10
|
+
if (code === WebSocketAppCode.AUTH_ERROR || code === WebSocketAppCode.REPLACED)
|
|
11
|
+
return false;
|
|
12
|
+
if (code === WebSocketStatusCode.NORMAL_CLOSURE)
|
|
13
|
+
return false;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
7
16
|
//# sourceMappingURL=codes.js.map
|
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,gBAGX;AAHD,WAAY,gBAAgB;IACxB,sEAAiB,CAAA;IACjB,kEAAe,CAAA;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B"}
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,qBAAqB;AACrB,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,sEAAiB,CAAA;IACjB,kEAAe,CAAA;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,cAAc;AACd,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACjD,IAAI,IAAI,KAAK,gBAAgB,CAAC,UAAU,IAAI,IAAI,KAAK,gBAAgB,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7F,IAAI,IAAI,KAAK,mBAAmB,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -11,19 +11,21 @@ type WebSocketWithMetadata = WebSocket & {
|
|
|
11
11
|
/**
|
|
12
12
|
* 客户端认证方法
|
|
13
13
|
* @param metadata 客户端传入的认证元数据
|
|
14
|
+
* @param id 客户端连接 ID
|
|
15
|
+
* @param client 已存在的客户端连接对象(断线重连时会传入)
|
|
14
16
|
* @returns 服务端返回客户端的认证元数据
|
|
15
17
|
* @throws {unknown} 认证失败时抛出异常
|
|
16
18
|
*/
|
|
17
|
-
type RpcClientAuthenticator = (metadata: RpcMetadata) => RpcMetadata | Promise<RpcMetadata>;
|
|
19
|
+
type RpcClientAuthenticator<TRemote extends object, TLocal extends object> = (metadata: RpcMetadata, id: ConnectionID, client: RpcServerSocket<TRemote, TLocal> | undefined) => RpcMetadata | Promise<RpcMetadata>;
|
|
18
20
|
/** 由 WS Server 建立的 RPC 连接组 */
|
|
19
21
|
export declare class RpcServer<TRemote extends object, TLocal extends object> {
|
|
20
22
|
/** 客户端认证方法 */
|
|
21
|
-
readonly authenticator: RpcClientAuthenticator
|
|
23
|
+
readonly authenticator: RpcClientAuthenticator<TRemote, TLocal>;
|
|
22
24
|
constructor(
|
|
23
25
|
/** 服务端 RPC 实现 */
|
|
24
26
|
local?: RpcObject<TLocal> | ((socket: RpcServerSocket<TRemote, TLocal>) => RpcObject<TLocal>),
|
|
25
27
|
/** 客户端认证方法 */
|
|
26
|
-
authenticator?: RpcClientAuthenticator);
|
|
28
|
+
authenticator?: RpcClientAuthenticator<TRemote, TLocal>);
|
|
27
29
|
/** 用于响应调用的本地对象 */
|
|
28
30
|
readonly local?: (socket: RpcServerSocket<TRemote, TLocal>) => RpcObject<TLocal>;
|
|
29
31
|
/** 已建立连接的客户端 */
|
|
@@ -33,7 +35,7 @@ export declare class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
33
35
|
/** WebSocket 连接后调用此方法建立 RPC 连接 */
|
|
34
36
|
connect(socket: WebSocket): Promise<RpcServerSocket<TRemote, TLocal>>;
|
|
35
37
|
/** 认证客户端 */
|
|
36
|
-
protected authSocket(socket: WebSocket, tempId: string): Promise<[ConnectionID, RpcMetadata]>;
|
|
38
|
+
protected authSocket(socket: WebSocket, tempId: string): Promise<[ConnectionID, RpcMetadata, RpcServerSocket<TRemote, TLocal> | undefined]>;
|
|
37
39
|
private readonly disconnectingSockets;
|
|
38
40
|
/** WebSocket 断开时调用 */
|
|
39
41
|
[kOnClose](socket: RpcServerSocket<TRemote, TLocal>): void;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,QAAA,MAAM,QAAQ,eAAyB,CAAC;AACxC,QAAA,MAAM,SAAS,eAA0B,CAAC;AAC1C,QAAA,MAAM,cAAc,eAA+B,CAAC;AAEpD,kBAAkB;AAClB,KAAK,qBAAqB,GAAG,SAAS,GAAG;IAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AACtE
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -40,9 +40,9 @@ export class RpcServer {
|
|
|
40
40
|
logger('[%s] incoming connection', tempId);
|
|
41
41
|
socket.binaryType = 'arraybuffer';
|
|
42
42
|
const s = socket;
|
|
43
|
-
const [id, metadata] = await this.authSocket(socket, tempId);
|
|
43
|
+
const [id, metadata, existingClient] = await this.authSocket(socket, tempId);
|
|
44
44
|
s[kMetadata] = metadata;
|
|
45
|
-
let client =
|
|
45
|
+
let client = existingClient;
|
|
46
46
|
if (!client) {
|
|
47
47
|
logger('[%s] new connection created', id);
|
|
48
48
|
client = new RpcServerSocket(id, this);
|
|
@@ -66,7 +66,8 @@ export class RpcServer {
|
|
|
66
66
|
logger('[%s] authenticating...', tempId);
|
|
67
67
|
[seq, id, remoteMetadata] = await waitAuth(socket);
|
|
68
68
|
logger('[%s -> %s] got server auth. remoteMeta=%o', tempId, id, remoteMetadata);
|
|
69
|
-
const
|
|
69
|
+
const client = this._sockets.get(id);
|
|
70
|
+
const localMetadata = await this.authenticator(remoteMetadata, id, client);
|
|
70
71
|
logger('[%s] server auth success. localMeta=%o', id, localMetadata);
|
|
71
72
|
send(socket, 'auth', {
|
|
72
73
|
seq,
|
|
@@ -74,7 +75,7 @@ export class RpcServer {
|
|
|
74
75
|
version: VERSION,
|
|
75
76
|
metadata: localMetadata,
|
|
76
77
|
});
|
|
77
|
-
return [id, remoteMetadata];
|
|
78
|
+
return [id, remoteMetadata, client];
|
|
78
79
|
}
|
|
79
80
|
catch (ex) {
|
|
80
81
|
logger('[%s] server auth failed. remoteMeta=%o, error=%o', id ?? tempId, remoteMetadata, ex);
|
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,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,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,GAAG,CAAC,UAAU,CAAC,CAAC;AACxC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,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
|
@@ -5,7 +5,7 @@ import type { Methods, Notifications, RpcObject, RpcParameters, RpcReturns, Subj
|
|
|
5
5
|
export declare abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
6
6
|
#private;
|
|
7
7
|
readonly id: ConnectionID;
|
|
8
|
-
constructor(id: ConnectionID
|
|
8
|
+
constructor(id: ConnectionID);
|
|
9
9
|
protected _localMetadata?: RpcMetadata;
|
|
10
10
|
protected _remoteMetadata?: RpcMetadata;
|
|
11
11
|
/** 本地认证信息 */
|
|
@@ -15,7 +15,7 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
|
|
|
15
15
|
/** 连接是否已认证 */
|
|
16
16
|
get authenticated(): boolean;
|
|
17
17
|
/** 用于响应调用的本地对象 */
|
|
18
|
-
protected get local(): RpcObject<TLocal> | undefined;
|
|
18
|
+
protected abstract get local(): RpcObject<TLocal> | undefined;
|
|
19
19
|
/** 作为底层传输的 WebSocket */
|
|
20
20
|
get socket(): WebSocket;
|
|
21
21
|
protected set socket(value: WebSocket);
|
|
@@ -25,7 +25,7 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
|
|
|
25
25
|
/** 认证 WebSocket */
|
|
26
26
|
protected abstract authSocket(): Promise<RpcMetadata>;
|
|
27
27
|
/** 响应 WebSocket error */
|
|
28
|
-
protected onError(
|
|
28
|
+
protected onError(ev: ErrorEvent | Event): void;
|
|
29
29
|
/** 响应 WebSocket open */
|
|
30
30
|
protected onOpen(_ev: Event): void;
|
|
31
31
|
/** 响应 WebSocket close */
|
package/dist/socket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,UAAU,EAAqB,MAAM,MAAM,CAAC;AAC3D,OAAO,KAAK,EACR,YAAY,EACZ,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACR,OAAO,EACP,aAAa,EAEb,SAAS,EACT,aAAa,EACb,UAAU,EACV,QAAQ,EACX,MAAM,kBAAkB,CAAC;AAQ1B,aAAa;AACb,8BAAsB,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM;;
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
|
package/dist/socket.js
CHANGED
|
@@ -3,11 +3,11 @@ import { from, Observable } from 'rxjs';
|
|
|
3
3
|
import { send } from './utils/messaging.js';
|
|
4
4
|
import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
|
|
5
5
|
import { logger } from './logger.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { makeReady } from './utils/ready.js';
|
|
7
|
+
import { shouldReconnectWebSocket, WebSocketAppCode } from './codes.js';
|
|
8
8
|
/** RPC 连接 */
|
|
9
9
|
export class RpcSocket {
|
|
10
|
-
constructor(id
|
|
10
|
+
constructor(id) {
|
|
11
11
|
this.id = id;
|
|
12
12
|
this.#handlers = Object.freeze({
|
|
13
13
|
open: (ev) => this.onOpen(ev),
|
|
@@ -21,7 +21,6 @@ export class RpcSocket {
|
|
|
21
21
|
this.#pendingCalls = new Map();
|
|
22
22
|
this.#pendingSubscriptions = new Map();
|
|
23
23
|
this.#destroyed = false;
|
|
24
|
-
this.#local = local;
|
|
25
24
|
makeReady(this);
|
|
26
25
|
}
|
|
27
26
|
/** 本地认证信息 */
|
|
@@ -36,11 +35,6 @@ export class RpcSocket {
|
|
|
36
35
|
get authenticated() {
|
|
37
36
|
return this._remoteMetadata != null;
|
|
38
37
|
}
|
|
39
|
-
#local;
|
|
40
|
-
/** 用于响应调用的本地对象 */
|
|
41
|
-
get local() {
|
|
42
|
-
return this.#local;
|
|
43
|
-
}
|
|
44
38
|
#socket;
|
|
45
39
|
/** 作为底层传输的 WebSocket */
|
|
46
40
|
get socket() {
|
|
@@ -64,12 +58,13 @@ export class RpcSocket {
|
|
|
64
58
|
/** 初始化 WebSocket */
|
|
65
59
|
async initSocket(oldValue, newValue) {
|
|
66
60
|
try {
|
|
61
|
+
const { open, close, error, message } = this.#handlers;
|
|
67
62
|
if (oldValue) {
|
|
68
|
-
oldValue.removeEventListener('open',
|
|
69
|
-
oldValue.removeEventListener('close',
|
|
70
|
-
oldValue.removeEventListener('error',
|
|
71
|
-
oldValue.removeEventListener('message',
|
|
72
|
-
if (oldValue.readyState
|
|
63
|
+
oldValue.removeEventListener('open', open);
|
|
64
|
+
oldValue.removeEventListener('close', close);
|
|
65
|
+
oldValue.removeEventListener('error', error);
|
|
66
|
+
oldValue.removeEventListener('message', message);
|
|
67
|
+
if (oldValue.readyState !== oldValue.CLOSED) {
|
|
73
68
|
logger('[%s] close old socket', this.id);
|
|
74
69
|
oldValue.close(WebSocketAppCode.REPLACED);
|
|
75
70
|
}
|
|
@@ -77,21 +72,22 @@ export class RpcSocket {
|
|
|
77
72
|
await connected(newValue);
|
|
78
73
|
const info = await this.authSocket();
|
|
79
74
|
if (this.#socket === newValue) {
|
|
80
|
-
newValue.addEventListener('open',
|
|
81
|
-
newValue.addEventListener('close',
|
|
82
|
-
newValue.addEventListener('error',
|
|
83
|
-
newValue.addEventListener('message',
|
|
75
|
+
newValue.addEventListener('open', open);
|
|
76
|
+
newValue.addEventListener('close', close);
|
|
77
|
+
newValue.addEventListener('error', error);
|
|
78
|
+
newValue.addEventListener('message', message);
|
|
84
79
|
this._remoteMetadata = info ?? {};
|
|
85
80
|
}
|
|
86
81
|
}
|
|
87
82
|
catch (ex) {
|
|
88
|
-
logger('[%s] connection initialize failed. error
|
|
83
|
+
logger('[%s] connection initialize failed. error=%o', this.id, ex);
|
|
89
84
|
this._remoteMetadata = undefined;
|
|
90
85
|
throw ex;
|
|
91
86
|
}
|
|
92
87
|
}
|
|
93
88
|
/** 响应 WebSocket error */
|
|
94
|
-
onError(
|
|
89
|
+
onError(ev) {
|
|
90
|
+
logger('[%s] socket error: %o', this.id, ev);
|
|
95
91
|
this._remoteMetadata = undefined;
|
|
96
92
|
makeReady(this);
|
|
97
93
|
}
|
|
@@ -101,8 +97,10 @@ export class RpcSocket {
|
|
|
101
97
|
}
|
|
102
98
|
/** 响应 WebSocket close */
|
|
103
99
|
onClose(ev) {
|
|
100
|
+
const { code } = ev;
|
|
101
|
+
logger('[%s] socket closed, code=%d', this.id, code);
|
|
104
102
|
this._remoteMetadata = undefined;
|
|
105
|
-
if (
|
|
103
|
+
if (!shouldReconnectWebSocket(code)) {
|
|
106
104
|
this.destroy();
|
|
107
105
|
}
|
|
108
106
|
else {
|
|
@@ -298,11 +296,10 @@ export class RpcSocket {
|
|
|
298
296
|
if (this.#destroyed)
|
|
299
297
|
return;
|
|
300
298
|
logger('[%s] socket destroyed', this.id);
|
|
301
|
-
if (this.#socket
|
|
302
|
-
(this.#socket.readyState === this.#socket.CONNECTING || this.#socket.readyState === this.#socket.OPEN)) {
|
|
299
|
+
if (this.#socket) {
|
|
303
300
|
this.#socket.close(1000);
|
|
301
|
+
this.#socket = undefined;
|
|
304
302
|
}
|
|
305
|
-
this.#socket = undefined;
|
|
306
303
|
for (const s of this.#localSubscription.values()) {
|
|
307
304
|
s.unsubscribe();
|
|
308
305
|
}
|
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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../../src/utils/ready.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAS9D;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAuB7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready.js","sourceRoot":"","sources":["../../src/utils/ready.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAOlD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAmB,MAAS;IACjD,MAAM,CAAC,GAAG,MAAsB,CAAC;IAEjC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;IACpC,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEtC,IAAI,SAA6C,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC/B,KAAK;SACA,KAAK,CAAC,GAAG,EAAE;QACR,4BAA4B;IAChC,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACV,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACnC,CAAC;IACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IAChB,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/ubrpc",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.18",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"rxjs": "^7.8.2",
|
|
21
21
|
"uuid": "^13.0.0",
|
|
22
|
-
"@cloudpss/fetch": "~0.6.
|
|
23
|
-
"@cloudpss/ubjson": "~0.6.
|
|
22
|
+
"@cloudpss/fetch": "~0.6.18",
|
|
23
|
+
"@cloudpss/ubjson": "~0.6.18"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/ws": "^8.18.1",
|
package/src/auth.ts
CHANGED
|
@@ -1,59 +1,69 @@
|
|
|
1
|
-
import type { WebSocket } from '@cloudpss/fetch';
|
|
2
1
|
import type { ConnectionID, RpcMetadata } from './types/payload.js';
|
|
3
2
|
import { decodePayload, deserializeError } from './utils/serialize.js';
|
|
4
3
|
import { VERSION } from './version.js';
|
|
4
|
+
import { WebSocketAppCode } from './codes.js';
|
|
5
5
|
|
|
6
6
|
const AUTH_TIMEOUT = 5000;
|
|
7
7
|
|
|
8
|
+
/** 认证结果 */
|
|
9
|
+
type AuthResult = [seq: number, id: ConnectionID, meta: RpcMetadata];
|
|
10
|
+
|
|
11
|
+
/** 检查认证消息 */
|
|
12
|
+
function checkAuthMessage(data: unknown, seq?: number, id?: ConnectionID): AuthResult {
|
|
13
|
+
const isResponse = seq != null && id != null;
|
|
14
|
+
const payload = decodePayload(data);
|
|
15
|
+
if (payload?.type !== 'auth') {
|
|
16
|
+
if (isResponse) throw new Error(`Failed to authenticate, bad response from server`);
|
|
17
|
+
else throw new Error(`Failed to authenticate, bad request from client`);
|
|
18
|
+
}
|
|
19
|
+
if (payload.version !== VERSION) {
|
|
20
|
+
throw new Error(`Failed to authenticate, version not match, expected ${VERSION}, got ${payload.version}`);
|
|
21
|
+
}
|
|
22
|
+
if (isResponse) {
|
|
23
|
+
if (payload.seq !== seq) {
|
|
24
|
+
throw new Error(`Failed to authenticate, bad response seq from server`);
|
|
25
|
+
}
|
|
26
|
+
if (payload.id !== id) {
|
|
27
|
+
throw new Error(`Failed to authenticate, bad response id from server`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (payload.error) {
|
|
31
|
+
throw deserializeError(payload.error);
|
|
32
|
+
}
|
|
33
|
+
const metadata = typeof payload.metadata != 'object' || payload.metadata == null ? {} : payload.metadata;
|
|
34
|
+
return [payload.seq, payload.id, metadata];
|
|
35
|
+
}
|
|
36
|
+
|
|
8
37
|
/** 接受认证消息 */
|
|
9
|
-
export async function waitAuth(
|
|
10
|
-
socket: WebSocket,
|
|
11
|
-
seq?: number,
|
|
12
|
-
id?: ConnectionID,
|
|
13
|
-
): Promise<[seq: number, id: ConnectionID, meta: RpcMetadata]> {
|
|
38
|
+
export async function waitAuth(socket: WebSocket, seq?: number, id?: ConnectionID): Promise<AuthResult> {
|
|
14
39
|
return new Promise((resolve, reject) => {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
40
|
+
const onTimeout = (): void => {
|
|
41
|
+
reject(new Error(`Failed to authenticate, no remote message in ${AUTH_TIMEOUT}ms`));
|
|
42
|
+
finalize(false);
|
|
43
|
+
};
|
|
44
|
+
const onClose = (ev: CloseEvent): void => {
|
|
45
|
+
reject(new Error(`Failed to authenticate, socket closed, code=${ev.code}: ${ev.reason}`));
|
|
46
|
+
finalize(false);
|
|
47
|
+
};
|
|
48
|
+
const onMessage = (ev: MessageEvent): void => {
|
|
21
49
|
try {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
else return reject(new Error(`Failed to authenticate, bad request from client`));
|
|
26
|
-
}
|
|
27
|
-
if (payload.version !== VERSION) {
|
|
28
|
-
return reject(
|
|
29
|
-
new Error(
|
|
30
|
-
`Failed to authenticate, version not match, expected ${VERSION}, got ${payload.version}`,
|
|
31
|
-
),
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
if (isResponse) {
|
|
35
|
-
if (payload.seq !== seq) {
|
|
36
|
-
return reject(new Error(`Failed to authenticate, bad response seq from server`));
|
|
37
|
-
}
|
|
38
|
-
if (payload.id !== id) {
|
|
39
|
-
return reject(new Error(`Failed to authenticate, bad response id from server`));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (payload.error) {
|
|
43
|
-
return reject(deserializeError(payload.error));
|
|
44
|
-
}
|
|
45
|
-
const metadata = typeof payload.metadata != 'object' ? {} : (payload.metadata ?? {});
|
|
46
|
-
resolve([payload.seq, payload.id, metadata]);
|
|
50
|
+
const result = checkAuthMessage(ev.data, seq, id);
|
|
51
|
+
resolve(result);
|
|
52
|
+
finalize(true);
|
|
47
53
|
} catch (ex) {
|
|
48
54
|
reject(ex as Error);
|
|
49
|
-
|
|
50
|
-
finalize();
|
|
55
|
+
finalize(false);
|
|
51
56
|
}
|
|
52
57
|
};
|
|
53
|
-
const
|
|
58
|
+
const timeout = setTimeout(onTimeout, AUTH_TIMEOUT);
|
|
59
|
+
socket.addEventListener('close', onClose);
|
|
60
|
+
socket.addEventListener('message', onMessage);
|
|
61
|
+
const finalize = (ok: boolean): void => {
|
|
54
62
|
clearTimeout(timeout);
|
|
55
|
-
socket.removeEventListener('message',
|
|
63
|
+
socket.removeEventListener('message', onMessage);
|
|
64
|
+
socket.removeEventListener('close', onClose);
|
|
65
|
+
if (ok) return;
|
|
66
|
+
socket.close(WebSocketAppCode.AUTH_ERROR);
|
|
56
67
|
};
|
|
57
|
-
socket.addEventListener('message', handleMessage, { once: true });
|
|
58
68
|
});
|
|
59
69
|
}
|
package/src/client.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WebSocket
|
|
1
|
+
import { WebSocket } from '@cloudpss/fetch';
|
|
2
2
|
import { v4 } from 'uuid';
|
|
3
3
|
import { waitAuth } from './auth.js';
|
|
4
4
|
import { RpcSocket } from './socket.js';
|
|
@@ -6,22 +6,30 @@ import type { ConnectionID, RpcMetadata } from './types/payload.js';
|
|
|
6
6
|
import type { RpcObject } from './types/utils.js';
|
|
7
7
|
import { send } from './utils/messaging.js';
|
|
8
8
|
import { VERSION } from './version.js';
|
|
9
|
-
import { WebSocketAppCode } from './codes.js';
|
|
10
9
|
import { logger } from './logger.js';
|
|
11
10
|
|
|
11
|
+
const INIT_RECONNECT_TIMEOUT = 500;
|
|
12
|
+
const MAX_RECONNECT_TIMEOUT = 30000;
|
|
13
|
+
|
|
12
14
|
/** 由 WS Client 建立的 RPC 连接 */
|
|
13
15
|
export class RpcClientSocket<TRemote extends object, TLocal extends object> extends RpcSocket<TRemote, TLocal> {
|
|
14
16
|
/** 建立连接使用的 WebSocket 实现 */
|
|
15
17
|
static WebSocket: typeof WebSocket | null = null;
|
|
16
18
|
|
|
17
19
|
constructor(url: string | URL, metadata?: RpcMetadata, local?: RpcObject<TLocal>) {
|
|
18
|
-
super(v4() as ConnectionID
|
|
20
|
+
super(v4() as ConnectionID);
|
|
21
|
+
this.#local = local;
|
|
19
22
|
this._localMetadata = metadata;
|
|
20
23
|
this.url = typeof url == 'string' ? url : url.href;
|
|
21
24
|
this.seq = 2;
|
|
22
25
|
logger('[%s] client socket created. url=', this.id, this.url);
|
|
23
26
|
this.connect();
|
|
24
27
|
}
|
|
28
|
+
readonly #local: RpcObject<TLocal> | undefined;
|
|
29
|
+
/** @inheritdoc */
|
|
30
|
+
protected override get local(): RpcObject<TLocal> | undefined {
|
|
31
|
+
return this.#local;
|
|
32
|
+
}
|
|
25
33
|
readonly url: string;
|
|
26
34
|
/** @inheritdoc */
|
|
27
35
|
protected override async authSocket(): Promise<RpcMetadata> {
|
|
@@ -38,28 +46,38 @@ export class RpcClientSocket<TRemote extends object, TLocal extends object> exte
|
|
|
38
46
|
logger('[%s] authenticated. remoteMeta=%o', this.id, metadata);
|
|
39
47
|
return metadata;
|
|
40
48
|
}
|
|
49
|
+
|
|
50
|
+
#reconnectTimeout = INIT_RECONNECT_TIMEOUT;
|
|
41
51
|
/** @inheritdoc */
|
|
42
52
|
protected override onClose(ev: CloseEvent): void {
|
|
43
53
|
super.onClose(ev);
|
|
44
|
-
|
|
45
|
-
if (code === WebSocketStatusCode.NORMAL_CLOSURE || code === WebSocketAppCode.AUTH_ERROR) return;
|
|
54
|
+
if (this.destroyed) return;
|
|
46
55
|
|
|
47
|
-
logger('[%s]
|
|
56
|
+
logger('[%s] reconnecting in %dms...', this.id, this.#reconnectTimeout);
|
|
48
57
|
setTimeout(() => {
|
|
49
58
|
this.connect();
|
|
50
|
-
},
|
|
59
|
+
}, this.#reconnectTimeout);
|
|
51
60
|
}
|
|
52
61
|
|
|
53
62
|
/** 建立连接 */
|
|
54
63
|
protected connect(): void {
|
|
55
|
-
|
|
56
|
-
|
|
64
|
+
const socket = new ((this.constructor as typeof RpcClientSocket).WebSocket ?? WebSocket)(this.url);
|
|
65
|
+
socket.binaryType = 'arraybuffer';
|
|
66
|
+
this.socket = socket;
|
|
57
67
|
logger('[%s] connecting...', this.id);
|
|
58
|
-
this.ready.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this
|
|
62
|
-
},
|
|
63
|
-
|
|
68
|
+
this.ready.then(
|
|
69
|
+
() => {
|
|
70
|
+
logger('[%s] connected.', this.id);
|
|
71
|
+
this.#reconnectTimeout = INIT_RECONNECT_TIMEOUT;
|
|
72
|
+
},
|
|
73
|
+
() => {
|
|
74
|
+
if (this.destroyed) return;
|
|
75
|
+
this.#reconnectTimeout = Math.min(this.#reconnectTimeout * 2, MAX_RECONNECT_TIMEOUT);
|
|
76
|
+
logger('[%s] connect failed. retrying in %dms...', this.id, this.#reconnectTimeout);
|
|
77
|
+
setTimeout(() => {
|
|
78
|
+
this.connect();
|
|
79
|
+
}, this.#reconnectTimeout);
|
|
80
|
+
},
|
|
81
|
+
);
|
|
64
82
|
}
|
|
65
83
|
}
|
package/src/codes.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
import { WebSocketStatusCode } from '@cloudpss/fetch';
|
|
2
|
+
|
|
1
3
|
/** WebSocket 关闭代码 */
|
|
2
4
|
export enum WebSocketAppCode {
|
|
3
5
|
AUTH_ERROR = 3401,
|
|
4
6
|
REPLACED = 3402,
|
|
5
7
|
}
|
|
8
|
+
|
|
9
|
+
/** 是否应进行重连 */
|
|
10
|
+
export function shouldReconnectWebSocket(code: number): boolean {
|
|
11
|
+
if (code === WebSocketAppCode.AUTH_ERROR || code === WebSocketAppCode.REPLACED) return false;
|
|
12
|
+
if (code === WebSocketStatusCode.NORMAL_CLOSURE) return false;
|
|
13
|
+
return true;
|
|
14
|
+
}
|
package/src/server.ts
CHANGED
|
@@ -17,10 +17,16 @@ type WebSocketWithMetadata = WebSocket & { [kMetadata]: RpcMetadata };
|
|
|
17
17
|
/**
|
|
18
18
|
* 客户端认证方法
|
|
19
19
|
* @param metadata 客户端传入的认证元数据
|
|
20
|
+
* @param id 客户端连接 ID
|
|
21
|
+
* @param client 已存在的客户端连接对象(断线重连时会传入)
|
|
20
22
|
* @returns 服务端返回客户端的认证元数据
|
|
21
23
|
* @throws {unknown} 认证失败时抛出异常
|
|
22
24
|
*/
|
|
23
|
-
type RpcClientAuthenticator
|
|
25
|
+
type RpcClientAuthenticator<TRemote extends object, TLocal extends object> = (
|
|
26
|
+
metadata: RpcMetadata,
|
|
27
|
+
id: ConnectionID,
|
|
28
|
+
client: RpcServerSocket<TRemote, TLocal> | undefined,
|
|
29
|
+
) => RpcMetadata | Promise<RpcMetadata>;
|
|
24
30
|
|
|
25
31
|
let tempIdGen = 0;
|
|
26
32
|
|
|
@@ -30,7 +36,7 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
30
36
|
/** 服务端 RPC 实现 */
|
|
31
37
|
local?: RpcObject<TLocal> | ((socket: RpcServerSocket<TRemote, TLocal>) => RpcObject<TLocal>),
|
|
32
38
|
/** 客户端认证方法 */
|
|
33
|
-
readonly authenticator: RpcClientAuthenticator = () => ({}),
|
|
39
|
+
readonly authenticator: RpcClientAuthenticator<TRemote, TLocal> = () => ({}),
|
|
34
40
|
) {
|
|
35
41
|
if (local == null) {
|
|
36
42
|
this.local = undefined;
|
|
@@ -56,9 +62,9 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
56
62
|
logger('[%s] incoming connection', tempId);
|
|
57
63
|
socket.binaryType = 'arraybuffer';
|
|
58
64
|
const s = socket as WebSocketWithMetadata;
|
|
59
|
-
const [id, metadata] = await this.authSocket(socket, tempId);
|
|
65
|
+
const [id, metadata, existingClient] = await this.authSocket(socket, tempId);
|
|
60
66
|
s[kMetadata] = metadata;
|
|
61
|
-
let client =
|
|
67
|
+
let client = existingClient;
|
|
62
68
|
if (!client) {
|
|
63
69
|
logger('[%s] new connection created', id);
|
|
64
70
|
client = new RpcServerSocket(id, this);
|
|
@@ -75,13 +81,17 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
75
81
|
return client;
|
|
76
82
|
}
|
|
77
83
|
/** 认证客户端 */
|
|
78
|
-
protected async authSocket(
|
|
84
|
+
protected async authSocket(
|
|
85
|
+
socket: WebSocket,
|
|
86
|
+
tempId: string,
|
|
87
|
+
): Promise<[ConnectionID, RpcMetadata, RpcServerSocket<TRemote, TLocal> | undefined]> {
|
|
79
88
|
let seq, id, remoteMetadata;
|
|
80
89
|
try {
|
|
81
90
|
logger('[%s] authenticating...', tempId);
|
|
82
91
|
[seq, id, remoteMetadata] = await waitAuth(socket);
|
|
83
92
|
logger('[%s -> %s] got server auth. remoteMeta=%o', tempId, id, remoteMetadata);
|
|
84
|
-
const
|
|
93
|
+
const client = this._sockets.get(id);
|
|
94
|
+
const localMetadata = await this.authenticator(remoteMetadata, id, client);
|
|
85
95
|
logger('[%s] server auth success. localMeta=%o', id, localMetadata);
|
|
86
96
|
send(socket, 'auth', {
|
|
87
97
|
seq,
|
|
@@ -89,7 +99,7 @@ export class RpcServer<TRemote extends object, TLocal extends object> {
|
|
|
89
99
|
version: VERSION,
|
|
90
100
|
metadata: localMetadata,
|
|
91
101
|
});
|
|
92
|
-
return [id, remoteMetadata];
|
|
102
|
+
return [id, remoteMetadata, client];
|
|
93
103
|
} catch (ex) {
|
|
94
104
|
logger('[%s] server auth failed. remoteMeta=%o, error=%o', id ?? tempId, remoteMetadata, ex);
|
|
95
105
|
if (seq != null && id != null) {
|
package/src/socket.ts
CHANGED
|
@@ -21,16 +21,12 @@ import type { ObservableStatus, PromiseCallbacks } from './types/callbacks.js';
|
|
|
21
21
|
import { send } from './utils/messaging.js';
|
|
22
22
|
import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
|
|
23
23
|
import { logger } from './logger.js';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
24
|
+
import { makeReady } from './utils/ready.js';
|
|
25
|
+
import { shouldReconnectWebSocket, WebSocketAppCode } from './codes.js';
|
|
26
26
|
|
|
27
27
|
/** RPC 连接 */
|
|
28
28
|
export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
29
|
-
constructor(
|
|
30
|
-
readonly id: ConnectionID,
|
|
31
|
-
local?: RpcObject<TLocal>,
|
|
32
|
-
) {
|
|
33
|
-
this.#local = local;
|
|
29
|
+
constructor(readonly id: ConnectionID) {
|
|
34
30
|
makeReady(this);
|
|
35
31
|
}
|
|
36
32
|
protected _localMetadata?: RpcMetadata;
|
|
@@ -47,11 +43,8 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
47
43
|
get authenticated(): boolean {
|
|
48
44
|
return this._remoteMetadata != null;
|
|
49
45
|
}
|
|
50
|
-
readonly #local?: RpcObject<TLocal>;
|
|
51
46
|
/** 用于响应调用的本地对象 */
|
|
52
|
-
protected get local(): RpcObject<TLocal> | undefined
|
|
53
|
-
return this.#local;
|
|
54
|
-
}
|
|
47
|
+
protected abstract get local(): RpcObject<TLocal> | undefined;
|
|
55
48
|
#socket?: WebSocket;
|
|
56
49
|
/** 作为底层传输的 WebSocket */
|
|
57
50
|
get socket(): WebSocket {
|
|
@@ -77,12 +70,13 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
77
70
|
/** 初始化 WebSocket */
|
|
78
71
|
protected async initSocket(oldValue: WebSocket | undefined, newValue: WebSocket): Promise<void> {
|
|
79
72
|
try {
|
|
73
|
+
const { open, close, error, message } = this.#handlers;
|
|
80
74
|
if (oldValue) {
|
|
81
|
-
oldValue.removeEventListener('open',
|
|
82
|
-
oldValue.removeEventListener('close',
|
|
83
|
-
oldValue.removeEventListener('error',
|
|
84
|
-
oldValue.removeEventListener('message',
|
|
85
|
-
if (oldValue.readyState
|
|
75
|
+
oldValue.removeEventListener('open', open);
|
|
76
|
+
oldValue.removeEventListener('close', close);
|
|
77
|
+
oldValue.removeEventListener('error', error);
|
|
78
|
+
oldValue.removeEventListener('message', message);
|
|
79
|
+
if (oldValue.readyState !== oldValue.CLOSED) {
|
|
86
80
|
logger('[%s] close old socket', this.id);
|
|
87
81
|
oldValue.close(WebSocketAppCode.REPLACED);
|
|
88
82
|
}
|
|
@@ -90,14 +84,14 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
90
84
|
await connected(newValue);
|
|
91
85
|
const info = await this.authSocket();
|
|
92
86
|
if (this.#socket === newValue) {
|
|
93
|
-
newValue.addEventListener('open',
|
|
94
|
-
newValue.addEventListener('close',
|
|
95
|
-
newValue.addEventListener('error',
|
|
96
|
-
newValue.addEventListener('message',
|
|
87
|
+
newValue.addEventListener('open', open);
|
|
88
|
+
newValue.addEventListener('close', close);
|
|
89
|
+
newValue.addEventListener('error', error);
|
|
90
|
+
newValue.addEventListener('message', message);
|
|
97
91
|
this._remoteMetadata = info ?? {};
|
|
98
92
|
}
|
|
99
93
|
} catch (ex) {
|
|
100
|
-
logger('[%s] connection initialize failed. error
|
|
94
|
+
logger('[%s] connection initialize failed. error=%o', this.id, ex);
|
|
101
95
|
this._remoteMetadata = undefined;
|
|
102
96
|
throw ex;
|
|
103
97
|
}
|
|
@@ -105,7 +99,8 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
105
99
|
/** 认证 WebSocket */
|
|
106
100
|
protected abstract authSocket(): Promise<RpcMetadata>;
|
|
107
101
|
/** 响应 WebSocket error */
|
|
108
|
-
protected onError(
|
|
102
|
+
protected onError(ev: ErrorEvent | Event): void {
|
|
103
|
+
logger('[%s] socket error: %o', this.id, ev);
|
|
109
104
|
this._remoteMetadata = undefined;
|
|
110
105
|
makeReady(this);
|
|
111
106
|
}
|
|
@@ -115,8 +110,10 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
115
110
|
}
|
|
116
111
|
/** 响应 WebSocket close */
|
|
117
112
|
protected onClose(ev: CloseEvent): void {
|
|
113
|
+
const { code } = ev;
|
|
114
|
+
logger('[%s] socket closed, code=%d', this.id, code);
|
|
118
115
|
this._remoteMetadata = undefined;
|
|
119
|
-
if (
|
|
116
|
+
if (!shouldReconnectWebSocket(code)) {
|
|
120
117
|
this.destroy();
|
|
121
118
|
} else {
|
|
122
119
|
makeReady(this);
|
|
@@ -313,13 +310,10 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
|
|
|
313
310
|
destroy(): void {
|
|
314
311
|
if (this.#destroyed) return;
|
|
315
312
|
logger('[%s] socket destroyed', this.id);
|
|
316
|
-
if (
|
|
317
|
-
this.#socket &&
|
|
318
|
-
(this.#socket.readyState === this.#socket.CONNECTING || this.#socket.readyState === this.#socket.OPEN)
|
|
319
|
-
) {
|
|
313
|
+
if (this.#socket) {
|
|
320
314
|
this.#socket.close(1000);
|
|
315
|
+
this.#socket = undefined;
|
|
321
316
|
}
|
|
322
|
-
this.#socket = undefined;
|
|
323
317
|
|
|
324
318
|
for (const s of this.#localSubscription.values()) {
|
|
325
319
|
s.unsubscribe();
|
package/tests/server.ts
CHANGED
|
@@ -30,10 +30,12 @@ const a = {
|
|
|
30
30
|
);
|
|
31
31
|
},
|
|
32
32
|
};
|
|
33
|
-
const rpc = new RpcServer(a, (meta) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const rpc = new RpcServer(a, async (meta, id) => {
|
|
34
|
+
return new Promise((resolve) => {
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
resolve({});
|
|
37
|
+
}, 10);
|
|
38
|
+
});
|
|
37
39
|
});
|
|
38
40
|
const server = new WebSocketServer({
|
|
39
41
|
host: 'localhost',
|
package/dist/ready.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../src/ready.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAS7D;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAuB7E"}
|
package/dist/ready.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ready.js","sourceRoot":"","sources":["../src/ready.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAOlD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAmB,MAAS;IACjD,MAAM,CAAC,GAAG,MAAsB,CAAC;IAEjC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;IACpC,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEtC,IAAI,SAA6C,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC/B,KAAK;SACA,KAAK,CAAC,GAAG,EAAE;QACR,4BAA4B;IAChC,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACV,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACnC,CAAC;IACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IAChB,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
|
File without changes
|