hypha-rpc 0.20.42 → 0.20.44

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.
@@ -36,7 +36,7 @@ __webpack_require__.r(__webpack_exports__);
36
36
 
37
37
 
38
38
 
39
- const API_VERSION = "0.20.0";
39
+ const API_VERSION = 2;
40
40
  const CHUNK_SIZE = 1024 * 500;
41
41
 
42
42
  const ArrayBufferView = Object.getPrototypeOf(
@@ -325,7 +325,11 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
325
325
  id: "built-in",
326
326
  type: "built-in",
327
327
  name: `Built-in services for ${this._local_workspace}/${this._client_id}`,
328
- config: { require_context: true, visibility: "public" },
328
+ config: {
329
+ require_context: true,
330
+ visibility: "public",
331
+ api_version: API_VERSION,
332
+ },
329
333
  ping: this._ping.bind(this),
330
334
  get_service: this.get_local_service.bind(this),
331
335
  message_cache: {
@@ -474,6 +478,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
474
478
  Object.assign(main, {
475
479
  from: context.from,
476
480
  to: context.to,
481
+ ws: context.ws,
477
482
  user: context.user,
478
483
  });
479
484
  main["ctx"] = JSON.parse(JSON.stringify(main));
@@ -844,13 +849,11 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
844
849
  let method_id = `${session_id}.${name}`;
845
850
  let encoded = {
846
851
  _rtype: "method",
847
- _rserver: this._server_base_url,
848
852
  _rtarget: local_workspace
849
853
  ? `${local_workspace}/${this._client_id}`
850
854
  : this._client_id,
851
855
  _rmethod: method_id,
852
856
  _rpromise: false,
853
- _rdoc: `callback: ${method_id}, context: (${description})`,
854
857
  };
855
858
 
856
859
  const self = this;
@@ -994,7 +997,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
994
997
  encoded_method._rtarget = target_id;
995
998
  }
996
999
  let method_id = encoded_method._rmethod;
997
- let with_promise = encoded_method._rpromise;
1000
+ let with_promise = encoded_method._rpromise || false;
998
1001
  const description = `method: ${method_id}, docs: ${encoded_method._rdoc}`;
999
1002
  const self = this;
1000
1003
 
@@ -1081,7 +1084,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1081
1084
  break;
1082
1085
  }
1083
1086
  }
1084
- extra_data["promise"] = await self._encode_promise(
1087
+ const promiseData = await self._encode_promise(
1085
1088
  resolve,
1086
1089
  reject,
1087
1090
  local_session_id,
@@ -1090,6 +1093,15 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1090
1093
  local_workspace,
1091
1094
  description,
1092
1095
  );
1096
+
1097
+ if (with_promise === true) {
1098
+ extra_data["promise"] = promiseData;
1099
+ } else if (with_promise === "*") {
1100
+ extra_data["promise"] = "*";
1101
+ extra_data["t"] = self._method_timeout / 2;
1102
+ } else {
1103
+ throw new Error(`Unsupported promise type: ${with_promise}`);
1104
+ }
1093
1105
  }
1094
1106
  // The message consists of two segments, the main message and extra data
1095
1107
  let message_package = (0,_msgpack_msgpack__WEBPACK_IMPORTED_MODULE_3__.encode)(main_message);
@@ -1098,7 +1110,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1098
1110
  message_package = new Uint8Array([...message_package, ...extra]);
1099
1111
  }
1100
1112
  const total_size = message_package.length;
1101
- if (total_size <= CHUNK_SIZE + 1024) {
1113
+ if (total_size <= CHUNK_SIZE + 1024 || remote_method.__no_chunk__) {
1102
1114
  self
1103
1115
  ._emit_message(message_package)
1104
1116
  .then(function () {
@@ -1145,6 +1157,9 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1145
1157
  remote_method.__doc__ =
1146
1158
  encoded_method._rdoc || `Remote method: ${method_id}`;
1147
1159
  remote_method.__schema__ = encoded_method._rschema;
1160
+ // Prevent circular chunk sending
1161
+ remote_method.__no_chunk__ =
1162
+ encoded_method._rmethod === "services.built-in.message_cache.append";
1148
1163
  return remote_method;
1149
1164
  }
1150
1165
 
@@ -1195,7 +1210,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1195
1210
  // Decode the promise with the remote session id
1196
1211
  // Such that the session id will be passed to the remote as a parent session id
1197
1212
  const promise = await this._decode(
1198
- data.promise,
1213
+ data.promise === "*" ? this._expand_promise(data) : data.promise,
1199
1214
  data.session,
1200
1215
  local_parent,
1201
1216
  remote_workspace,
@@ -1434,7 +1449,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1434
1449
  _rserver: this._server_base_url,
1435
1450
  _rtarget: this._client_id,
1436
1451
  _rmethod: annotation.method_id,
1437
- _rpromise: true,
1452
+ _rpromise: "*",
1438
1453
  };
1439
1454
  } else {
1440
1455
  (0,_utils__WEBPACK_IMPORTED_MODULE_0__.assert)(typeof session_id === "string");
@@ -1449,7 +1464,7 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1449
1464
  _rserver: this._server_base_url,
1450
1465
  _rtarget: this._client_id,
1451
1466
  _rmethod: `${session_id}.${object_id}`,
1452
- _rpromise: true,
1467
+ _rpromise: "*",
1453
1468
  };
1454
1469
  let store = this._get_session_store(session_id, true);
1455
1470
  (0,_utils__WEBPACK_IMPORTED_MODULE_0__.assert)(
@@ -1798,6 +1813,30 @@ class RPC extends _utils__WEBPACK_IMPORTED_MODULE_0__.MessageEmitter {
1798
1813
  }
1799
1814
  return bObject;
1800
1815
  }
1816
+
1817
+ _expand_promise(data) {
1818
+ return {
1819
+ heartbeat: {
1820
+ _rtype: "method",
1821
+ _rtarget: data.from.split("/")[1],
1822
+ _rmethod: data.session + ".heartbeat",
1823
+ _rdoc: `heartbeat callback for method: ${data.method}`,
1824
+ },
1825
+ resolve: {
1826
+ _rtype: "method",
1827
+ _rtarget: data.from.split("/")[1],
1828
+ _rmethod: data.session + ".resolve",
1829
+ _rdoc: `resolve callback for method: ${data.method}`,
1830
+ },
1831
+ reject: {
1832
+ _rtype: "method",
1833
+ _rtarget: data.from.split("/")[1],
1834
+ _rmethod: data.session + ".reject",
1835
+ _rdoc: `reject callback for method: ${data.method}`,
1836
+ },
1837
+ interval: data.t,
1838
+ };
1839
+ }
1801
1840
  }
1802
1841
 
1803
1842