@dxos/echo-pipeline 0.6.6-main.e1a6e1f → 0.6.6-staging.41c080b

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 (33) hide show
  1. package/dist/lib/browser/{chunk-LNIQX6PQ.mjs → chunk-P6XSIJKM.mjs} +77 -38
  2. package/dist/lib/browser/{chunk-LNIQX6PQ.mjs.map → chunk-P6XSIJKM.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +8 -8
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/node/{chunk-LTR534RP.cjs → chunk-IYTGTZ7D.cjs} +80 -41
  8. package/dist/lib/node/chunk-IYTGTZ7D.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +35 -35
  10. package/dist/lib/node/index.cjs.map +1 -1
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +18 -18
  13. package/dist/lib/node/testing/index.cjs.map +3 -3
  14. package/dist/types/src/automerge/automerge-host.d.ts +1 -0
  15. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  16. package/dist/types/src/automerge/echo-network-adapter.d.ts +2 -1
  17. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  18. package/dist/types/src/automerge/echo-replicator.d.ts +5 -0
  19. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  20. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  21. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  22. package/dist/types/src/testing/test-network-adapter.d.ts +2 -1
  23. package/dist/types/src/testing/test-network-adapter.d.ts.map +1 -1
  24. package/package.json +33 -33
  25. package/src/automerge/automerge-host.ts +13 -1
  26. package/src/automerge/automerge-repo.test.ts +380 -366
  27. package/src/automerge/echo-network-adapter.test.ts +1 -0
  28. package/src/automerge/echo-network-adapter.ts +3 -0
  29. package/src/automerge/echo-replicator.ts +6 -0
  30. package/src/automerge/mesh-echo-replicator-connection.ts +18 -0
  31. package/src/automerge/mesh-echo-replicator.ts +10 -2
  32. package/src/testing/test-network-adapter.ts +5 -3
  33. package/dist/lib/node/chunk-LTR534RP.cjs.map +0 -7
@@ -1988,7 +1988,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
1988
1988
  this._lifecycleState = LifecycleState2.OPEN;
1989
1989
  log9("emit ready", void 0, {
1990
1990
  F: __dxlog_file11,
1991
- L: 79,
1991
+ L: 81,
1992
1992
  S: this,
1993
1993
  C: (f, a) => f(...a)
1994
1994
  });
@@ -2014,7 +2014,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2014
2014
  async addReplicator(replicator) {
2015
2015
  invariant7(this._lifecycleState === LifecycleState2.OPEN, void 0, {
2016
2016
  F: __dxlog_file11,
2017
- L: 105,
2017
+ L: 107,
2018
2018
  S: this,
2019
2019
  A: [
2020
2020
  "this._lifecycleState === LifecycleState.OPEN",
@@ -2023,7 +2023,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2023
2023
  });
2024
2024
  invariant7(this.peerId, void 0, {
2025
2025
  F: __dxlog_file11,
2026
- L: 106,
2026
+ L: 108,
2027
2027
  S: this,
2028
2028
  A: [
2029
2029
  "this.peerId",
@@ -2032,7 +2032,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2032
2032
  });
2033
2033
  invariant7(!this._replicators.has(replicator), void 0, {
2034
2034
  F: __dxlog_file11,
2035
- L: 107,
2035
+ L: 109,
2036
2036
  S: this,
2037
2037
  A: [
2038
2038
  "!this._replicators.has(replicator)",
@@ -2045,6 +2045,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2045
2045
  onConnectionOpen: this._onConnectionOpen.bind(this),
2046
2046
  onConnectionClosed: this._onConnectionClosed.bind(this),
2047
2047
  onConnectionAuthScopeChanged: this._onConnectionAuthScopeChanged.bind(this),
2048
+ isDocumentInRemoteCollection: this._params.isDocumentInRemoteCollection,
2048
2049
  getContainingSpaceForDocument: this._params.getContainingSpaceForDocument,
2049
2050
  getContainingSpaceIdForDocument: async (documentId) => {
2050
2051
  const key = await this._params.getContainingSpaceForDocument(documentId);
@@ -2055,7 +2056,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2055
2056
  async removeReplicator(replicator) {
2056
2057
  invariant7(this._lifecycleState === LifecycleState2.OPEN, void 0, {
2057
2058
  F: __dxlog_file11,
2058
- L: 125,
2059
+ L: 128,
2059
2060
  S: this,
2060
2061
  A: [
2061
2062
  "this._lifecycleState === LifecycleState.OPEN",
@@ -2064,7 +2065,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2064
2065
  });
2065
2066
  invariant7(this._replicators.has(replicator), void 0, {
2066
2067
  F: __dxlog_file11,
2067
- L: 126,
2068
+ L: 129,
2068
2069
  S: this,
2069
2070
  A: [
2070
2071
  "this._replicators.has(replicator)",
@@ -2120,7 +2121,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2120
2121
  if (connectionEntry.isOpen) {
2121
2122
  log9.catch(err, void 0, {
2122
2123
  F: __dxlog_file11,
2123
- L: 186,
2124
+ L: 189,
2124
2125
  S: this,
2125
2126
  C: (f, a) => f(...a)
2126
2127
  });
@@ -2141,13 +2142,13 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2141
2142
  peerId: connection.peerId
2142
2143
  }, {
2143
2144
  F: __dxlog_file11,
2144
- L: 204,
2145
+ L: 207,
2145
2146
  S: this,
2146
2147
  C: (f, a) => f(...a)
2147
2148
  });
2148
2149
  invariant7(!this._connections.has(connection.peerId), void 0, {
2149
2150
  F: __dxlog_file11,
2150
- L: 205,
2151
+ L: 208,
2151
2152
  S: this,
2152
2153
  A: [
2153
2154
  "!this._connections.has(connection.peerId as PeerId)",
@@ -2176,7 +2177,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2176
2177
  if (connectionEntry.isOpen) {
2177
2178
  log9.catch(err, void 0, {
2178
2179
  F: __dxlog_file11,
2179
- L: 224,
2180
+ L: 227,
2180
2181
  S: this,
2181
2182
  C: (f, a) => f(...a)
2182
2183
  });
@@ -2187,7 +2188,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2187
2188
  peerId: connection.peerId
2188
2189
  }, {
2189
2190
  F: __dxlog_file11,
2190
- L: 229,
2191
+ L: 232,
2191
2192
  S: this,
2192
2193
  C: (f, a) => f(...a)
2193
2194
  });
@@ -2213,14 +2214,14 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2213
2214
  peerId: connection.peerId
2214
2215
  }, {
2215
2216
  F: __dxlog_file11,
2216
- L: 250,
2217
+ L: 253,
2217
2218
  S: this,
2218
2219
  C: (f, a) => f(...a)
2219
2220
  });
2220
2221
  const entry = this._connections.get(connection.peerId);
2221
2222
  invariant7(entry, void 0, {
2222
2223
  F: __dxlog_file11,
2223
- L: 252,
2224
+ L: 255,
2224
2225
  S: this,
2225
2226
  A: [
2226
2227
  "entry",
@@ -2237,14 +2238,14 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2237
2238
  peerId: connection.peerId
2238
2239
  }, {
2239
2240
  F: __dxlog_file11,
2240
- L: 258,
2241
+ L: 261,
2241
2242
  S: this,
2242
2243
  C: (f, a) => f(...a)
2243
2244
  });
2244
2245
  const entry = this._connections.get(connection.peerId);
2245
2246
  invariant7(entry, void 0, {
2246
2247
  F: __dxlog_file11,
2247
- L: 260,
2248
+ L: 263,
2248
2249
  S: this,
2249
2250
  A: [
2250
2251
  "entry",
@@ -2258,13 +2259,13 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
2258
2259
  this._params.monitor?.recordPeerDisconnected(connection.peerId);
2259
2260
  void entry.reader.cancel().catch((err) => log9.catch(err, void 0, {
2260
2261
  F: __dxlog_file11,
2261
- L: 266,
2262
+ L: 269,
2262
2263
  S: this,
2263
2264
  C: (f, a) => f(...a)
2264
2265
  }));
2265
2266
  void entry.writer.abort().catch((err) => log9.catch(err, void 0, {
2266
2267
  F: __dxlog_file11,
2267
- L: 267,
2268
+ L: 270,
2268
2269
  S: this,
2269
2270
  C: (f, a) => f(...a)
2270
2271
  }));
@@ -2454,6 +2455,7 @@ var AutomergeHost = class extends Resource5 {
2454
2455
  });
2455
2456
  this._echoNetworkAdapter = new EchoNetworkAdapter({
2456
2457
  getContainingSpaceForDocument: this._getContainingSpaceForDocument.bind(this),
2458
+ isDocumentInRemoteCollection: this._isDocumentInRemoteCollection.bind(this),
2457
2459
  onCollectionStateQueried: this._onCollectionStateQueried.bind(this),
2458
2460
  onCollectionStateReceived: this._onCollectionStateReceived.bind(this),
2459
2461
  monitor: dataMonitor
@@ -2561,7 +2563,7 @@ var AutomergeHost = class extends Resource5 {
2561
2563
  await Promise.all(headsToWait.map(async (entry, index) => {
2562
2564
  const handle = await this.loadDoc(Context5.default(void 0, {
2563
2565
  F: __dxlog_file12,
2564
- L: 226
2566
+ L: 227
2565
2567
  }), entry.documentId);
2566
2568
  await waitForHeads(handle, entry.heads);
2567
2569
  }));
@@ -2574,7 +2576,7 @@ var AutomergeHost = class extends Resource5 {
2574
2576
  documentId
2575
2577
  }, {
2576
2578
  F: __dxlog_file12,
2577
- L: 238,
2579
+ L: 239,
2578
2580
  S: this,
2579
2581
  C: (f, a) => f(...a)
2580
2582
  });
@@ -2590,7 +2592,7 @@ var AutomergeHost = class extends Resource5 {
2590
2592
  documentId
2591
2593
  }, {
2592
2594
  F: __dxlog_file12,
2593
- L: 242,
2595
+ L: 243,
2594
2596
  S: this,
2595
2597
  C: (f, a) => f(...a)
2596
2598
  });
@@ -2599,7 +2601,7 @@ var AutomergeHost = class extends Resource5 {
2599
2601
  const doc = handle.docSync();
2600
2602
  invariant8(doc, void 0, {
2601
2603
  F: __dxlog_file12,
2602
- L: 247,
2604
+ L: 248,
2603
2605
  S: this,
2604
2606
  A: [
2605
2607
  "doc",
@@ -2613,7 +2615,7 @@ var AutomergeHost = class extends Resource5 {
2613
2615
  }
2614
2616
  log10.info("done re-indexing heads", void 0, {
2615
2617
  F: __dxlog_file12,
2616
- L: 254,
2618
+ L: 255,
2617
2619
  S: this,
2618
2620
  C: (f, a) => f(...a)
2619
2621
  });
@@ -2685,6 +2687,16 @@ var AutomergeHost = class extends Resource5 {
2685
2687
  _automergePeers() {
2686
2688
  return this._repo.peers;
2687
2689
  }
2690
+ async _isDocumentInRemoteCollection(params) {
2691
+ for (const collectionId of this._collectionSynchronizer.getRegisteredCollectionIds()) {
2692
+ const remoteCollections = this._collectionSynchronizer.getRemoteCollectionStates(collectionId);
2693
+ const remotePeerDocs = remoteCollections.get(params.peerId)?.documents;
2694
+ if (remotePeerDocs && params.documentId in remotePeerDocs) {
2695
+ return true;
2696
+ }
2697
+ }
2698
+ return false;
2699
+ }
2688
2700
  async _getContainingSpaceForDocument(documentId) {
2689
2701
  const doc = this._repo.handles[documentId]?.docSync();
2690
2702
  if (!doc) {
@@ -2799,7 +2811,7 @@ var AutomergeHost = class extends Resource5 {
2799
2811
  count: different.length
2800
2812
  }, {
2801
2813
  F: __dxlog_file12,
2802
- L: 463,
2814
+ L: 475,
2803
2815
  S: this,
2804
2816
  C: (f, a) => f(...a)
2805
2817
  });
@@ -2859,7 +2871,7 @@ var changeIsPresentInDoc = (doc, changeHash) => {
2859
2871
  var decodeCollectionState = (state) => {
2860
2872
  invariant8(typeof state === "object" && state !== null, "Invalid state", {
2861
2873
  F: __dxlog_file12,
2862
- L: 516,
2874
+ L: 528,
2863
2875
  S: void 0,
2864
2876
  A: [
2865
2877
  "typeof state === 'object' && state !== null",
@@ -2879,6 +2891,7 @@ import { log as log12 } from "@dxos/log";
2879
2891
  import { ComplexSet, defaultMap as defaultMap2 } from "@dxos/util";
2880
2892
 
2881
2893
  // packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator-connection.ts
2894
+ import * as A2 from "@dxos/automerge/automerge";
2882
2895
  import { cbor } from "@dxos/automerge/automerge-repo";
2883
2896
  import { Resource as Resource6 } from "@dxos/context";
2884
2897
  import { invariant as invariant9 } from "@dxos/invariant";
@@ -2904,7 +2917,7 @@ var MeshReplicatorConnection = class extends Resource6 {
2904
2917
  write: async (message, controller) => {
2905
2918
  invariant9(this._isEnabled, "Writing to a disabled connection", {
2906
2919
  F: __dxlog_file13,
2907
- L: 48,
2920
+ L: 49,
2908
2921
  S: this,
2909
2922
  A: [
2910
2923
  "this._isEnabled",
@@ -2912,6 +2925,7 @@ var MeshReplicatorConnection = class extends Resource6 {
2912
2925
  ]
2913
2926
  });
2914
2927
  try {
2928
+ logSendSync(message);
2915
2929
  await this.replicatorExtension.sendSyncMessage({
2916
2930
  payload: cbor.encode(message)
2917
2931
  });
@@ -2936,7 +2950,7 @@ var MeshReplicatorConnection = class extends Resource6 {
2936
2950
  remotePeerId: remotePeerId.toHex()
2937
2951
  }, {
2938
2952
  F: __dxlog_file13,
2939
- L: 82,
2953
+ L: 84,
2940
2954
  S: this,
2941
2955
  C: (f, a) => f(...a)
2942
2956
  });
@@ -2963,7 +2977,7 @@ var MeshReplicatorConnection = class extends Resource6 {
2963
2977
  get peerId() {
2964
2978
  invariant9(this._remotePeerId != null, "Remote peer has not connected yet.", {
2965
2979
  F: __dxlog_file13,
2966
- L: 108,
2980
+ L: 110,
2967
2981
  S: this,
2968
2982
  A: [
2969
2983
  "this._remotePeerId != null",
@@ -2985,7 +2999,7 @@ var MeshReplicatorConnection = class extends Resource6 {
2985
2999
  enable() {
2986
3000
  invariant9(this._remotePeerId != null, "Remote peer has not connected yet.", {
2987
3001
  F: __dxlog_file13,
2988
- L: 125,
3002
+ L: 127,
2989
3003
  S: this,
2990
3004
  A: [
2991
3005
  "this._remotePeerId != null",
@@ -3001,6 +3015,26 @@ var MeshReplicatorConnection = class extends Resource6 {
3001
3015
  this._isEnabled = false;
3002
3016
  }
3003
3017
  };
3018
+ var logSendSync = (message) => {
3019
+ log11("sendSyncMessage", () => {
3020
+ const decodedSyncMessage = message.type === "sync" && message.data ? A2.decodeSyncMessage(message.data) : void 0;
3021
+ return {
3022
+ sync: decodedSyncMessage && {
3023
+ headsLength: decodedSyncMessage.heads.length,
3024
+ requesting: decodedSyncMessage.need.length > 0,
3025
+ sendingChanges: decodedSyncMessage.changes.length > 0
3026
+ },
3027
+ type: message.type,
3028
+ from: message.senderId,
3029
+ to: message.targetId
3030
+ };
3031
+ }, {
3032
+ F: __dxlog_file13,
3033
+ L: 140,
3034
+ S: void 0,
3035
+ C: (f, a) => f(...a)
3036
+ });
3037
+ };
3004
3038
 
3005
3039
  // packages/core/echo/echo-pipeline/src/automerge/space-collection.ts
3006
3040
  import { invariant as invariant10 } from "@dxos/invariant";
@@ -3125,16 +3159,21 @@ var MeshEchoReplicator = class {
3125
3159
  try {
3126
3160
  const spaceKey = await this._context.getContainingSpaceForDocument(params.documentId);
3127
3161
  if (!spaceKey) {
3128
- log12("space key not found for share policy check", {
3162
+ const remoteDocumentExists = await this._context.isDocumentInRemoteCollection({
3163
+ documentId: params.documentId,
3164
+ peerId: connection.peerId
3165
+ });
3166
+ log12("document not found locally for share policy check, accepting the remote document", {
3129
3167
  peerId: connection.peerId,
3130
- documentId: params.documentId
3168
+ documentId: params.documentId,
3169
+ remoteDocumentExists
3131
3170
  }, {
3132
3171
  F: __dxlog_file15,
3133
- L: 86,
3172
+ L: 90,
3134
3173
  S: this,
3135
3174
  C: (f, a) => f(...a)
3136
3175
  });
3137
- return false;
3176
+ return remoteDocumentExists;
3138
3177
  }
3139
3178
  const spaceId = await createIdFromSpaceKey(spaceKey);
3140
3179
  const authorizedDevices = this._authorizedDevices.get(spaceId);
@@ -3144,7 +3183,7 @@ var MeshEchoReplicator = class {
3144
3183
  documentId: params.documentId
3145
3184
  }, {
3146
3185
  F: __dxlog_file15,
3147
- L: 98,
3186
+ L: 106,
3148
3187
  S: this,
3149
3188
  C: (f, a) => f(...a)
3150
3189
  });
@@ -3160,7 +3199,7 @@ var MeshEchoReplicator = class {
3160
3199
  isAuthorized
3161
3200
  }, {
3162
3201
  F: __dxlog_file15,
3163
- L: 106,
3202
+ L: 114,
3164
3203
  S: this,
3165
3204
  C: (f, a) => f(...a)
3166
3205
  });
@@ -3168,7 +3207,7 @@ var MeshEchoReplicator = class {
3168
3207
  } catch (err) {
3169
3208
  log12.catch(err, void 0, {
3170
3209
  F: __dxlog_file15,
3171
- L: 116,
3210
+ L: 124,
3172
3211
  S: this,
3173
3212
  C: (f, a) => f(...a)
3174
3213
  });
@@ -3184,7 +3223,7 @@ var MeshEchoReplicator = class {
3184
3223
  collectionId
3185
3224
  }, {
3186
3225
  F: __dxlog_file15,
3187
- L: 126,
3226
+ L: 134,
3188
3227
  S: this,
3189
3228
  C: (f, a) => f(...a)
3190
3229
  });
@@ -3203,7 +3242,7 @@ var MeshEchoReplicator = class {
3203
3242
  deviceKey
3204
3243
  }, {
3205
3244
  F: __dxlog_file15,
3206
- L: 143,
3245
+ L: 151,
3207
3246
  S: this,
3208
3247
  C: (f, a) => f(...a)
3209
3248
  });
@@ -4239,4 +4278,4 @@ export {
4239
4278
  MetadataStore,
4240
4279
  hasInvitationExpired
4241
4280
  };
4242
- //# sourceMappingURL=chunk-LNIQX6PQ.mjs.map
4281
+ //# sourceMappingURL=chunk-P6XSIJKM.mjs.map