starpc 0.22.1 → 0.22.3

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.
@@ -44,7 +44,7 @@ export class Client {
44
44
  .then(async (call) => {
45
45
  return writeToPushable(call.rpcDataSource, serverData);
46
46
  })
47
- .catch(serverData.throw.bind(serverData));
47
+ .catch(err => serverData.end(err));
48
48
  return serverData;
49
49
  }
50
50
  // bidirectionalStreamingRequest starts a two-way streaming request.
@@ -57,13 +57,13 @@ export class Client {
57
57
  for await (const message of call.rpcDataSource) {
58
58
  serverData.push(message);
59
59
  }
60
+ serverData.end();
60
61
  }
61
62
  catch (err) {
62
- serverData.throw(err);
63
+ serverData.end(err);
63
64
  }
64
- serverData.end();
65
65
  })
66
- .catch(serverData.throw.bind(serverData));
66
+ .catch(err => serverData.end(err));
67
67
  return serverData;
68
68
  }
69
69
  // startRpc is a common utility function to begin a rpc call.
@@ -9,6 +9,7 @@ export declare class CommonRPC {
9
9
  private readonly _rpcDataSource;
10
10
  protected service?: string;
11
11
  protected method?: string;
12
+ private closed?;
12
13
  constructor();
13
14
  writeCallData(data?: Uint8Array, complete?: boolean, error?: string): Promise<void>;
14
15
  writeCallCancel(): Promise<void>;
@@ -116,6 +116,10 @@ export class CommonRPC {
116
116
  }
117
117
  // close closes the call, optionally with an error.
118
118
  async close(err) {
119
+ if (this.closed) {
120
+ return;
121
+ }
122
+ this.closed = true;
119
123
  try {
120
124
  await this.writeCallCancel();
121
125
  }
@@ -141,15 +145,11 @@ export class CommonRPC {
141
145
  await this.handlePacket(msg);
142
146
  }
143
147
  }
148
+ this._rpcDataSource.end();
144
149
  }
145
150
  catch (err) {
146
- const anyErr = err;
147
- if (anyErr?.code !== 'ERR_STREAM_RESET' &&
148
- anyErr?.code !== 'ERR_STREAM_ABORT') {
149
- this.close(err);
150
- }
151
+ this.close(err);
151
152
  }
152
- this._rpcDataSource.end();
153
153
  };
154
154
  }
155
155
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starpc",
3
- "version": "0.22.1",
3
+ "version": "0.22.3",
4
4
  "description": "Streaming protobuf RPC service protocol over any two-way channel.",
5
5
  "license": "MIT",
6
6
  "author": {
package/srpc/client.ts CHANGED
@@ -70,7 +70,7 @@ export class Client implements TsProtoRpc {
70
70
  .then(async (call) => {
71
71
  return writeToPushable(call.rpcDataSource, serverData)
72
72
  })
73
- .catch(serverData.throw.bind(serverData))
73
+ .catch(err => serverData.end(err))
74
74
  return serverData
75
75
  }
76
76
 
@@ -89,12 +89,12 @@ export class Client implements TsProtoRpc {
89
89
  for await (const message of call.rpcDataSource) {
90
90
  serverData.push(message)
91
91
  }
92
+ serverData.end()
92
93
  } catch (err) {
93
- serverData.throw(err as Error)
94
+ serverData.end(err as Error)
94
95
  }
95
- serverData.end()
96
96
  })
97
- .catch(serverData.throw.bind(serverData))
97
+ .catch(err => serverData.end(err))
98
98
  return serverData
99
99
  }
100
100
 
@@ -28,6 +28,9 @@ export class CommonRPC {
28
28
  // method is the rpc method
29
29
  protected method?: string
30
30
 
31
+ // closed indicates this rpc has been closed already.
32
+ private closed?: boolean
33
+
31
34
  constructor() {
32
35
  this.sink = this._createSink()
33
36
  this.source = this._source
@@ -150,6 +153,10 @@ export class CommonRPC {
150
153
 
151
154
  // close closes the call, optionally with an error.
152
155
  public async close(err?: Error) {
156
+ if (this.closed) {
157
+ return
158
+ }
159
+ this.closed = true
153
160
  try {
154
161
  await this.writeCallCancel()
155
162
  } finally {
@@ -174,16 +181,10 @@ export class CommonRPC {
174
181
  await this.handlePacket(msg)
175
182
  }
176
183
  }
184
+ this._rpcDataSource.end()
177
185
  } catch (err) {
178
- const anyErr = err as any
179
- if (
180
- anyErr?.code !== 'ERR_STREAM_RESET' &&
181
- anyErr?.code !== 'ERR_STREAM_ABORT'
182
- ) {
183
- this.close(err as Error)
184
- }
186
+ this.close(err as Error)
185
187
  }
186
- this._rpcDataSource.end()
187
188
  }
188
189
  }
189
190
  }