@dxos/echo-pipeline 0.4.10-main.eedd150 → 0.4.10-main.f15a546

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 (72) hide show
  1. package/dist/lib/browser/{chunk-Y5YOH4CA.mjs → chunk-KMWJLYEQ.mjs} +76 -57
  2. package/dist/lib/browser/chunk-KMWJLYEQ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +343 -245
  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 +10 -2
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node/{chunk-ONMB6ZZF.cjs → chunk-YZA42CKA.cjs} +81 -62
  9. package/dist/lib/node/chunk-YZA42CKA.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +365 -270
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +20 -13
  14. package/dist/lib/node/testing/index.cjs.map +4 -4
  15. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
  16. package/dist/types/src/automerge/automerge-host.d.ts +19 -17
  17. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  18. package/dist/types/src/automerge/automerge-repo.test.d.ts +2 -0
  19. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -0
  20. package/dist/types/src/automerge/index.d.ts +1 -0
  21. package/dist/types/src/automerge/index.d.ts.map +1 -1
  22. package/dist/types/src/automerge/level.test.d.ts +2 -0
  23. package/dist/types/src/automerge/level.test.d.ts.map +1 -0
  24. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +30 -0
  25. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -0
  26. package/dist/types/src/automerge/local-host-network-adapter.d.ts +8 -1
  27. package/dist/types/src/automerge/local-host-network-adapter.d.ts.map +1 -1
  28. package/dist/types/src/automerge/migrations.d.ts +7 -0
  29. package/dist/types/src/automerge/migrations.d.ts.map +1 -0
  30. package/dist/types/src/automerge/reference.d.ts +1 -1
  31. package/dist/types/src/automerge/reference.d.ts.map +1 -1
  32. package/dist/types/src/automerge/storage-adapter.test.d.ts +2 -0
  33. package/dist/types/src/automerge/storage-adapter.test.d.ts.map +1 -0
  34. package/dist/types/src/automerge/types.d.ts +6 -0
  35. package/dist/types/src/automerge/types.d.ts.map +1 -1
  36. package/dist/types/src/metadata/metadata-store.d.ts +2 -1
  37. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  38. package/dist/types/src/space/control-pipeline.d.ts +3 -1
  39. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  40. package/dist/types/src/space/space-manager.d.ts +3 -1
  41. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  42. package/dist/types/src/space/space.d.ts +6 -9
  43. package/dist/types/src/space/space.d.ts.map +1 -1
  44. package/dist/types/src/testing/index.d.ts +1 -0
  45. package/dist/types/src/testing/index.d.ts.map +1 -1
  46. package/dist/types/src/testing/level.d.ts +3 -0
  47. package/dist/types/src/testing/level.d.ts.map +1 -0
  48. package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
  49. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  50. package/package.json +33 -30
  51. package/src/automerge/automerge-doc-loader.ts +3 -0
  52. package/src/automerge/automerge-host.test.ts +22 -8
  53. package/src/automerge/automerge-host.ts +54 -115
  54. package/src/automerge/automerge-repo.test.ts +29 -0
  55. package/src/automerge/index.ts +1 -0
  56. package/src/automerge/level.test.ts +82 -0
  57. package/src/automerge/leveldb-storage-adapter.ts +117 -0
  58. package/src/automerge/local-host-network-adapter.ts +19 -13
  59. package/src/automerge/migrations.ts +41 -0
  60. package/src/automerge/reference.ts +1 -1
  61. package/src/automerge/storage-adapter.test.ts +90 -0
  62. package/src/automerge/types.ts +6 -3
  63. package/src/metadata/metadata-store.ts +17 -8
  64. package/src/space/control-pipeline.ts +11 -1
  65. package/src/space/space-manager.ts +4 -0
  66. package/src/space/space.test.ts +7 -7
  67. package/src/space/space.ts +17 -22
  68. package/src/testing/index.ts +1 -0
  69. package/src/testing/level.ts +11 -0
  70. package/src/testing/test-agent-builder.ts +1 -0
  71. package/dist/lib/browser/chunk-Y5YOH4CA.mjs.map +0 -7
  72. package/dist/lib/node/chunk-ONMB6ZZF.cjs.map +0 -7
@@ -155,7 +155,7 @@ import { invariant as invariant2 } from "@dxos/invariant";
155
155
  import { PublicKey as PublicKey2 } from "@dxos/keys";
156
156
  import { log } from "@dxos/log";
157
157
  import { DataCorruptionError, STORAGE_VERSION, schema as schema4 } from "@dxos/protocols";
158
- import { SpaceState } from "@dxos/protocols/proto/dxos/client/services";
158
+ import { Invitation, SpaceState } from "@dxos/protocols/proto/dxos/client/services";
159
159
  import { ComplexMap, arrayToBuffer, forEachAsync, isNotNullOrUndefined } from "@dxos/util";
160
160
  function _ts_decorate(decorators, target, key, desc) {
161
161
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -307,8 +307,8 @@ var MetadataStore = class {
307
307
  }
308
308
  });
309
309
  scheduleTaskInterval(this._invitationCleanupCtx, async () => {
310
- for (const invitation of this.getInvitations()) {
311
- if (invitation.created && invitation.lifetime && invitation.lifetime !== 0 && invitation.created.getTime() + invitation.lifetime * 1e3 < Date.now()) {
310
+ for (const invitation of this._metadata.invitations ?? []) {
311
+ if (hasInvitationExpired(invitation) || isLegacyInvitationFormat(invitation)) {
312
312
  await this.removeInvitation(invitation.invitationId);
313
313
  }
314
314
  }
@@ -337,7 +337,7 @@ var MetadataStore = class {
337
337
  err
338
338
  }, {
339
339
  F: __dxlog_file2,
340
- L: 215,
340
+ L: 210,
341
341
  S: this,
342
342
  C: (f, a) => f(...a)
343
343
  });
@@ -358,7 +358,7 @@ var MetadataStore = class {
358
358
  const space = this.spaces.find((space2) => space2.key === spaceKey);
359
359
  invariant2(space, "Space not found", {
360
360
  F: __dxlog_file2,
361
- L: 237,
361
+ L: 232,
362
362
  S: this,
363
363
  A: [
364
364
  "space",
@@ -382,7 +382,7 @@ var MetadataStore = class {
382
382
  async clear() {
383
383
  log("clearing all metadata", void 0, {
384
384
  F: __dxlog_file2,
385
- L: 256,
385
+ L: 251,
386
386
  S: this,
387
387
  C: (f, a) => f(...a)
388
388
  });
@@ -395,7 +395,7 @@ var MetadataStore = class {
395
395
  async setIdentityRecord(record) {
396
396
  invariant2(!this._metadata.identity, "Cannot overwrite existing identity in metadata", {
397
397
  F: __dxlog_file2,
398
- L: 266,
398
+ L: 261,
399
399
  S: this,
400
400
  A: [
401
401
  "!this._metadata.identity",
@@ -425,7 +425,7 @@ var MetadataStore = class {
425
425
  async addSpace(record) {
426
426
  invariant2(!(this._metadata.spaces ?? []).find((space) => space.key === record.key), "Cannot overwrite existing space in metadata", {
427
427
  F: __dxlog_file2,
428
- L: 294,
428
+ L: 289,
429
429
  S: this,
430
430
  A: [
431
431
  "!(this._metadata.spaces ?? []).find((space) => space.key === record.key)",
@@ -480,6 +480,12 @@ _ts_decorate([
480
480
  synchronized
481
481
  ], MetadataStore.prototype, "_saveSpaceLargeMetadata", null);
482
482
  var fromBytesInt32 = (buf) => buf.readInt32LE(0);
483
+ var hasInvitationExpired = (invitation) => {
484
+ return Boolean(invitation.created && invitation.lifetime && invitation.lifetime !== 0 && invitation.created.getTime() + invitation.lifetime * 1e3 < Date.now());
485
+ };
486
+ var isLegacyInvitationFormat = (invitation) => {
487
+ return invitation.type === Invitation.Type.MULTIUSE;
488
+ };
483
489
 
484
490
  // packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts
485
491
  import { Event as Event2 } from "@dxos/async";
@@ -1143,6 +1149,7 @@ var AuthExtension = class extends RpcExtension {
1143
1149
 
1144
1150
  // packages/core/echo/echo-pipeline/src/space/space.ts
1145
1151
  import { Event as Event4, Mutex, synchronized as synchronized3, trackLeaks as trackLeaks2 } from "@dxos/async";
1152
+ import { Resource, LifecycleState } from "@dxos/context";
1146
1153
  import { invariant as invariant6 } from "@dxos/invariant";
1147
1154
  import { log as log7, logInfo } from "@dxos/log";
1148
1155
  import { AdmittedFeed as AdmittedFeed2 } from "@dxos/protocols/proto/dxos/halo/credentials";
@@ -1194,7 +1201,7 @@ var ControlPipeline = class {
1194
1201
  key: info.key
1195
1202
  }, {
1196
1203
  F: __dxlog_file7,
1197
- L: 74,
1204
+ L: 82,
1198
1205
  S: this,
1199
1206
  C: (f, a) => f(...a)
1200
1207
  });
@@ -1208,7 +1215,7 @@ var ControlPipeline = class {
1208
1215
  } catch (err) {
1209
1216
  log6.catch(err, void 0, {
1210
1217
  F: __dxlog_file7,
1211
- L: 85,
1218
+ L: 93,
1212
1219
  S: this,
1213
1220
  C: (f, a) => f(...a)
1214
1221
  });
@@ -1219,6 +1226,8 @@ var ControlPipeline = class {
1219
1226
  });
1220
1227
  this.onMemberAdmitted = this._spaceStateMachine.onMemberAdmitted;
1221
1228
  this.onCredentialProcessed = this._spaceStateMachine.onCredentialProcessed;
1229
+ this.onDelegatedInvitation = this._spaceStateMachine.onDelegatedInvitation;
1230
+ this.onDelegatedInvitationRemoved = this._spaceStateMachine.onDelegatedInvitationRemoved;
1222
1231
  }
1223
1232
  get spaceState() {
1224
1233
  return this._spaceStateMachine;
@@ -1238,7 +1247,7 @@ var ControlPipeline = class {
1238
1247
  tf: snapshot?.timeframe
1239
1248
  }, {
1240
1249
  F: __dxlog_file7,
1241
- L: 113,
1250
+ L: 123,
1242
1251
  S: this,
1243
1252
  C: (f, a) => f(...a)
1244
1253
  });
@@ -1247,7 +1256,7 @@ var ControlPipeline = class {
1247
1256
  }
1248
1257
  log6("starting...", void 0, {
1249
1258
  F: __dxlog_file7,
1250
- L: 118,
1259
+ L: 128,
1251
1260
  S: this,
1252
1261
  C: (f, a) => f(...a)
1253
1262
  });
@@ -1257,7 +1266,7 @@ var ControlPipeline = class {
1257
1266
  await this._pipeline.start();
1258
1267
  log6("started", void 0, {
1259
1268
  F: __dxlog_file7,
1260
- L: 124,
1269
+ L: 134,
1261
1270
  S: this,
1262
1271
  C: (f, a) => f(...a)
1263
1272
  });
@@ -1274,7 +1283,7 @@ var ControlPipeline = class {
1274
1283
  message
1275
1284
  }, {
1276
1285
  F: __dxlog_file7,
1277
- L: 137,
1286
+ L: 147,
1278
1287
  S: this,
1279
1288
  C: (f, a) => f(...a)
1280
1289
  });
@@ -1296,7 +1305,7 @@ var ControlPipeline = class {
1296
1305
  snapshot
1297
1306
  }, {
1298
1307
  F: __dxlog_file7,
1299
- L: 153,
1308
+ L: 163,
1300
1309
  S: this,
1301
1310
  C: (f, a) => f(...a)
1302
1311
  });
@@ -1311,7 +1320,7 @@ var ControlPipeline = class {
1311
1320
  } catch (err) {
1312
1321
  log6.catch(err, void 0, {
1313
1322
  F: __dxlog_file7,
1314
- L: 166,
1323
+ L: 176,
1315
1324
  S: this,
1316
1325
  C: (f, a) => f(...a)
1317
1326
  });
@@ -1325,7 +1334,7 @@ var ControlPipeline = class {
1325
1334
  seq: msg.seq
1326
1335
  }, {
1327
1336
  F: __dxlog_file7,
1328
- L: 176,
1337
+ L: 186,
1329
1338
  S: this,
1330
1339
  C: (f, a) => f(...a)
1331
1340
  });
@@ -1340,7 +1349,7 @@ var ControlPipeline = class {
1340
1349
  msg
1341
1350
  }, {
1342
1351
  F: __dxlog_file7,
1343
- L: 185,
1352
+ L: 195,
1344
1353
  S: this,
1345
1354
  C: (f, a) => f(...a)
1346
1355
  });
@@ -1359,7 +1368,7 @@ var ControlPipeline = class {
1359
1368
  async stop() {
1360
1369
  log6("stopping...", void 0, {
1361
1370
  F: __dxlog_file7,
1362
- L: 205,
1371
+ L: 215,
1363
1372
  S: this,
1364
1373
  C: (f, a) => f(...a)
1365
1374
  });
@@ -1368,7 +1377,7 @@ var ControlPipeline = class {
1368
1377
  await this._saveTargetTimeframe(this._pipeline.state.timeframe);
1369
1378
  log6("stopped", void 0, {
1370
1379
  F: __dxlog_file7,
1371
- L: 209,
1380
+ L: 219,
1372
1381
  S: this,
1373
1382
  C: (f, a) => f(...a)
1374
1383
  });
@@ -1381,7 +1390,7 @@ var ControlPipeline = class {
1381
1390
  } catch (err) {
1382
1391
  log6(err, void 0, {
1383
1392
  F: __dxlog_file7,
1384
- L: 218,
1393
+ L: 228,
1385
1394
  S: this,
1386
1395
  C: (f, a) => f(...a)
1387
1396
  });
@@ -1422,15 +1431,15 @@ function _ts_decorate5(decorators, target, key, desc) {
1422
1431
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1423
1432
  }
1424
1433
  var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space.ts";
1425
- var Space = class {
1434
+ var Space = class extends Resource {
1426
1435
  constructor(params) {
1436
+ super();
1427
1437
  this._addFeedMutex = new Mutex();
1428
1438
  this.onCredentialProcessed = new Callback2();
1429
1439
  this.stateUpdate = new Event4();
1430
- this._isOpen = false;
1431
1440
  invariant6(params.spaceKey && params.feedProvider, void 0, {
1432
1441
  F: __dxlog_file8,
1433
- L: 72,
1442
+ L: 74,
1434
1443
  S: this,
1435
1444
  A: [
1436
1445
  "params.spaceKey && params.feedProvider",
@@ -1463,12 +1472,34 @@ var Space = class {
1463
1472
  credential
1464
1473
  }, {
1465
1474
  F: __dxlog_file8,
1466
- L: 99,
1475
+ L: 101,
1467
1476
  S: this,
1468
1477
  C: (f, a) => f(...a)
1469
1478
  });
1470
1479
  this.stateUpdate.emit();
1471
1480
  });
1481
+ this._controlPipeline.onDelegatedInvitation.set(async (invitation) => {
1482
+ log7("onDelegatedInvitation", {
1483
+ invitation
1484
+ }, {
1485
+ F: __dxlog_file8,
1486
+ L: 105,
1487
+ S: this,
1488
+ C: (f, a) => f(...a)
1489
+ });
1490
+ await params.onDelegatedInvitationStatusChange(invitation, true);
1491
+ });
1492
+ this._controlPipeline.onDelegatedInvitationRemoved.set(async (invitation) => {
1493
+ log7("onDelegatedInvitationRemoved", {
1494
+ invitation
1495
+ }, {
1496
+ F: __dxlog_file8,
1497
+ L: 109,
1498
+ S: this,
1499
+ C: (f, a) => f(...a)
1500
+ });
1501
+ await params.onDelegatedInvitationStatusChange(invitation, false);
1502
+ });
1472
1503
  this.protocol = params.protocol;
1473
1504
  this.protocol.addFeed(params.genesisFeed);
1474
1505
  }
@@ -1476,7 +1507,7 @@ var Space = class {
1476
1507
  return this._key;
1477
1508
  }
1478
1509
  get isOpen() {
1479
- return this._isOpen;
1510
+ return this._lifecycleState === LifecycleState.OPEN;
1480
1511
  }
1481
1512
  get genesisFeedKey() {
1482
1513
  return this._genesisFeedKey;
@@ -1502,7 +1533,7 @@ var Space = class {
1502
1533
  async setControlFeed(feed) {
1503
1534
  invariant6(!this._controlFeed, "Control feed already set.", {
1504
1535
  F: __dxlog_file8,
1505
- L: 146,
1536
+ L: 156,
1506
1537
  S: this,
1507
1538
  A: [
1508
1539
  "!this._controlFeed",
@@ -1516,7 +1547,7 @@ var Space = class {
1516
1547
  async setDataFeed(feed) {
1517
1548
  invariant6(!this._dataFeed, "Data feed already set.", {
1518
1549
  F: __dxlog_file8,
1519
- L: 153,
1550
+ L: 163,
1520
1551
  S: this,
1521
1552
  A: [
1522
1553
  "!this._dataFeed",
@@ -1532,50 +1563,36 @@ var Space = class {
1532
1563
  getControlFeeds() {
1533
1564
  return Array.from(this._controlPipeline.spaceState.feeds.values());
1534
1565
  }
1535
- /**
1536
- * Use for diagnostics.
1537
- */
1538
- // getDataFeeds(): FeedInfo[] {
1539
- // return this._dataPipeline?.getFeeds();
1540
- // }
1541
- async open(ctx) {
1566
+ async _open(ctx) {
1542
1567
  log7("opening...", void 0, {
1543
1568
  F: __dxlog_file8,
1544
- L: 174,
1569
+ L: 177,
1545
1570
  S: this,
1546
1571
  C: (f, a) => f(...a)
1547
1572
  });
1548
- if (this._isOpen) {
1549
- return;
1550
- }
1551
1573
  await this._controlPipeline.start();
1552
1574
  await this.protocol.start();
1553
- this._isOpen = true;
1554
1575
  log7("opened", void 0, {
1555
1576
  F: __dxlog_file8,
1556
- L: 184,
1577
+ L: 183,
1557
1578
  S: this,
1558
1579
  C: (f, a) => f(...a)
1559
1580
  });
1560
1581
  }
1561
- async close() {
1582
+ async _close() {
1562
1583
  log7("closing...", {
1563
1584
  key: this._key
1564
1585
  }, {
1565
1586
  F: __dxlog_file8,
1566
- L: 189,
1587
+ L: 188,
1567
1588
  S: this,
1568
1589
  C: (f, a) => f(...a)
1569
1590
  });
1570
- if (!this._isOpen) {
1571
- return;
1572
- }
1573
1591
  await this.protocol.stop();
1574
1592
  await this._controlPipeline.stop();
1575
- this._isOpen = false;
1576
1593
  log7("closed", void 0, {
1577
1594
  F: __dxlog_file8,
1578
- L: 199,
1595
+ L: 194,
1579
1596
  S: this,
1580
1597
  C: (f, a) => f(...a)
1581
1598
  });
@@ -1592,12 +1609,11 @@ _ts_decorate5([
1592
1609
  trace2.info()
1593
1610
  ], Space.prototype, "key", null);
1594
1611
  _ts_decorate5([
1595
- synchronized3,
1596
1612
  trace2.span()
1597
- ], Space.prototype, "open", null);
1613
+ ], Space.prototype, "_open", null);
1598
1614
  _ts_decorate5([
1599
1615
  synchronized3
1600
- ], Space.prototype, "close", null);
1616
+ ], Space.prototype, "_close", null);
1601
1617
  Space = _ts_decorate5([
1602
1618
  trackLeaks2("open", "close"),
1603
1619
  trace2.resource()
@@ -1857,12 +1873,12 @@ var SpaceManager = class {
1857
1873
  ...this._spaces.values()
1858
1874
  ].map((space) => space.close()));
1859
1875
  }
1860
- async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, memberKey }) {
1876
+ async constructSpace({ metadata, swarmIdentity, onAuthorizedConnection, onAuthFailure, onDelegatedInvitationStatusChange, memberKey }) {
1861
1877
  log9.trace("dxos.echo.space-manager.construct-space", trace4.begin({
1862
1878
  id: this._instanceId
1863
1879
  }), {
1864
1880
  F: __dxlog_file10,
1865
- L: 89,
1881
+ L: 92,
1866
1882
  S: this,
1867
1883
  C: (f, a) => f(...a)
1868
1884
  });
@@ -1870,7 +1886,7 @@ var SpaceManager = class {
1870
1886
  spaceKey: metadata.genesisFeedKey
1871
1887
  }, {
1872
1888
  F: __dxlog_file10,
1873
- L: 90,
1889
+ L: 93,
1874
1890
  S: this,
1875
1891
  C: (f, a) => f(...a)
1876
1892
  });
@@ -1892,14 +1908,15 @@ var SpaceManager = class {
1892
1908
  feedProvider: (feedKey, opts) => this._feedStore.openFeed(feedKey, opts),
1893
1909
  metadataStore: this._metadataStore,
1894
1910
  snapshotManager,
1895
- memberKey
1911
+ memberKey,
1912
+ onDelegatedInvitationStatusChange
1896
1913
  });
1897
1914
  this._spaces.set(space.key, space);
1898
1915
  log9.trace("dxos.echo.space-manager.construct-space", trace4.end({
1899
1916
  id: this._instanceId
1900
1917
  }), {
1901
1918
  F: __dxlog_file10,
1902
- L: 117,
1919
+ L: 121,
1903
1920
  S: this,
1904
1921
  C: (f, a) => f(...a)
1905
1922
  });
@@ -1917,6 +1934,7 @@ SpaceManager = _ts_decorate7([
1917
1934
  ], SpaceManager);
1918
1935
 
1919
1936
  export {
1937
+ Buffer,
1920
1938
  codec,
1921
1939
  valueEncoding,
1922
1940
  createMappedFeedWriter,
@@ -1924,6 +1942,7 @@ export {
1924
1942
  SnapshotStore,
1925
1943
  DataServiceImpl,
1926
1944
  MetadataStore,
1945
+ hasInvitationExpired,
1927
1946
  mapTimeframeToFeedIndexes,
1928
1947
  mapFeedIndexesToTimeframe,
1929
1948
  startAfter,
@@ -1938,4 +1957,4 @@ export {
1938
1957
  SpaceProtocolSession,
1939
1958
  SpaceManager
1940
1959
  };
1941
- //# sourceMappingURL=chunk-Y5YOH4CA.mjs.map
1960
+ //# sourceMappingURL=chunk-KMWJLYEQ.mjs.map