@dxos/echo-pipeline 0.7.4 → 0.7.5-feature-compute.4d9d99a

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.
Files changed (51) hide show
  1. package/dist/lib/browser/{chunk-LZK5YFYE.mjs → chunk-QBMTPEMY.mjs} +111 -38
  2. package/dist/lib/browser/chunk-QBMTPEMY.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +171 -77
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +1 -1
  7. package/dist/lib/node/{chunk-MACQJ2EP.cjs → chunk-NPZ57MV5.cjs} +110 -40
  8. package/dist/lib/node/chunk-NPZ57MV5.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +184 -94
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +10 -10
  13. package/dist/lib/node-esm/{chunk-JIZPSASG.mjs → chunk-OY5N3ZIV.mjs} +111 -38
  14. package/dist/lib/node-esm/chunk-OY5N3ZIV.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +171 -77
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +1 -1
  19. package/dist/types/src/automerge/automerge-host.d.ts +5 -1
  20. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  21. package/dist/types/src/automerge/collection-synchronizer.d.ts +1 -0
  22. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
  23. package/dist/types/src/automerge/echo-network-adapter.d.ts +1 -0
  24. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  25. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +1 -1
  26. package/dist/types/src/db-host/echo-host.d.ts +3 -2
  27. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  28. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  29. package/dist/types/src/edge/inflight-request-limiter.d.ts +24 -0
  30. package/dist/types/src/edge/inflight-request-limiter.d.ts.map +1 -0
  31. package/dist/types/src/pipeline/pipeline.d.ts +1 -0
  32. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  33. package/dist/types/src/space/control-pipeline.d.ts +9 -0
  34. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  35. package/dist/types/src/space/space-manager.d.ts +1 -0
  36. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  37. package/dist/types/tsconfig.tsbuildinfo +1 -0
  38. package/package.json +34 -34
  39. package/src/automerge/automerge-host.ts +49 -14
  40. package/src/automerge/collection-synchronizer.ts +8 -4
  41. package/src/automerge/echo-network-adapter.ts +7 -0
  42. package/src/automerge/mesh-echo-replicator.ts +2 -2
  43. package/src/db-host/echo-host.ts +4 -1
  44. package/src/edge/echo-edge-replicator.ts +34 -18
  45. package/src/edge/inflight-request-limiter.ts +69 -0
  46. package/src/pipeline/pipeline.ts +9 -1
  47. package/src/space/control-pipeline.ts +25 -2
  48. package/src/space/space-manager.ts +17 -1
  49. package/dist/lib/browser/chunk-LZK5YFYE.mjs.map +0 -7
  50. package/dist/lib/node/chunk-MACQJ2EP.cjs.map +0 -7
  51. package/dist/lib/node-esm/chunk-JIZPSASG.mjs.map +0 -7
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_MACQJ2EP_exports = {};
30
- __export(chunk_MACQJ2EP_exports, {
29
+ var chunk_NPZ57MV5_exports = {};
30
+ __export(chunk_NPZ57MV5_exports, {
31
31
  AuthExtension: () => AuthExtension,
32
32
  AuthStatus: () => AuthStatus,
33
33
  CredentialRetrieverExtension: () => CredentialRetrieverExtension,
@@ -50,7 +50,7 @@ __export(chunk_MACQJ2EP_exports, {
50
50
  startAfter: () => startAfter,
51
51
  valueEncoding: () => valueEncoding
52
52
  });
53
- module.exports = __toCommonJS(chunk_MACQJ2EP_exports);
53
+ module.exports = __toCommonJS(chunk_NPZ57MV5_exports);
54
54
  var import_hypercore = require("@dxos/hypercore");
55
55
  var import_proto = require("@dxos/protocols/proto");
56
56
  var import_invariant = require("@dxos/invariant");
@@ -120,6 +120,8 @@ var import_teleport_extension_replicator = require("@dxos/teleport-extension-rep
120
120
  var import_tracing3 = require("@dxos/tracing");
121
121
  var import_util6 = require("@dxos/util");
122
122
  var import_async8 = require("@dxos/async");
123
+ var import_automerge_repo = require("@dxos/automerge/automerge-repo");
124
+ var import_credentials4 = require("@dxos/credentials");
123
125
  var import_debug3 = require("@dxos/debug");
124
126
  var import_keys6 = require("@dxos/keys");
125
127
  var import_log9 = require("@dxos/log");
@@ -802,10 +804,22 @@ var Pipeline = class {
802
804
  payload
803
805
  }), feed.createFeedWriter());
804
806
  }
807
+ retryMessage(message) {
808
+ (0, import_invariant3.invariant)(this._feedSetIterator, "Iterator not initialized.", {
809
+ F: __dxlog_file5,
810
+ L: 283,
811
+ S: this,
812
+ A: [
813
+ "this._feedSetIterator",
814
+ "'Iterator not initialized.'"
815
+ ]
816
+ });
817
+ this._feedSetIterator.reiterateBlock(message);
818
+ }
805
819
  async start() {
806
820
  (0, import_invariant3.invariant)(!this._isStarted, "Pipeline is already started.", {
807
821
  F: __dxlog_file5,
808
- L: 284,
822
+ L: 289,
809
823
  S: this,
810
824
  A: [
811
825
  "!this._isStarted",
@@ -814,7 +828,7 @@ var Pipeline = class {
814
828
  });
815
829
  (0, import_log3.log)("starting...", void 0, {
816
830
  F: __dxlog_file5,
817
- L: 285,
831
+ L: 290,
818
832
  S: this,
819
833
  C: (f, a) => f(...a)
820
834
  });
@@ -823,7 +837,7 @@ var Pipeline = class {
823
837
  this._isStarted = true;
824
838
  (0, import_log3.log)("started", void 0, {
825
839
  F: __dxlog_file5,
826
- L: 289,
840
+ L: 294,
827
841
  S: this,
828
842
  C: (f, a) => f(...a)
829
843
  });
@@ -836,7 +850,7 @@ var Pipeline = class {
836
850
  async stop() {
837
851
  (0, import_log3.log)("stopping...", void 0, {
838
852
  F: __dxlog_file5,
839
- L: 300,
853
+ L: 305,
840
854
  S: this,
841
855
  C: (f, a) => f(...a)
842
856
  });
@@ -850,14 +864,14 @@ var Pipeline = class {
850
864
  await this._state._ctx.dispose();
851
865
  this._state._ctx = new import_context2.Context(void 0, {
852
866
  F: __dxlog_file5,
853
- L: 309
867
+ L: 314
854
868
  });
855
869
  this._state._reachedTargetPromise = void 0;
856
870
  this._state._reachedTarget = false;
857
871
  this._isStarted = false;
858
872
  (0, import_log3.log)("stopped", void 0, {
859
873
  F: __dxlog_file5,
860
- L: 313,
874
+ L: 318,
861
875
  S: this,
862
876
  C: (f, a) => f(...a)
863
877
  });
@@ -869,7 +883,7 @@ var Pipeline = class {
869
883
  async setCursor(timeframe) {
870
884
  (0, import_invariant3.invariant)(!this._isStarted || this._isPaused, "Invalid state.", {
871
885
  F: __dxlog_file5,
872
- L: 322,
886
+ L: 327,
873
887
  S: this,
874
888
  A: [
875
889
  "!this._isStarted || this._isPaused",
@@ -898,7 +912,7 @@ var Pipeline = class {
898
912
  async unpause() {
899
913
  (0, import_invariant3.invariant)(this._isPaused, "Pipeline is not paused.", {
900
914
  F: __dxlog_file5,
901
- L: 351,
915
+ L: 356,
902
916
  S: this,
903
917
  A: [
904
918
  "this._isPaused",
@@ -918,7 +932,7 @@ var Pipeline = class {
918
932
  async *consume() {
919
933
  (0, import_invariant3.invariant)(!this._isBeingConsumed, "Pipeline is already being consumed.", {
920
934
  F: __dxlog_file5,
921
- L: 366,
935
+ L: 371,
922
936
  S: this,
923
937
  A: [
924
938
  "!this._isBeingConsumed",
@@ -928,7 +942,7 @@ var Pipeline = class {
928
942
  this._isBeingConsumed = true;
929
943
  (0, import_invariant3.invariant)(this._feedSetIterator, "Iterator not initialized.", {
930
944
  F: __dxlog_file5,
931
- L: 369,
945
+ L: 374,
932
946
  S: this,
933
947
  A: [
934
948
  "this._feedSetIterator",
@@ -942,7 +956,7 @@ var Pipeline = class {
942
956
  if (lastFeedSetIterator !== this._feedSetIterator) {
943
957
  (0, import_invariant3.invariant)(this._feedSetIterator, "Iterator not initialized.", {
944
958
  F: __dxlog_file5,
945
- L: 378,
959
+ L: 383,
946
960
  S: this,
947
961
  A: [
948
962
  "this._feedSetIterator",
@@ -977,7 +991,7 @@ var Pipeline = class {
977
991
  length: feed.length
978
992
  }, {
979
993
  F: __dxlog_file5,
980
- L: 407,
994
+ L: 412,
981
995
  S: this,
982
996
  C: (f, a) => f(...a)
983
997
  });
@@ -991,7 +1005,7 @@ var Pipeline = class {
991
1005
  data
992
1006
  }, {
993
1007
  F: __dxlog_file5,
994
- L: 412,
1008
+ L: 417,
995
1009
  S: this,
996
1010
  C: (f, a) => f(...a)
997
1011
  });
@@ -1005,9 +1019,12 @@ var Pipeline = class {
1005
1019
  stallTimeout: 1e3
1006
1020
  });
1007
1021
  this._feedSetIterator.stalled.on((iterator) => {
1008
- import_log3.log.warn(`Stalled after ${iterator.options.stallTimeout}ms with ${iterator.size} feeds.`, void 0, {
1022
+ import_log3.log.warn(`Stalled after ${iterator.options.stallTimeout}ms with ${iterator.size} feeds.`, {
1023
+ currentTimeframe: this._timeframeClock.timeframe,
1024
+ targetTimeframe: this._state.targetTimeframe
1025
+ }, {
1009
1026
  F: __dxlog_file5,
1010
- L: 426,
1027
+ L: 431,
1011
1028
  S: this,
1012
1029
  C: (f, a) => f(...a)
1013
1030
  });
@@ -1150,6 +1167,7 @@ var ControlPipeline = class {
1150
1167
  F: __dxlog_file7,
1151
1168
  L: 47
1152
1169
  });
1170
+ this._failedMessages = new import_util5.ComplexSet((message) => `${message.feedKey.toHex()}:${message.seq}`);
1153
1171
  this._lastTimeframeSaveTime = Date.now();
1154
1172
  this.onFeedAdmitted = new import_util5.Callback();
1155
1173
  this._usage = new import_tracing2.TimeUsageCounter();
@@ -1168,7 +1186,7 @@ var ControlPipeline = class {
1168
1186
  key: info.key
1169
1187
  }, {
1170
1188
  F: __dxlog_file7,
1171
- L: 82,
1189
+ L: 89,
1172
1190
  S: this,
1173
1191
  C: (f, a) => f(...a)
1174
1192
  });
@@ -1182,7 +1200,7 @@ var ControlPipeline = class {
1182
1200
  } catch (err) {
1183
1201
  import_log7.log.catch(err, void 0, {
1184
1202
  F: __dxlog_file7,
1185
- L: 93,
1203
+ L: 100,
1186
1204
  S: this,
1187
1205
  C: (f, a) => f(...a)
1188
1206
  });
@@ -1214,7 +1232,7 @@ var ControlPipeline = class {
1214
1232
  tf: snapshot?.timeframe
1215
1233
  }, {
1216
1234
  F: __dxlog_file7,
1217
- L: 123,
1235
+ L: 130,
1218
1236
  S: this,
1219
1237
  C: (f, a) => f(...a)
1220
1238
  });
@@ -1223,20 +1241,20 @@ var ControlPipeline = class {
1223
1241
  }
1224
1242
  (0, import_log7.log)("starting...", void 0, {
1225
1243
  F: __dxlog_file7,
1226
- L: 128,
1244
+ L: 135,
1227
1245
  S: this,
1228
1246
  C: (f, a) => f(...a)
1229
1247
  });
1230
1248
  setTimeout(async () => {
1231
1249
  void this._consumePipeline(new import_context5.Context(void 0, {
1232
1250
  F: __dxlog_file7,
1233
- L: 130
1251
+ L: 137
1234
1252
  }));
1235
1253
  });
1236
1254
  await this._pipeline.start();
1237
1255
  (0, import_log7.log)("started", void 0, {
1238
1256
  F: __dxlog_file7,
1239
- L: 134,
1257
+ L: 141,
1240
1258
  S: this,
1241
1259
  C: (f, a) => f(...a)
1242
1260
  });
@@ -1253,7 +1271,7 @@ var ControlPipeline = class {
1253
1271
  message
1254
1272
  }, {
1255
1273
  F: __dxlog_file7,
1256
- L: 147,
1274
+ L: 154,
1257
1275
  S: this,
1258
1276
  C: (f, a) => f(...a)
1259
1277
  });
@@ -1275,7 +1293,7 @@ var ControlPipeline = class {
1275
1293
  snapshot: getSnapshotLoggerContext(snapshot)
1276
1294
  }, {
1277
1295
  F: __dxlog_file7,
1278
- L: 163,
1296
+ L: 170,
1279
1297
  S: this,
1280
1298
  C: (f, a) => f(...a)
1281
1299
  });
@@ -1290,7 +1308,7 @@ var ControlPipeline = class {
1290
1308
  } catch (err) {
1291
1309
  import_log7.log.catch(err, void 0, {
1292
1310
  F: __dxlog_file7,
1293
- L: 176,
1311
+ L: 183,
1294
1312
  S: this,
1295
1313
  C: (f, a) => f(...a)
1296
1314
  });
@@ -1304,7 +1322,7 @@ var ControlPipeline = class {
1304
1322
  seq: msg.seq
1305
1323
  }, {
1306
1324
  F: __dxlog_file7,
1307
- L: 186,
1325
+ L: 192,
1308
1326
  S: this,
1309
1327
  C: (f, a) => f(...a)
1310
1328
  });
@@ -1319,16 +1337,52 @@ var ControlPipeline = class {
1319
1337
  msg
1320
1338
  }, {
1321
1339
  F: __dxlog_file7,
1322
- L: 195,
1340
+ L: 201,
1323
1341
  S: this,
1324
1342
  C: (f, a) => f(...a)
1325
1343
  });
1344
+ this._retryMessage(msg);
1326
1345
  } else {
1327
1346
  await this._noteTargetStateIfNeeded(this._pipeline.state.pendingTimeframe);
1328
1347
  }
1329
1348
  this._snapshotTask.schedule();
1349
+ return result;
1330
1350
  }
1331
1351
  }
1352
+ /**
1353
+ * If it first failure, it will be retried once the pipeline is processed fully.
1354
+ * If it fails again, it will be ignored.
1355
+ */
1356
+ _retryMessage(message) {
1357
+ if (this._failedMessages.has({
1358
+ feedKey: message.feedKey,
1359
+ seq: message.seq
1360
+ })) {
1361
+ import_log7.log.warn("message processing failed twice", {
1362
+ message
1363
+ }, {
1364
+ F: __dxlog_file7,
1365
+ L: 218,
1366
+ S: this,
1367
+ C: (f, a) => f(...a)
1368
+ });
1369
+ return;
1370
+ }
1371
+ (0, import_log7.log)("message will be retried", {
1372
+ feedKey: message.feedKey.toHex(),
1373
+ seq: message.seq
1374
+ }, {
1375
+ F: __dxlog_file7,
1376
+ L: 222,
1377
+ S: this,
1378
+ C: (f, a) => f(...a)
1379
+ });
1380
+ this._failedMessages.add({
1381
+ feedKey: message.feedKey,
1382
+ seq: message.seq
1383
+ });
1384
+ this._pipeline.retryMessage(message);
1385
+ }
1332
1386
  async _noteTargetStateIfNeeded(timeframe) {
1333
1387
  if (Date.now() - this._lastTimeframeSaveTime > TIMEFRAME_SAVE_DEBOUNCE_INTERVAL) {
1334
1388
  this._lastTimeframeSaveTime = Date.now();
@@ -1338,7 +1392,7 @@ var ControlPipeline = class {
1338
1392
  async stop() {
1339
1393
  (0, import_log7.log)("stopping...", void 0, {
1340
1394
  F: __dxlog_file7,
1341
- L: 215,
1395
+ L: 238,
1342
1396
  S: this,
1343
1397
  C: (f, a) => f(...a)
1344
1398
  });
@@ -1347,7 +1401,7 @@ var ControlPipeline = class {
1347
1401
  await this._saveTargetTimeframe(this._pipeline.state.timeframe);
1348
1402
  (0, import_log7.log)("stopped", void 0, {
1349
1403
  F: __dxlog_file7,
1350
- L: 219,
1404
+ L: 242,
1351
1405
  S: this,
1352
1406
  C: (f, a) => f(...a)
1353
1407
  });
@@ -1360,7 +1414,7 @@ var ControlPipeline = class {
1360
1414
  } catch (err) {
1361
1415
  (0, import_log7.log)(err, void 0, {
1362
1416
  F: __dxlog_file7,
1363
- L: 228,
1417
+ L: 251,
1364
1418
  S: this,
1365
1419
  C: (f, a) => f(...a)
1366
1420
  });
@@ -1924,7 +1978,7 @@ var SpaceManager = class {
1924
1978
  id: this._instanceId
1925
1979
  }), {
1926
1980
  F: __dxlog_file11,
1927
- L: 100,
1981
+ L: 101,
1928
1982
  S: this,
1929
1983
  C: (f, a) => f(...a)
1930
1984
  });
@@ -1932,7 +1986,7 @@ var SpaceManager = class {
1932
1986
  spaceKey: metadata.genesisFeedKey
1933
1987
  }, {
1934
1988
  F: __dxlog_file11,
1935
- L: 101,
1989
+ L: 102,
1936
1990
  S: this,
1937
1991
  C: (f, a) => f(...a)
1938
1992
  });
@@ -1964,7 +2018,7 @@ var SpaceManager = class {
1964
2018
  id: this._instanceId
1965
2019
  }), {
1966
2020
  F: __dxlog_file11,
1967
- L: 131,
2021
+ L: 132,
1968
2022
  S: this,
1969
2023
  C: (f, a) => f(...a)
1970
2024
  });
@@ -1976,7 +2030,7 @@ var SpaceManager = class {
1976
2030
  id: this._instanceId
1977
2031
  }), {
1978
2032
  F: __dxlog_file11,
1979
- L: 137,
2033
+ L: 138,
1980
2034
  S: this,
1981
2035
  C: (f, a) => f(...a)
1982
2036
  });
@@ -1984,7 +2038,7 @@ var SpaceManager = class {
1984
2038
  spaceKey: params.spaceKey
1985
2039
  }, {
1986
2040
  F: __dxlog_file11,
1987
- L: 138,
2041
+ L: 139,
1988
2042
  S: this,
1989
2043
  C: (f, a) => f(...a)
1990
2044
  });
@@ -2012,7 +2066,7 @@ var SpaceManager = class {
2012
2066
  id: this._instanceId
2013
2067
  }), {
2014
2068
  F: __dxlog_file11,
2015
- L: 162,
2069
+ L: 163,
2016
2070
  S: this,
2017
2071
  C: (f, a) => f(...a)
2018
2072
  });
@@ -2023,7 +2077,7 @@ var SpaceManager = class {
2023
2077
  error: err
2024
2078
  }), {
2025
2079
  F: __dxlog_file11,
2026
- L: 165,
2080
+ L: 166,
2027
2081
  S: this,
2028
2082
  C: (f, a) => f(...a)
2029
2083
  });
@@ -2032,6 +2086,22 @@ var SpaceManager = class {
2032
2086
  await protocol.stop();
2033
2087
  }
2034
2088
  }
2089
+ findSpaceByRootDocumentId(documentId) {
2090
+ return [
2091
+ ...this._spaces.values()
2092
+ ].find((space) => {
2093
+ return space.spaceState.credentials.some((credential) => {
2094
+ const assertion = (0, import_credentials4.getCredentialAssertion)(credential);
2095
+ if (assertion["@type"] !== "dxos.halo.credentials.Epoch") {
2096
+ return false;
2097
+ }
2098
+ if (!assertion?.automergeRoot) {
2099
+ return false;
2100
+ }
2101
+ return (0, import_automerge_repo.parseAutomergeUrl)(assertion.automergeRoot).documentId === documentId;
2102
+ });
2103
+ });
2104
+ }
2035
2105
  };
2036
2106
  _ts_decorate7([
2037
2107
  import_async8.synchronized
@@ -2066,4 +2136,4 @@ SpaceManager = _ts_decorate7([
2066
2136
  startAfter,
2067
2137
  valueEncoding
2068
2138
  });
2069
- //# sourceMappingURL=chunk-MACQJ2EP.cjs.map
2139
+ //# sourceMappingURL=chunk-NPZ57MV5.cjs.map