@cloudpss/ubrpc 0.6.14 → 0.6.16

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/README.md CHANGED
@@ -1,12 +1,8 @@
1
1
  # @cloudpss/ubrpc
2
2
 
3
- Rpc server/client build on websocket and ubjson.
3
+ Rpc server/client build on websocket and ubjson, supports bidirectional calls, async iterators and observables.
4
4
 
5
- ## Introduction
6
-
7
- 本模块是基于 websocket 和 ubjson 的 rpc 服务端/客户端模块。使用 websocket 作为底层通信协议,使用 ubjson 作为数据序列化协议。在建立连接后,支持通过 websocket 实现双向调用。
8
-
9
- ## Usage
5
+ ## Example
10
6
 
11
7
  ### 作为 WebSocket 服务端
12
8
 
@@ -22,6 +18,7 @@ const rpc = new RpcServer(
22
18
  },
23
19
  (meta) => {
24
20
  // 校验客户端信息,拒绝连接时抛出异常
21
+ if (!meta.token) throw new Error('Unauthorized');
25
22
  // 返回服务端信息供客户端验证
26
23
  return {};
27
24
  },
@@ -46,7 +43,8 @@ server.on('connection', async (socket) => {
46
43
  ```ts
47
44
  import { RpcClientSocket } from '@cloudpss/ubrpc';
48
45
 
49
- const rpc = new RpcClientSocket('ws://localhost:8090');
46
+ const rpc = new RpcClientSocket('ws://localhost:8090', { token: 'my-token' });
50
47
  const result = await rpc.call('hello', 'world');
51
48
  console.log(result);
49
+ rpc.destroy();
52
50
  ```
package/dist/logger.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { type DebugLoggerFunction } from 'node:util';
1
+ import type { DebugLoggerFunction } from 'node:util';
2
2
  export declare let logger: DebugLoggerFunction;
3
3
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE/D,eAAO,IAAI,MAAM,EAAE,mBAAqE,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,eAAO,IAAI,MAAM,EAAE,mBAAmB,CAAC"}
package/dist/logger.js CHANGED
@@ -1,3 +1,10 @@
1
- import { debuglog } from 'node:util';
2
- export let logger = debuglog('cloudpss/ubrpc', (l) => (logger = l));
1
+ export let logger;
2
+ if (typeof process != 'undefined' && typeof process.getBuiltinModule == 'function') {
3
+ const { debuglog } = process.getBuiltinModule('node:util');
4
+ logger = debuglog('cloudpss/ubrpc', (l) => (logger = l));
5
+ }
6
+ else {
7
+ // eslint-disable-next-line no-console
8
+ logger = (msg, ...param) => console.debug(`[cloudpss/ubrpc] ${msg}`, ...param);
9
+ }
3
10
  //# sourceMappingURL=logger.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAI,MAA2B,CAAC;AAEvC,IAAI,OAAO,OAAO,IAAI,WAAW,IAAI,OAAO,OAAO,CAAC,gBAAgB,IAAI,UAAU,EAAE,CAAC;IACjF,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;KAAM,CAAC;IACJ,sCAAsC;IACtC,MAAM,GAAG,CAAC,GAAW,EAAE,GAAG,KAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AACtG,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PromiseCallbacks } from './types/callbacks.js';
2
+ /**
3
+ * 创建或返回 ready Promise
4
+ */
5
+ export declare function makeReady<T extends object>(target: T): PromiseCallbacks<void>;
6
+ //# sourceMappingURL=ready.d.ts.map
@@ -0,0 +1 @@
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 ADDED
@@ -0,0 +1,29 @@
1
+ const kReadyCallbacks = Symbol('kReadyCallbacks');
2
+ /**
3
+ * 创建或返回 ready Promise
4
+ */
5
+ export function makeReady(target) {
6
+ const t = target;
7
+ const existing = t[kReadyCallbacks];
8
+ if (existing != null)
9
+ return existing;
10
+ let callbacks;
11
+ const ready = new Promise((resolve, reject) => {
12
+ callbacks = [resolve, reject];
13
+ });
14
+ if (callbacks == null)
15
+ throw new Error(`Bad promise`);
16
+ t[kReadyCallbacks] = callbacks;
17
+ ready
18
+ .catch(() => {
19
+ // Avoid unhandled rejection
20
+ })
21
+ .finally(() => {
22
+ if (t[kReadyCallbacks] === callbacks) {
23
+ t[kReadyCallbacks] = undefined;
24
+ }
25
+ });
26
+ t.ready = ready;
27
+ return callbacks;
28
+ }
29
+ //# sourceMappingURL=ready.js.map
@@ -0,0 +1 @@
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"}
@@ -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,eAAqB,CAAC;AACpC,QAAA,MAAM,SAAS,eAAsB,CAAC;AACtC,QAAA,MAAM,cAAc,eAA2B,CAAC;AAEhD,kBAAkB;AAClB,KAAK,qBAAqB,GAAG,SAAS,GAAG;IAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AACtE;;;;;GAKG;AACH,KAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE,WAAW,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAI5F,8BAA8B;AAC9B,qBAAa,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM;IAI5D,cAAc;IACd,QAAQ,CAAC,aAAa,EAAE,sBAAsB;;IAH9C,iBAAiB;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7F,cAAc;IACL,aAAa,GAAE,sBAAmC;IAU/D,kBAAkB;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjF,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,QAAQ,sDAA6D;IACxF,gBAAgB;IAChB,IAAI,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAEzE;IAED,kCAAkC;IAC5B,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAuB3E,YAAY;cACI,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAoCnG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0D;IAC/F,sBAAsB;IACtB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;CAgB7D;AAED,6BAA6B;AAC7B,qBAAa,eAAe,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,CAAE,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAGtG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAD3C,EAAE,EAAE,YAAY,EACP,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAK/C,kBAAkB;IAElB,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAG5C,kBAAkB;IAClB,cAAuB,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAE5D;IACD,kBAAkB;cACC,OAAO,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIhD,gBAAgB;IACV,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1E"}
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;;;;;GAKG;AACH,KAAK,sBAAsB,GAAG,CAAC,QAAQ,EAAE,WAAW,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAI5F,8BAA8B;AAC9B,qBAAa,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM;IAI5D,cAAc;IACd,QAAQ,CAAC,aAAa,EAAE,sBAAsB;;IAH9C,iBAAiB;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7F,cAAc;IACL,aAAa,GAAE,sBAAmC;IAU/D,kBAAkB;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjF,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,QAAQ,sDAA6D;IACxF,gBAAgB;IAChB,IAAI,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAEzE;IAED,kCAAkC;IAC5B,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAuB3E,YAAY;cACI,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAoCnG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA0D;IAC/F,sBAAsB;IACtB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;CAgB7D;AAED,6BAA6B;AAC7B,qBAAa,eAAe,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,CAAE,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAGtG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAD3C,EAAE,EAAE,YAAY,EACP,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAK/C,kBAAkB;IAElB,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAG5C,kBAAkB;IAClB,cAAuB,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAE5D;IACD,kBAAkB;cACC,OAAO,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIhD,gBAAgB;IACV,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1E"}
package/dist/server.js CHANGED
@@ -5,9 +5,9 @@ import { RpcSocket } from './socket.js';
5
5
  import { send } from './utils/messaging.js';
6
6
  import { serializeError } from './utils/serialize.js';
7
7
  import { VERSION } from './version.js';
8
- const kOnClose = Symbol('kOnClose');
9
- const kMetadata = Symbol('kMetadata');
10
- const kReplaceSocket = Symbol('kReplaceSocket');
8
+ const kOnClose = Symbol.for('kOnClose');
9
+ const kMetadata = Symbol.for('kMetadata');
10
+ const kReplaceSocket = Symbol.for('kReplaceSocket');
11
11
  let tempIdGen = 0;
12
12
  /** 由 WS Server 建立的 RPC 连接组 */
13
13
  export class RpcServer {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/socket.d.ts CHANGED
@@ -14,18 +14,12 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
14
14
  get remoteMetadata(): RpcMetadata | undefined;
15
15
  /** 连接是否已认证 */
16
16
  get authenticated(): boolean;
17
- private readonly __local?;
18
17
  /** 用于响应调用的本地对象 */
19
18
  protected get local(): RpcObject<TLocal> | undefined;
20
- private __socket?;
21
19
  /** 作为底层传输的 WebSocket */
22
20
  get socket(): WebSocket;
23
21
  protected set socket(value: WebSocket);
24
- /** 创建 ready Promise */
25
- private makeReady;
26
- private __readyCallbacks?;
27
- protected ready: Promise<void>;
28
- private readonly __handlers;
22
+ protected readonly ready: Promise<void>;
29
23
  /** 初始化 WebSocket */
30
24
  protected initSocket(oldValue: WebSocket | undefined, newValue: WebSocket): Promise<void>;
31
25
  /** 认证 WebSocket */
@@ -42,7 +36,6 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
42
36
  protected onPayload(payload: RpcPayload): boolean;
43
37
  /** 调用本地方法 */
44
38
  protected localCall(payload: RpcCallPayload | RpcNotifyPayload): Promise<void>;
45
- private readonly localSubscription;
46
39
  /** 调用本地方法 */
47
40
  protected localSubscribe(payload: RpcSubscribePayload): Promise<void>;
48
41
  /** 发送数据 */
@@ -53,12 +46,10 @@ export declare abstract class RpcSocket<TRemote extends object, TLocal extends o
53
46
  protected seq: number;
54
47
  /** 获取下一个序列号 */
55
48
  protected nextSeq(): number;
56
- private readonly pendingCalls;
57
49
  /** 调用远程方法 */
58
50
  call<TMethod extends Methods<TRemote>>(method: TMethod, ...args: RpcParameters<TRemote[TMethod]>): Promise<RpcReturns<TRemote[TMethod]>>;
59
51
  /** 调用远程方法,放弃返回值 */
60
52
  notify<TNotification extends Notifications<TRemote>>(method: TNotification, ...args: RpcParameters<TRemote[TNotification]>): void;
61
- private readonly pendingSubscriptions;
62
53
  /** 调用远程订阅 */
63
54
  subscribe<TSubject extends Subjects<TRemote>>(method: TSubject, ...args: RpcParameters<TRemote[TSubject]>): Observable<RpcReturns<TRemote[TSubject]>>;
64
55
  /** 是否已结束 */
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
package/dist/socket.js CHANGED
@@ -4,24 +4,25 @@ import { send } from './utils/messaging.js';
4
4
  import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
5
5
  import { logger } from './logger.js';
6
6
  import { WebSocketAppCode } from './codes.js';
7
+ import { makeReady } from './ready.js';
7
8
  /** RPC 连接 */
8
9
  export class RpcSocket {
9
10
  constructor(id, local) {
10
11
  this.id = id;
11
- this.__handlers = Object.freeze({
12
+ this.#handlers = Object.freeze({
12
13
  open: (ev) => this.onOpen(ev),
13
14
  close: (ev) => this.onClose(ev),
14
15
  error: (ev) => this.onError(ev),
15
16
  message: (ev) => this.onMessage(ev),
16
17
  });
17
- this.localSubscription = new Map();
18
+ this.#localSubscription = new Map();
18
19
  /** 序列号 */
19
20
  this.seq = 0;
20
- this.pendingCalls = new Map();
21
- this.pendingSubscriptions = new Map();
21
+ this.#pendingCalls = new Map();
22
+ this.#pendingSubscriptions = new Map();
22
23
  this.#destroyed = false;
23
- this.__local = local;
24
- this.makeReady();
24
+ this.#local = local;
25
+ makeReady(this);
25
26
  }
26
27
  /** 本地认证信息 */
27
28
  get localMetadata() {
@@ -35,54 +36,39 @@ export class RpcSocket {
35
36
  get authenticated() {
36
37
  return this._remoteMetadata != null;
37
38
  }
39
+ #local;
38
40
  /** 用于响应调用的本地对象 */
39
41
  get local() {
40
- return this.__local;
42
+ return this.#local;
41
43
  }
44
+ #socket;
42
45
  /** 作为底层传输的 WebSocket */
43
46
  get socket() {
44
47
  if (this.#destroyed)
45
48
  throw new Error(`RPC Socket destroyed.`);
46
- if (!this.__socket)
49
+ if (!this.#socket)
47
50
  throw new Error(`Socket not initialized`);
48
- return this.__socket;
51
+ return this.#socket;
49
52
  }
50
53
  set socket(value) {
51
54
  if (this.#destroyed)
52
55
  throw new Error(`RPC Socket destroyed.`);
53
- if (this.__socket === value)
56
+ if (this.#socket === value)
54
57
  return;
55
- const callbacks = this.makeReady();
56
- const oldValue = this.__socket;
57
- this.__socket = value;
58
+ const callbacks = makeReady(this);
59
+ const oldValue = this.#socket;
60
+ this.#socket = value;
58
61
  void this.initSocket(oldValue, value).then(...callbacks);
59
62
  }
60
- /** 创建 ready Promise */
61
- makeReady() {
62
- if (this.__readyCallbacks != null)
63
- return this.__readyCallbacks;
64
- const ready = new Promise((...args) => (this.__readyCallbacks = args));
65
- ready
66
- .catch(() => {
67
- // Avoid unhandled rejection
68
- })
69
- .finally(() => {
70
- if (this.ready === ready)
71
- this.__readyCallbacks = undefined;
72
- });
73
- this.ready = ready;
74
- if (!this.__readyCallbacks)
75
- throw new Error(`Bad promise`);
76
- return this.__readyCallbacks;
77
- }
63
+ #handlers;
78
64
  /** 初始化 WebSocket */
79
65
  async initSocket(oldValue, newValue) {
80
66
  try {
81
67
  if (oldValue) {
82
- oldValue.removeEventListener('open', this.__handlers.open);
83
- oldValue.removeEventListener('close', this.__handlers.close);
84
- oldValue.removeEventListener('error', this.__handlers.error);
85
- oldValue.removeEventListener('message', this.__handlers.message);
68
+ oldValue.removeEventListener('open', this.#handlers.open);
69
+ oldValue.removeEventListener('close', this.#handlers.close);
70
+ oldValue.removeEventListener('error', this.#handlers.error);
71
+ oldValue.removeEventListener('message', this.#handlers.message);
86
72
  if (oldValue.readyState === oldValue.OPEN || oldValue.readyState === oldValue.CONNECTING) {
87
73
  logger('[%s] close old socket', this.id);
88
74
  oldValue.close(WebSocketAppCode.REPLACED);
@@ -90,11 +76,11 @@ export class RpcSocket {
90
76
  }
91
77
  await connected(newValue);
92
78
  const info = await this.authSocket();
93
- if (this.__socket === newValue) {
94
- newValue.addEventListener('open', this.__handlers.open);
95
- newValue.addEventListener('close', this.__handlers.close);
96
- newValue.addEventListener('error', this.__handlers.error);
97
- newValue.addEventListener('message', this.__handlers.message);
79
+ if (this.#socket === newValue) {
80
+ newValue.addEventListener('open', this.#handlers.open);
81
+ newValue.addEventListener('close', this.#handlers.close);
82
+ newValue.addEventListener('error', this.#handlers.error);
83
+ newValue.addEventListener('message', this.#handlers.message);
98
84
  this._remoteMetadata = info ?? {};
99
85
  }
100
86
  }
@@ -107,7 +93,7 @@ export class RpcSocket {
107
93
  /** 响应 WebSocket error */
108
94
  onError(_ev) {
109
95
  this._remoteMetadata = undefined;
110
- this.makeReady();
96
+ makeReady(this);
111
97
  }
112
98
  /** 响应 WebSocket open */
113
99
  onOpen(_ev) {
@@ -120,7 +106,7 @@ export class RpcSocket {
120
106
  this.destroy();
121
107
  }
122
108
  else {
123
- this.makeReady();
109
+ makeReady(this);
124
110
  }
125
111
  }
126
112
  /** 响应 WebSocket message */
@@ -150,11 +136,11 @@ export class RpcSocket {
150
136
  void this.localCall(payload);
151
137
  return true;
152
138
  case 'return': {
153
- const pending = this.pendingCalls.get(payload.seq);
139
+ const pending = this.#pendingCalls.get(payload.seq);
154
140
  // 即使不存在等待的请求,也认为响应是有效的
155
141
  if (!pending)
156
142
  return true;
157
- this.pendingCalls.delete(payload.seq);
143
+ this.#pendingCalls.delete(payload.seq);
158
144
  if (payload.error) {
159
145
  pending[1](deserializeError(payload.error));
160
146
  }
@@ -167,29 +153,31 @@ export class RpcSocket {
167
153
  void this.localSubscribe(payload);
168
154
  return true;
169
155
  case 'unsubscribe': {
170
- const subscription = this.localSubscription.get(payload.seq);
156
+ const subscription = this.#localSubscription.get(payload.seq);
171
157
  // 即使不存在对应订阅,也认为响应是有效的
172
158
  if (!subscription)
173
159
  return true;
174
160
  subscription.unsubscribe();
175
- this.localSubscription.delete(payload.seq);
161
+ this.#localSubscription.delete(payload.seq);
176
162
  return true;
177
163
  }
178
164
  case 'publish': {
179
- const subscriber = this.pendingSubscriptions.get(payload.seq);
165
+ const status = this.#pendingSubscriptions.get(payload.seq);
180
166
  // 即使不存在对应订阅,也认为响应是有效的
181
- if (!subscriber) {
167
+ if (!status) {
182
168
  void this.sendPayload('unsubscribe', { seq: payload.seq });
183
169
  return true;
184
170
  }
185
171
  if (payload.error) {
186
- subscriber.error(deserializeError(payload.error));
172
+ status[1] = true;
173
+ status[0].error(deserializeError(payload.error));
187
174
  }
188
175
  else if (payload.complete) {
189
- subscriber.complete();
176
+ status[1] = true;
177
+ status[0].complete();
190
178
  }
191
179
  else {
192
- subscriber.next(payload.next);
180
+ status[0].next(payload.next);
193
181
  }
194
182
  return true;
195
183
  }
@@ -225,6 +213,7 @@ export class RpcSocket {
225
213
  return this.sendPayload('return', { seq, error: serializeError(ex) });
226
214
  }
227
215
  }
216
+ #localSubscription;
228
217
  /** 调用本地方法 */
229
218
  async localSubscribe(payload) {
230
219
  const method = this.local ? this.local[payload.method] : undefined;
@@ -242,15 +231,15 @@ export class RpcSocket {
242
231
  void this.sendPayload('publish', { seq, next: value });
243
232
  },
244
233
  error: (err) => {
245
- this.localSubscription.delete(payload.seq);
234
+ this.#localSubscription.delete(payload.seq);
246
235
  void this.sendPayload('publish', { seq, error: serializeError(err) });
247
236
  },
248
237
  complete: () => {
249
- this.localSubscription.delete(payload.seq);
238
+ this.#localSubscription.delete(payload.seq);
250
239
  void this.sendPayload('publish', { seq, complete: true });
251
240
  },
252
241
  });
253
- this.localSubscription.set(seq, subscription);
242
+ this.#localSubscription.set(seq, subscription);
254
243
  }
255
244
  catch (ex) {
256
245
  return this.sendPayload('publish', { seq, error: serializeError(ex) });
@@ -269,13 +258,14 @@ export class RpcSocket {
269
258
  this.seq += 2;
270
259
  return seq;
271
260
  }
261
+ #pendingCalls;
272
262
  /** 调用远程方法 */
273
263
  // eslint-disable-next-line @typescript-eslint/promise-function-async
274
264
  call(method, ...args) {
275
265
  return new Promise((resolve, reject) => {
276
266
  const seq = this.nextSeq();
277
267
  void this.sendPayload('call', { seq, method, args });
278
- this.pendingCalls.set(seq, [resolve, reject]);
268
+ this.#pendingCalls.set(seq, [resolve, reject]);
279
269
  });
280
270
  }
281
271
  /** 调用远程方法,放弃返回值 */
@@ -283,15 +273,18 @@ export class RpcSocket {
283
273
  const seq = this.nextSeq();
284
274
  void this.sendPayload('notify', { seq, method, args });
285
275
  }
276
+ #pendingSubscriptions;
286
277
  /** 调用远程订阅 */
287
278
  subscribe(method, ...args) {
288
279
  return new Observable((subscriber) => {
289
280
  const seq = this.nextSeq();
281
+ const status = [subscriber, false];
290
282
  void this.sendPayload('subscribe', { seq, method, args });
291
- this.pendingSubscriptions.set(seq, subscriber);
283
+ this.#pendingSubscriptions.set(seq, status);
292
284
  return () => {
293
- this.pendingSubscriptions.delete(seq);
294
- void this.sendPayload('unsubscribe', { seq });
285
+ this.#pendingSubscriptions.delete(seq);
286
+ if (!status[1])
287
+ void this.sendPayload('unsubscribe', { seq });
295
288
  };
296
289
  });
297
290
  }
@@ -305,20 +298,24 @@ export class RpcSocket {
305
298
  if (this.#destroyed)
306
299
  return;
307
300
  logger('[%s] socket destroyed', this.id);
308
- if (this.__socket &&
309
- (this.__socket.readyState === this.__socket.CONNECTING || this.__socket.readyState === this.__socket.OPEN)) {
310
- this.__socket.close(1000);
301
+ if (this.#socket &&
302
+ (this.#socket.readyState === this.#socket.CONNECTING || this.#socket.readyState === this.#socket.OPEN)) {
303
+ this.#socket.close(1000);
311
304
  }
312
- this.__socket = undefined;
313
- for (const s of this.localSubscription.values())
305
+ this.#socket = undefined;
306
+ for (const s of this.#localSubscription.values()) {
314
307
  s.unsubscribe();
315
- this.localSubscription.clear();
316
- for (const [, reject] of this.pendingCalls.values())
308
+ }
309
+ this.#localSubscription.clear();
310
+ for (const [, reject] of this.#pendingCalls.values()) {
317
311
  reject(new Error(`RPC Socket closed.`));
318
- this.pendingCalls.clear();
319
- for (const s of this.pendingSubscriptions.values())
320
- s.error(new Error(`RPC Socket closed.`));
321
- this.pendingSubscriptions.clear();
312
+ }
313
+ this.#pendingCalls.clear();
314
+ for (const s of this.#pendingSubscriptions.values()) {
315
+ s[1] = true;
316
+ s[0].error(new Error(`RPC Socket closed.`));
317
+ }
318
+ this.#pendingSubscriptions.clear();
322
319
  this.#destroyed = true;
323
320
  }
324
321
  }
@@ -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,6 @@
1
+ import type { Subscriber } from 'rxjs';
2
+ /** Promise callbacks */
3
+ export type PromiseCallbacks<T = unknown> = [resolve: (value: T) => void, reject: (reason?: unknown) => void];
4
+ /** Observable status */
5
+ export type ObservableStatus<T = unknown> = [subscriber: Subscriber<T>, end: boolean];
6
+ //# sourceMappingURL=callbacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../../src/types/callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,wBAAwB;AACxB,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;AAE9G,wBAAwB;AACxB,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=callbacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/types/callbacks.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,WAAW;AACX,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAWnE;AAGD,cAAc;AACd,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA0B3D;AACD,eAAe;AACf,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAqB3D"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,WAAW;AACX,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAWnE;AAGD,cAAc;AACd,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAyB3D;AACD,eAAe;AACf,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAqB3D"}
@@ -37,7 +37,7 @@ export function serializeError(error) {
37
37
  return {
38
38
  ...rest,
39
39
  name: String(name ?? 'Error'),
40
- message: String(message ?? ''),
40
+ message: typeof message == 'string' ? message : String(error),
41
41
  stack: stack,
42
42
  errors: reenter ? undefined : Array.isArray(errors) ? errors.map((e) => serializeError(e)) : errors,
43
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/ubrpc",
3
- "version": "0.6.14",
3
+ "version": "0.6.16",
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.14",
23
- "@cloudpss/ubjson": "~0.6.14"
22
+ "@cloudpss/fetch": "~0.6.16",
23
+ "@cloudpss/ubjson": "~0.6.16"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/ws": "^8.18.1",
package/src/logger.ts CHANGED
@@ -1,3 +1,11 @@
1
- import { debuglog, type DebugLoggerFunction } from 'node:util';
1
+ import type { DebugLoggerFunction } from 'node:util';
2
2
 
3
- export let logger: DebugLoggerFunction = debuglog('cloudpss/ubrpc', (l) => (logger = l));
3
+ export let logger: DebugLoggerFunction;
4
+
5
+ if (typeof process != 'undefined' && typeof process.getBuiltinModule == 'function') {
6
+ const { debuglog } = process.getBuiltinModule('node:util');
7
+ logger = debuglog('cloudpss/ubrpc', (l) => (logger = l));
8
+ } else {
9
+ // eslint-disable-next-line no-console
10
+ logger = (msg: string, ...param: unknown[]) => console.debug(`[cloudpss/ubrpc] ${msg}`, ...param);
11
+ }
package/src/ready.ts ADDED
@@ -0,0 +1,36 @@
1
+ import type { PromiseCallbacks } from './types/callbacks.js';
2
+
3
+ const kReadyCallbacks = Symbol('kReadyCallbacks');
4
+
5
+ /** Ready Promise */
6
+ type WithReady<T extends object> = T & {
7
+ ready: Promise<void>;
8
+ [kReadyCallbacks]?: PromiseCallbacks<void>;
9
+ };
10
+ /**
11
+ * 创建或返回 ready Promise
12
+ */
13
+ export function makeReady<T extends object>(target: T): PromiseCallbacks<void> {
14
+ const t = target as WithReady<T>;
15
+
16
+ const existing = t[kReadyCallbacks];
17
+ if (existing != null) return existing;
18
+
19
+ let callbacks: PromiseCallbacks<void> | undefined;
20
+ const ready = new Promise<void>((resolve, reject) => {
21
+ callbacks = [resolve, reject];
22
+ });
23
+ if (callbacks == null) throw new Error(`Bad promise`);
24
+ t[kReadyCallbacks] = callbacks;
25
+ ready
26
+ .catch(() => {
27
+ // Avoid unhandled rejection
28
+ })
29
+ .finally(() => {
30
+ if (t[kReadyCallbacks] === callbacks) {
31
+ t[kReadyCallbacks] = undefined;
32
+ }
33
+ });
34
+ t.ready = ready;
35
+ return callbacks;
36
+ }
package/src/server.ts CHANGED
@@ -8,9 +8,9 @@ import { send } from './utils/messaging.js';
8
8
  import { serializeError } from './utils/serialize.js';
9
9
  import { VERSION } from './version.js';
10
10
 
11
- const kOnClose = Symbol('kOnClose');
12
- const kMetadata = Symbol('kMetadata');
13
- const kReplaceSocket = Symbol('kReplaceSocket');
11
+ const kOnClose = Symbol.for('kOnClose');
12
+ const kMetadata = Symbol.for('kMetadata');
13
+ const kReplaceSocket = Symbol.for('kReplaceSocket');
14
14
 
15
15
  /** 认证过的 socket */
16
16
  type WebSocketWithMetadata = WebSocket & { [kMetadata]: RpcMetadata };
package/src/socket.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { connected } from '@cloudpss/fetch';
2
- import { from, Observable, type Subscriber, type Subscription } from 'rxjs';
2
+ import { from, Observable, type Subscription } from 'rxjs';
3
3
  import type {
4
4
  ConnectionID,
5
5
  RpcCallPayload,
@@ -17,10 +17,12 @@ import type {
17
17
  RpcReturns,
18
18
  Subjects,
19
19
  } from './types/utils.js';
20
+ import type { ObservableStatus, PromiseCallbacks } from './types/callbacks.js';
20
21
  import { send } from './utils/messaging.js';
21
22
  import { decodePayload, deserializeError, serializeError } from './utils/serialize.js';
22
23
  import { logger } from './logger.js';
23
24
  import { WebSocketAppCode } from './codes.js';
25
+ import { makeReady } from './ready.js';
24
26
 
25
27
  /** RPC 连接 */
26
28
  export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
@@ -28,8 +30,8 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
28
30
  readonly id: ConnectionID,
29
31
  local?: RpcObject<TLocal>,
30
32
  ) {
31
- this.__local = local;
32
- this.makeReady();
33
+ this.#local = local;
34
+ makeReady(this);
33
35
  }
34
36
  protected _localMetadata?: RpcMetadata;
35
37
  protected _remoteMetadata?: RpcMetadata;
@@ -45,44 +47,28 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
45
47
  get authenticated(): boolean {
46
48
  return this._remoteMetadata != null;
47
49
  }
48
- private readonly __local?: RpcObject<TLocal>;
50
+ readonly #local?: RpcObject<TLocal>;
49
51
  /** 用于响应调用的本地对象 */
50
52
  protected get local(): RpcObject<TLocal> | undefined {
51
- return this.__local;
53
+ return this.#local;
52
54
  }
53
- private __socket?: WebSocket;
55
+ #socket?: WebSocket;
54
56
  /** 作为底层传输的 WebSocket */
55
57
  get socket(): WebSocket {
56
58
  if (this.#destroyed) throw new Error(`RPC Socket destroyed.`);
57
- if (!this.__socket) throw new Error(`Socket not initialized`);
58
- return this.__socket;
59
+ if (!this.#socket) throw new Error(`Socket not initialized`);
60
+ return this.#socket;
59
61
  }
60
62
  protected set socket(value: WebSocket) {
61
63
  if (this.#destroyed) throw new Error(`RPC Socket destroyed.`);
62
- if (this.__socket === value) return;
63
- const callbacks = this.makeReady();
64
- const oldValue = this.__socket;
65
- this.__socket = value;
64
+ if (this.#socket === value) return;
65
+ const callbacks = makeReady(this);
66
+ const oldValue = this.#socket;
67
+ this.#socket = value;
66
68
  void this.initSocket(oldValue, value).then(...callbacks);
67
69
  }
68
- /** 创建 ready Promise */
69
- private makeReady(): Parameters<ConstructorParameters<typeof Promise<void>>[0]> {
70
- if (this.__readyCallbacks != null) return this.__readyCallbacks;
71
- const ready = new Promise<void>((...args) => (this.__readyCallbacks = args));
72
- ready
73
- .catch(() => {
74
- // Avoid unhandled rejection
75
- })
76
- .finally(() => {
77
- if (this.ready === ready) this.__readyCallbacks = undefined;
78
- });
79
- this.ready = ready;
80
- if (!this.__readyCallbacks) throw new Error(`Bad promise`);
81
- return this.__readyCallbacks;
82
- }
83
- private __readyCallbacks?: Parameters<ConstructorParameters<typeof Promise<void>>[0]>;
84
- protected ready!: Promise<void>;
85
- private readonly __handlers = Object.freeze({
70
+ protected readonly ready!: Promise<void>;
71
+ readonly #handlers = Object.freeze({
86
72
  open: (ev: Event) => this.onOpen(ev),
87
73
  close: (ev: CloseEvent) => this.onClose(ev),
88
74
  error: (ev: Event | ErrorEvent) => this.onError(ev),
@@ -92,10 +78,10 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
92
78
  protected async initSocket(oldValue: WebSocket | undefined, newValue: WebSocket): Promise<void> {
93
79
  try {
94
80
  if (oldValue) {
95
- oldValue.removeEventListener('open', this.__handlers.open);
96
- oldValue.removeEventListener('close', this.__handlers.close);
97
- oldValue.removeEventListener('error', this.__handlers.error);
98
- oldValue.removeEventListener('message', this.__handlers.message);
81
+ oldValue.removeEventListener('open', this.#handlers.open);
82
+ oldValue.removeEventListener('close', this.#handlers.close);
83
+ oldValue.removeEventListener('error', this.#handlers.error);
84
+ oldValue.removeEventListener('message', this.#handlers.message);
99
85
  if (oldValue.readyState === oldValue.OPEN || oldValue.readyState === oldValue.CONNECTING) {
100
86
  logger('[%s] close old socket', this.id);
101
87
  oldValue.close(WebSocketAppCode.REPLACED);
@@ -103,11 +89,11 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
103
89
  }
104
90
  await connected(newValue);
105
91
  const info = await this.authSocket();
106
- if (this.__socket === newValue) {
107
- newValue.addEventListener('open', this.__handlers.open);
108
- newValue.addEventListener('close', this.__handlers.close);
109
- newValue.addEventListener('error', this.__handlers.error);
110
- newValue.addEventListener('message', this.__handlers.message);
92
+ if (this.#socket === newValue) {
93
+ newValue.addEventListener('open', this.#handlers.open);
94
+ newValue.addEventListener('close', this.#handlers.close);
95
+ newValue.addEventListener('error', this.#handlers.error);
96
+ newValue.addEventListener('message', this.#handlers.message);
111
97
  this._remoteMetadata = info ?? {};
112
98
  }
113
99
  } catch (ex) {
@@ -121,7 +107,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
121
107
  /** 响应 WebSocket error */
122
108
  protected onError(_ev: ErrorEvent | Event): void {
123
109
  this._remoteMetadata = undefined;
124
- this.makeReady();
110
+ makeReady(this);
125
111
  }
126
112
  /** 响应 WebSocket open */
127
113
  protected onOpen(_ev: Event): void {
@@ -133,7 +119,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
133
119
  if (ev.code === 1000) {
134
120
  this.destroy();
135
121
  } else {
136
- this.makeReady();
122
+ makeReady(this);
137
123
  }
138
124
  }
139
125
  /** 响应 WebSocket message */
@@ -162,10 +148,10 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
162
148
  void this.localCall(payload);
163
149
  return true;
164
150
  case 'return': {
165
- const pending = this.pendingCalls.get(payload.seq);
151
+ const pending = this.#pendingCalls.get(payload.seq);
166
152
  // 即使不存在等待的请求,也认为响应是有效的
167
153
  if (!pending) return true;
168
- this.pendingCalls.delete(payload.seq);
154
+ this.#pendingCalls.delete(payload.seq);
169
155
  if (payload.error) {
170
156
  pending[1](deserializeError(payload.error));
171
157
  } else {
@@ -177,26 +163,28 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
177
163
  void this.localSubscribe(payload);
178
164
  return true;
179
165
  case 'unsubscribe': {
180
- const subscription = this.localSubscription.get(payload.seq);
166
+ const subscription = this.#localSubscription.get(payload.seq);
181
167
  // 即使不存在对应订阅,也认为响应是有效的
182
168
  if (!subscription) return true;
183
169
  subscription.unsubscribe();
184
- this.localSubscription.delete(payload.seq);
170
+ this.#localSubscription.delete(payload.seq);
185
171
  return true;
186
172
  }
187
173
  case 'publish': {
188
- const subscriber = this.pendingSubscriptions.get(payload.seq);
174
+ const status = this.#pendingSubscriptions.get(payload.seq);
189
175
  // 即使不存在对应订阅,也认为响应是有效的
190
- if (!subscriber) {
176
+ if (!status) {
191
177
  void this.sendPayload('unsubscribe', { seq: payload.seq });
192
178
  return true;
193
179
  }
194
180
  if (payload.error) {
195
- subscriber.error(deserializeError(payload.error));
181
+ status[1] = true;
182
+ status[0].error(deserializeError(payload.error));
196
183
  } else if (payload.complete) {
197
- subscriber.complete();
184
+ status[1] = true;
185
+ status[0].complete();
198
186
  } else {
199
- subscriber.next(payload.next);
187
+ status[0].next(payload.next);
200
188
  }
201
189
  return true;
202
190
  }
@@ -228,7 +216,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
228
216
  return this.sendPayload('return', { seq, error: serializeError(ex) });
229
217
  }
230
218
  }
231
- private readonly localSubscription = new Map<number, Subscription>();
219
+ readonly #localSubscription = new Map<number, Subscription>();
232
220
  /** 调用本地方法 */
233
221
  protected async localSubscribe(payload: RpcSubscribePayload): Promise<void> {
234
222
  const method = this.local ? this.local[payload.method as Subjects<RpcObject<TLocal>>] : undefined;
@@ -246,15 +234,15 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
246
234
  void this.sendPayload('publish', { seq, next: value });
247
235
  },
248
236
  error: (err) => {
249
- this.localSubscription.delete(payload.seq);
237
+ this.#localSubscription.delete(payload.seq);
250
238
  void this.sendPayload('publish', { seq, error: serializeError(err) });
251
239
  },
252
240
  complete: () => {
253
- this.localSubscription.delete(payload.seq);
241
+ this.#localSubscription.delete(payload.seq);
254
242
  void this.sendPayload('publish', { seq, complete: true });
255
243
  },
256
244
  });
257
- this.localSubscription.set(seq, subscription);
245
+ this.#localSubscription.set(seq, subscription);
258
246
  } catch (ex) {
259
247
  return this.sendPayload('publish', { seq, error: serializeError(ex) });
260
248
  }
@@ -276,10 +264,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
276
264
  this.seq += 2;
277
265
  return seq;
278
266
  }
279
- private readonly pendingCalls = new Map<
280
- number,
281
- [resolve: (result: unknown) => void, reject: (error: Error) => void]
282
- >();
267
+ readonly #pendingCalls = new Map<number, PromiseCallbacks>();
283
268
  /** 调用远程方法 */
284
269
  // eslint-disable-next-line @typescript-eslint/promise-function-async
285
270
  call<TMethod extends Methods<TRemote>>(
@@ -289,7 +274,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
289
274
  return new Promise((resolve, reject) => {
290
275
  const seq = this.nextSeq();
291
276
  void this.sendPayload('call', { seq, method, args });
292
- this.pendingCalls.set(seq, [resolve as (result: unknown) => void, reject]);
277
+ this.#pendingCalls.set(seq, [resolve as (result: unknown) => void, reject]);
293
278
  });
294
279
  }
295
280
  /** 调用远程方法,放弃返回值 */
@@ -301,7 +286,7 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
301
286
  void this.sendPayload('notify', { seq, method, args });
302
287
  }
303
288
 
304
- private readonly pendingSubscriptions = new Map<number, Subscriber<unknown>>();
289
+ readonly #pendingSubscriptions = new Map<number, ObservableStatus>();
305
290
  /** 调用远程订阅 */
306
291
  subscribe<TSubject extends Subjects<TRemote>>(
307
292
  method: TSubject,
@@ -309,11 +294,12 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
309
294
  ): Observable<RpcReturns<TRemote[TSubject]>> {
310
295
  return new Observable((subscriber) => {
311
296
  const seq = this.nextSeq();
297
+ const status: ObservableStatus<RpcReturns<TRemote[TSubject]>> = [subscriber, false];
312
298
  void this.sendPayload('subscribe', { seq, method, args });
313
- this.pendingSubscriptions.set(seq, subscriber);
299
+ this.#pendingSubscriptions.set(seq, status);
314
300
  return () => {
315
- this.pendingSubscriptions.delete(seq);
316
- void this.sendPayload('unsubscribe', { seq });
301
+ this.#pendingSubscriptions.delete(seq);
302
+ if (!status[1]) void this.sendPayload('unsubscribe', { seq });
317
303
  };
318
304
  });
319
305
  }
@@ -328,18 +314,29 @@ export abstract class RpcSocket<TRemote extends object, TLocal extends object> {
328
314
  if (this.#destroyed) return;
329
315
  logger('[%s] socket destroyed', this.id);
330
316
  if (
331
- this.__socket &&
332
- (this.__socket.readyState === this.__socket.CONNECTING || this.__socket.readyState === this.__socket.OPEN)
317
+ this.#socket &&
318
+ (this.#socket.readyState === this.#socket.CONNECTING || this.#socket.readyState === this.#socket.OPEN)
333
319
  ) {
334
- this.__socket.close(1000);
320
+ this.#socket.close(1000);
335
321
  }
336
- this.__socket = undefined;
337
- for (const s of this.localSubscription.values()) s.unsubscribe();
338
- this.localSubscription.clear();
339
- for (const [, reject] of this.pendingCalls.values()) reject(new Error(`RPC Socket closed.`));
340
- this.pendingCalls.clear();
341
- for (const s of this.pendingSubscriptions.values()) s.error(new Error(`RPC Socket closed.`));
342
- this.pendingSubscriptions.clear();
322
+ this.#socket = undefined;
323
+
324
+ for (const s of this.#localSubscription.values()) {
325
+ s.unsubscribe();
326
+ }
327
+ this.#localSubscription.clear();
328
+
329
+ for (const [, reject] of this.#pendingCalls.values()) {
330
+ reject(new Error(`RPC Socket closed.`));
331
+ }
332
+ this.#pendingCalls.clear();
333
+
334
+ for (const s of this.#pendingSubscriptions.values()) {
335
+ s[1] = true;
336
+ s[0].error(new Error(`RPC Socket closed.`));
337
+ }
338
+ this.#pendingSubscriptions.clear();
339
+
343
340
  this.#destroyed = true;
344
341
  }
345
342
  }
@@ -0,0 +1,7 @@
1
+ import type { Subscriber } from 'rxjs';
2
+
3
+ /** Promise callbacks */
4
+ export type PromiseCallbacks<T = unknown> = [resolve: (value: T) => void, reject: (reason?: unknown) => void];
5
+
6
+ /** Observable status */
7
+ export type ObservableStatus<T = unknown> = [subscriber: Subscriber<T>, end: boolean];
@@ -26,7 +26,6 @@ export function serializeError(error: unknown): RpcErrorLike {
26
26
  if (typeof error != 'object')
27
27
  return {
28
28
  name: 'Error',
29
-
30
29
  message: String(error),
31
30
  };
32
31
  try {
@@ -36,7 +35,7 @@ export function serializeError(error: unknown): RpcErrorLike {
36
35
  return {
37
36
  ...rest,
38
37
  name: String(name ?? 'Error'),
39
- message: String(message ?? ''),
38
+ message: typeof message == 'string' ? message : String(error),
40
39
  stack: stack,
41
40
  errors: reenter ? undefined : Array.isArray(errors) ? errors.map((e) => serializeError(e)) : errors,
42
41
  };
package/tests/client.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { RpcClientSocket } from '@cloudpss/ubrpc';
2
2
  import { setTimeout } from 'node:timers/promises';
3
- import { WebSocket } from 'ws';
4
3
 
5
4
  const rpc = new RpcClientSocket('ws://localhost:8090');
6
5
  //await setTimeout(1000);
@@ -13,10 +12,13 @@ const s = rpc.subscribe('timer', 1000).subscribe({
13
12
  error: () => console.log('error'),
14
13
  });
15
14
  await setTimeout(1200);
16
- s.unsubscribe();
15
+ // s.unsubscribe();
17
16
  await setTimeout(1000);
18
- rpc.socket.close(3600);
17
+
18
+ // 模拟链接意外断开
19
+ rpc.socket.close();
20
+
19
21
  await setTimeout(1000);
20
22
  console.log(await rpc.call('hello', undefined));
21
23
 
22
- new WebSocket('ws://localhost:8090');
24
+ s.add(() => rpc.destroy());
package/tests/runner.ts CHANGED
@@ -4,7 +4,7 @@ import { setTimeout } from 'node:timers/promises';
4
4
 
5
5
  const token = 'a7193dc0-f65f-465f-89ed-18a3f72cf13a';
6
6
  const id = v5(token, '24b716e5-01c6-452a-9584-845b586d915f');
7
- const rpc = new RpcClientSocket('wss://internal.cloudpss.net/api/job', {
7
+ const rpc = new RpcClientSocket('wss://dev.local.ddns.cloudpss.net/api/job', {
8
8
  info: {
9
9
  id,
10
10
  token,