@dxos/echo-pipeline 0.8.3 → 0.8.4-main.28f8d3d
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.
- package/dist/lib/browser/{chunk-35I6ERLG.mjs → chunk-2543T5DX.mjs} +224 -145
- package/dist/lib/browser/chunk-2543T5DX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TQJTKNMS.mjs → chunk-VUXUDIPM.mjs} +2 -2
- package/dist/lib/{node/chunk-HOPOFWAL.cjs.map → browser/chunk-VUXUDIPM.mjs.map} +3 -3
- package/dist/lib/browser/filter/index.mjs +1 -1
- package/dist/lib/browser/index.mjs +419 -242
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +42 -17
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-RVK35BS7.mjs → chunk-PGZYXNYE.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-RVK35BS7.mjs.map → chunk-PGZYXNYE.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-5BHLPT24.mjs → chunk-UQI6R3TD.mjs} +224 -145
- package/dist/lib/node-esm/chunk-UQI6R3TD.mjs.map +7 -0
- package/dist/lib/node-esm/filter/index.mjs +1 -1
- package/dist/lib/node-esm/index.mjs +419 -242
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +42 -17
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/automerge/automerge-host.d.ts +1 -1
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/collection-synchronizer.d.ts +1 -1
- package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts +1 -1
- package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts +1 -1
- package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
- package/dist/types/src/automerge/index.d.ts +1 -1
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +1 -1
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
- package/dist/types/src/db-host/data-service.d.ts +2 -2
- package/dist/types/src/db-host/data-service.d.ts.map +1 -1
- package/dist/types/src/db-host/database-root.d.ts.map +1 -1
- package/dist/types/src/db-host/documents-synchronizer.d.ts +2 -2
- package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
- package/dist/types/src/db-host/echo-host.d.ts +2 -2
- package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
- package/dist/types/src/db-host/query-service.d.ts +1 -1
- package/dist/types/src/db-host/query-service.d.ts.map +1 -1
- package/dist/types/src/db-host/space-state-manager.d.ts +1 -1
- package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
- package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
- package/dist/types/src/filter/filter-match.d.ts +1 -1
- package/dist/types/src/filter/filter-match.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/types/src/query/errors.d.ts +19 -6
- package/dist/types/src/query/errors.d.ts.map +1 -1
- package/dist/types/src/query/query-executor.d.ts +1 -1
- package/dist/types/src/query/query-executor.d.ts.map +1 -1
- package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -1
- package/dist/types/src/space/control-pipeline.d.ts +1 -1
- package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +1 -1
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +1 -1
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +1 -1
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -38
- package/src/automerge/automerge-host.test.ts +3 -2
- package/src/automerge/automerge-host.ts +20 -10
- package/src/automerge/automerge-repo.test.ts +67 -16
- package/src/automerge/collection-synchronizer.test.ts +2 -2
- package/src/automerge/collection-synchronizer.ts +2 -2
- package/src/automerge/echo-data-monitor.ts +1 -1
- package/src/automerge/echo-network-adapter.test.ts +3 -3
- package/src/automerge/echo-network-adapter.ts +8 -6
- package/src/automerge/echo-replicator.ts +2 -1
- package/src/automerge/index.ts +1 -1
- package/src/automerge/leveldb-storage-adapter.ts +1 -1
- package/src/automerge/mesh-echo-replicator.ts +2 -1
- package/src/automerge/storage-adapter.test.ts +1 -1
- package/src/common/space-id.ts +1 -1
- package/src/db-host/data-service.ts +8 -7
- package/src/db-host/database-root.ts +2 -2
- package/src/db-host/documents-synchronizer.test.ts +1 -1
- package/src/db-host/documents-synchronizer.ts +39 -26
- package/src/db-host/echo-host.ts +13 -12
- package/src/db-host/query-service.ts +8 -1
- package/src/db-host/space-state-manager.ts +2 -2
- package/src/edge/echo-edge-replicator.test.ts +3 -2
- package/src/edge/echo-edge-replicator.ts +36 -15
- package/src/filter/filter-match.test.ts +2 -2
- package/src/filter/filter-match.ts +1 -1
- package/src/metadata/metadata-store.ts +3 -3
- package/src/pipeline/pipeline-stress.test.ts +4 -2
- package/src/pipeline/pipeline.test.ts +3 -2
- package/src/pipeline/pipeline.ts +8 -5
- package/src/query/query-executor.ts +7 -7
- package/src/query/query-planner.test.ts +2 -1
- package/src/space/admission-discovery-extension.ts +2 -2
- package/src/space/control-pipeline.test.ts +4 -3
- package/src/space/control-pipeline.ts +4 -4
- package/src/space/space-manager.browser.test.ts +1 -1
- package/src/space/space-manager.ts +5 -4
- package/src/space/space-protocol.browser.test.ts +2 -2
- package/src/space/space-protocol.test.ts +3 -2
- package/src/space/space-protocol.ts +6 -3
- package/src/space/space.test.ts +1 -1
- package/src/space/space.ts +3 -2
- package/src/testing/test-agent-builder.ts +4 -3
- package/src/util.ts +1 -1
- package/dist/lib/browser/chunk-35I6ERLG.mjs.map +0 -7
- package/dist/lib/browser/chunk-TQJTKNMS.mjs.map +0 -7
- package/dist/lib/node/chunk-HOPOFWAL.cjs +0 -147
- package/dist/lib/node/chunk-JXX6LF5U.cjs +0 -2084
- package/dist/lib/node/chunk-JXX6LF5U.cjs.map +0 -7
- package/dist/lib/node/chunk-Q7SFCCGT.cjs +0 -33
- package/dist/lib/node/chunk-Q7SFCCGT.cjs.map +0 -7
- package/dist/lib/node/filter/index.cjs +0 -32
- package/dist/lib/node/filter/index.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -4699
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/testing/index.cjs +0 -753
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-5BHLPT24.mjs.map +0 -7
|
@@ -2,7 +2,7 @@ import "@dxos/node-std/globals";
|
|
|
2
2
|
import {
|
|
3
3
|
filterMatchObject,
|
|
4
4
|
filterMatchValue
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-VUXUDIPM.mjs";
|
|
6
6
|
import {
|
|
7
7
|
AuthExtension,
|
|
8
8
|
AuthStatus,
|
|
@@ -25,25 +25,18 @@ import {
|
|
|
25
25
|
mapTimeframeToFeedIndexes,
|
|
26
26
|
startAfter,
|
|
27
27
|
valueEncoding
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-2543T5DX.mjs";
|
|
29
29
|
import "./chunk-CGS2ULMK.mjs";
|
|
30
30
|
|
|
31
|
-
//
|
|
31
|
+
// src/db-host/data-service.ts
|
|
32
32
|
import { UpdateScheduler as UpdateScheduler2 } from "@dxos/async";
|
|
33
33
|
import { Stream } from "@dxos/codec-protobuf/stream";
|
|
34
34
|
import { invariant as invariant7 } from "@dxos/invariant";
|
|
35
35
|
import { SpaceId as SpaceId2 } from "@dxos/keys";
|
|
36
36
|
import { log as log7 } from "@dxos/log";
|
|
37
37
|
|
|
38
|
-
//
|
|
39
|
-
import {
|
|
40
|
-
import { UpdateScheduler } from "@dxos/async";
|
|
41
|
-
import { Resource as Resource5 } from "@dxos/context";
|
|
42
|
-
import { invariant as invariant6 } from "@dxos/invariant";
|
|
43
|
-
import { log as log6 } from "@dxos/log";
|
|
44
|
-
|
|
45
|
-
// packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts
|
|
46
|
-
import { getBackend, getHeads, isAutomerge, equals as headsEquals, save } from "@automerge/automerge";
|
|
38
|
+
// src/automerge/automerge-host.ts
|
|
39
|
+
import { getBackend, getHeads, equals as headsEquals, isAutomerge, save } from "@automerge/automerge";
|
|
47
40
|
import { Repo, interpretAsDocumentId } from "@automerge/automerge-repo";
|
|
48
41
|
import { Event as Event2, asyncTimeout } from "@dxos/async";
|
|
49
42
|
import { Context, Resource as Resource3, cancelWithContext } from "@dxos/context";
|
|
@@ -55,9 +48,9 @@ import { objectPointerCodec } from "@dxos/protocols";
|
|
|
55
48
|
import { trace as trace2 } from "@dxos/tracing";
|
|
56
49
|
import { bufferToArray } from "@dxos/util";
|
|
57
50
|
|
|
58
|
-
//
|
|
51
|
+
// src/automerge/collection-synchronizer.ts
|
|
59
52
|
import { next as am } from "@automerge/automerge";
|
|
60
|
-
import {
|
|
53
|
+
import { Event, asyncReturn, scheduleTask, scheduleTaskInterval } from "@dxos/async";
|
|
61
54
|
import { Resource } from "@dxos/context";
|
|
62
55
|
import { log } from "@dxos/log";
|
|
63
56
|
import { trace } from "@dxos/tracing";
|
|
@@ -68,19 +61,22 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
68
61
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
69
62
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
70
63
|
}
|
|
71
|
-
var __dxlog_file = "/
|
|
64
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/collection-synchronizer.ts";
|
|
72
65
|
var MIN_QUERY_INTERVAL = 5e3;
|
|
73
66
|
var POLL_INTERVAL = 3e4;
|
|
74
67
|
var CollectionSynchronizer = class extends Resource {
|
|
68
|
+
_sendCollectionState;
|
|
69
|
+
_queryCollectionState;
|
|
70
|
+
_shouldSyncCollection;
|
|
71
|
+
/**
|
|
72
|
+
* CollectionId -> State.
|
|
73
|
+
*/
|
|
74
|
+
_perCollectionStates = /* @__PURE__ */ new Map();
|
|
75
|
+
_activeCollections = /* @__PURE__ */ new Set();
|
|
76
|
+
_connectedPeers = /* @__PURE__ */ new Set();
|
|
77
|
+
remoteStateUpdated = new Event();
|
|
75
78
|
constructor(params) {
|
|
76
79
|
super();
|
|
77
|
-
/**
|
|
78
|
-
* CollectionId -> State.
|
|
79
|
-
*/
|
|
80
|
-
this._perCollectionStates = /* @__PURE__ */ new Map();
|
|
81
|
-
this._activeCollections = /* @__PURE__ */ new Set();
|
|
82
|
-
this._connectedPeers = /* @__PURE__ */ new Set();
|
|
83
|
-
this.remoteStateUpdated = new Event();
|
|
84
80
|
this._sendCollectionState = params.sendCollectionState;
|
|
85
81
|
this._queryCollectionState = params.queryCollectionState;
|
|
86
82
|
this._shouldSyncCollection = params.shouldSyncCollection;
|
|
@@ -307,28 +303,37 @@ var getSpanName = (peerId) => {
|
|
|
307
303
|
return `collection-sync-${peerId}`;
|
|
308
304
|
};
|
|
309
305
|
|
|
310
|
-
//
|
|
306
|
+
// src/automerge/echo-network-adapter.ts
|
|
311
307
|
import { NetworkAdapter } from "@automerge/automerge-repo";
|
|
312
|
-
import {
|
|
308
|
+
import { Trigger, synchronized } from "@dxos/async";
|
|
313
309
|
import { LifecycleState } from "@dxos/context";
|
|
314
310
|
import { invariant } from "@dxos/invariant";
|
|
315
311
|
import { log as log2 } from "@dxos/log";
|
|
316
312
|
import { isNonNullable } from "@dxos/util";
|
|
317
313
|
|
|
318
|
-
//
|
|
314
|
+
// src/automerge/network-protocol.ts
|
|
319
315
|
import { MESSAGE_TYPE_COLLECTION_QUERY, MESSAGE_TYPE_COLLECTION_STATE } from "@dxos/protocols";
|
|
320
316
|
var isCollectionQueryMessage = (message) => message.type === MESSAGE_TYPE_COLLECTION_QUERY;
|
|
321
317
|
var isCollectionStateMessage = (message) => message.type === MESSAGE_TYPE_COLLECTION_STATE;
|
|
322
318
|
|
|
323
|
-
//
|
|
319
|
+
// src/automerge/echo-network-adapter.ts
|
|
324
320
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
325
321
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
326
322
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
327
323
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
328
324
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
329
325
|
}
|
|
330
|
-
var __dxlog_file2 = "/
|
|
326
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/echo-network-adapter.ts";
|
|
331
327
|
var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
328
|
+
_params;
|
|
329
|
+
_replicators;
|
|
330
|
+
/**
|
|
331
|
+
* Remote peer id -> connection.
|
|
332
|
+
*/
|
|
333
|
+
_connections;
|
|
334
|
+
_lifecycleState;
|
|
335
|
+
_connected;
|
|
336
|
+
_ready;
|
|
332
337
|
constructor(_params) {
|
|
333
338
|
super(), this._params = _params, this._replicators = /* @__PURE__ */ new Set(), this._connections = /* @__PURE__ */ new Map(), this._lifecycleState = LifecycleState.CLOSED, this._connected = new Trigger(), this._ready = new Trigger();
|
|
334
339
|
}
|
|
@@ -380,7 +385,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
380
385
|
async addReplicator(replicator) {
|
|
381
386
|
invariant(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
382
387
|
F: __dxlog_file2,
|
|
383
|
-
L:
|
|
388
|
+
L: 130,
|
|
384
389
|
S: this,
|
|
385
390
|
A: [
|
|
386
391
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -389,7 +394,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
389
394
|
});
|
|
390
395
|
invariant(this.peerId, void 0, {
|
|
391
396
|
F: __dxlog_file2,
|
|
392
|
-
L:
|
|
397
|
+
L: 131,
|
|
393
398
|
S: this,
|
|
394
399
|
A: [
|
|
395
400
|
"this.peerId",
|
|
@@ -398,7 +403,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
398
403
|
});
|
|
399
404
|
invariant(!this._replicators.has(replicator), void 0, {
|
|
400
405
|
F: __dxlog_file2,
|
|
401
|
-
L:
|
|
406
|
+
L: 132,
|
|
402
407
|
S: this,
|
|
403
408
|
A: [
|
|
404
409
|
"!this._replicators.has(replicator)",
|
|
@@ -422,7 +427,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
422
427
|
async removeReplicator(replicator) {
|
|
423
428
|
invariant(this._lifecycleState === LifecycleState.OPEN, void 0, {
|
|
424
429
|
F: __dxlog_file2,
|
|
425
|
-
L:
|
|
430
|
+
L: 151,
|
|
426
431
|
S: this,
|
|
427
432
|
A: [
|
|
428
433
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -431,7 +436,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
431
436
|
});
|
|
432
437
|
invariant(this._replicators.has(replicator), void 0, {
|
|
433
438
|
F: __dxlog_file2,
|
|
434
|
-
L:
|
|
439
|
+
L: 152,
|
|
435
440
|
S: this,
|
|
436
441
|
A: [
|
|
437
442
|
"this._replicators.has(replicator)",
|
|
@@ -494,7 +499,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
494
499
|
if (connectionEntry.isOpen) {
|
|
495
500
|
log2.catch(err, void 0, {
|
|
496
501
|
F: __dxlog_file2,
|
|
497
|
-
L:
|
|
502
|
+
L: 222,
|
|
498
503
|
S: this,
|
|
499
504
|
C: (f, a) => f(...a)
|
|
500
505
|
});
|
|
@@ -507,13 +512,13 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
507
512
|
peerId: connection.peerId
|
|
508
513
|
}, {
|
|
509
514
|
F: __dxlog_file2,
|
|
510
|
-
L:
|
|
515
|
+
L: 230,
|
|
511
516
|
S: this,
|
|
512
517
|
C: (f, a) => f(...a)
|
|
513
518
|
});
|
|
514
519
|
invariant(!this._connections.has(connection.peerId), void 0, {
|
|
515
520
|
F: __dxlog_file2,
|
|
516
|
-
L:
|
|
521
|
+
L: 231,
|
|
517
522
|
S: this,
|
|
518
523
|
A: [
|
|
519
524
|
"!this._connections.has(connection.peerId as PeerId)",
|
|
@@ -540,7 +545,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
540
545
|
if (connectionEntry.isOpen) {
|
|
541
546
|
log2.catch(err, void 0, {
|
|
542
547
|
F: __dxlog_file2,
|
|
543
|
-
L:
|
|
548
|
+
L: 255,
|
|
544
549
|
S: this,
|
|
545
550
|
C: (f, a) => f(...a)
|
|
546
551
|
});
|
|
@@ -551,7 +556,7 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
551
556
|
peerId: connection.peerId
|
|
552
557
|
}, {
|
|
553
558
|
F: __dxlog_file2,
|
|
554
|
-
L:
|
|
559
|
+
L: 260,
|
|
555
560
|
S: this,
|
|
556
561
|
C: (f, a) => f(...a)
|
|
557
562
|
});
|
|
@@ -573,14 +578,14 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
573
578
|
peerId: connection.peerId
|
|
574
579
|
}, {
|
|
575
580
|
F: __dxlog_file2,
|
|
576
|
-
L:
|
|
581
|
+
L: 277,
|
|
577
582
|
S: this,
|
|
578
583
|
C: (f, a) => f(...a)
|
|
579
584
|
});
|
|
580
585
|
const entry = this._connections.get(connection.peerId);
|
|
581
586
|
invariant(entry, void 0, {
|
|
582
587
|
F: __dxlog_file2,
|
|
583
|
-
L:
|
|
588
|
+
L: 279,
|
|
584
589
|
S: this,
|
|
585
590
|
A: [
|
|
586
591
|
"entry",
|
|
@@ -592,15 +597,15 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
592
597
|
peerId: connection.peerId
|
|
593
598
|
});
|
|
594
599
|
this._params.monitor?.recordPeerDisconnected(connection.peerId);
|
|
595
|
-
void entry.
|
|
600
|
+
void entry.writer.abort().catch((err) => log2.catch(err, void 0, {
|
|
596
601
|
F: __dxlog_file2,
|
|
597
|
-
L:
|
|
602
|
+
L: 285,
|
|
598
603
|
S: this,
|
|
599
604
|
C: (f, a) => f(...a)
|
|
600
605
|
}));
|
|
601
|
-
void entry.
|
|
606
|
+
void entry.reader.cancel().catch((err) => log2.catch(err, void 0, {
|
|
602
607
|
F: __dxlog_file2,
|
|
603
|
-
L:
|
|
608
|
+
L: 286,
|
|
604
609
|
S: this,
|
|
605
610
|
C: (f, a) => f(...a)
|
|
606
611
|
}));
|
|
@@ -615,14 +620,14 @@ var EchoNetworkAdapter = class extends NetworkAdapter {
|
|
|
615
620
|
peerId: connection.peerId
|
|
616
621
|
}, {
|
|
617
622
|
F: __dxlog_file2,
|
|
618
|
-
L:
|
|
623
|
+
L: 296,
|
|
619
624
|
S: this,
|
|
620
625
|
C: (f, a) => f(...a)
|
|
621
626
|
});
|
|
622
627
|
const entry = this._connections.get(connection.peerId);
|
|
623
628
|
invariant(entry, void 0, {
|
|
624
629
|
F: __dxlog_file2,
|
|
625
|
-
L:
|
|
630
|
+
L: 298,
|
|
626
631
|
S: this,
|
|
627
632
|
A: [
|
|
628
633
|
"entry",
|
|
@@ -659,9 +664,10 @@ var createEchoPeerMetadata = () => ({
|
|
|
659
664
|
});
|
|
660
665
|
var isEchoPeerMetadata = (metadata) => metadata?.dxos_peerSource === "EchoNetworkAdapter";
|
|
661
666
|
|
|
662
|
-
//
|
|
667
|
+
// src/automerge/heads-store.ts
|
|
663
668
|
import { headsEncoding } from "@dxos/indexing";
|
|
664
669
|
var HeadsStore = class {
|
|
670
|
+
_db;
|
|
665
671
|
constructor({ db }) {
|
|
666
672
|
this._db = db;
|
|
667
673
|
}
|
|
@@ -681,9 +687,10 @@ var HeadsStore = class {
|
|
|
681
687
|
}
|
|
682
688
|
};
|
|
683
689
|
|
|
684
|
-
//
|
|
690
|
+
// src/automerge/leveldb-storage-adapter.ts
|
|
685
691
|
import { LifecycleState as LifecycleState2, Resource as Resource2 } from "@dxos/context";
|
|
686
692
|
var LevelDBStorageAdapter = class extends Resource2 {
|
|
693
|
+
_params;
|
|
687
694
|
constructor(_params) {
|
|
688
695
|
super(), this._params = _params;
|
|
689
696
|
}
|
|
@@ -786,14 +793,14 @@ var encodingOptions = {
|
|
|
786
793
|
};
|
|
787
794
|
var isLevelDbNotFoundError = (err) => err.code === "LEVEL_NOT_FOUND";
|
|
788
795
|
|
|
789
|
-
//
|
|
796
|
+
// src/automerge/automerge-host.ts
|
|
790
797
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
791
798
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
792
799
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
793
800
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
794
801
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
795
802
|
}
|
|
796
|
-
var __dxlog_file3 = "/
|
|
803
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts";
|
|
797
804
|
var FIND_PARAMS = {
|
|
798
805
|
allowableStates: [
|
|
799
806
|
"ready",
|
|
@@ -801,18 +808,27 @@ var FIND_PARAMS = {
|
|
|
801
808
|
]
|
|
802
809
|
};
|
|
803
810
|
var AutomergeHost = class extends Resource3 {
|
|
811
|
+
_db;
|
|
812
|
+
_indexMetadataStore;
|
|
813
|
+
_echoNetworkAdapter;
|
|
814
|
+
_collectionSynchronizer = new CollectionSynchronizer({
|
|
815
|
+
queryCollectionState: this._queryCollectionState.bind(this),
|
|
816
|
+
sendCollectionState: this._sendCollectionState.bind(this),
|
|
817
|
+
shouldSyncCollection: this._shouldSyncCollection.bind(this)
|
|
818
|
+
});
|
|
819
|
+
_repo;
|
|
820
|
+
_storage;
|
|
821
|
+
_headsStore;
|
|
822
|
+
_peerId;
|
|
823
|
+
_peerIdProvider;
|
|
824
|
+
_getSpaceKeyByRootDocumentId;
|
|
825
|
+
collectionStateUpdated = new Event2();
|
|
826
|
+
/**
|
|
827
|
+
* Fired after a batch of documents was saved to disk.
|
|
828
|
+
*/
|
|
829
|
+
documentsSaved = new Event2();
|
|
804
830
|
constructor({ db, indexMetadataStore, dataMonitor, peerIdProvider, getSpaceKeyByRootDocumentId }) {
|
|
805
831
|
super();
|
|
806
|
-
this._collectionSynchronizer = new CollectionSynchronizer({
|
|
807
|
-
queryCollectionState: this._queryCollectionState.bind(this),
|
|
808
|
-
sendCollectionState: this._sendCollectionState.bind(this),
|
|
809
|
-
shouldSyncCollection: this._shouldSyncCollection.bind(this)
|
|
810
|
-
});
|
|
811
|
-
this.collectionStateUpdated = new Event2();
|
|
812
|
-
/**
|
|
813
|
-
* Fired after a batch of documents was saved to disk.
|
|
814
|
-
*/
|
|
815
|
-
this.documentsSaved = new Event2();
|
|
816
832
|
this._db = db;
|
|
817
833
|
this._storage = new LevelDBStorageAdapter({
|
|
818
834
|
db: db.sublevel("automerge"),
|
|
@@ -1173,6 +1189,14 @@ var AutomergeHost = class extends Resource3 {
|
|
|
1173
1189
|
this._collectionSynchronizer.setLocalCollectionState(collectionId, {
|
|
1174
1190
|
documents
|
|
1175
1191
|
});
|
|
1192
|
+
const interestedPeers = this._echoNetworkAdapter.getPeersInterestedInCollection(collectionId);
|
|
1193
|
+
if (interestedPeers.length > 0) {
|
|
1194
|
+
for (const peerId of interestedPeers) {
|
|
1195
|
+
this._sendCollectionState(collectionId, peerId, {
|
|
1196
|
+
documents
|
|
1197
|
+
});
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1176
1200
|
}
|
|
1177
1201
|
async clearLocalCollectionState(collectionId) {
|
|
1178
1202
|
this._collectionSynchronizer.clearLocalCollectionState(collectionId);
|
|
@@ -1217,7 +1241,7 @@ var AutomergeHost = class extends Resource3 {
|
|
|
1217
1241
|
count: toReplicate.length
|
|
1218
1242
|
}, {
|
|
1219
1243
|
F: __dxlog_file3,
|
|
1220
|
-
L:
|
|
1244
|
+
L: 573,
|
|
1221
1245
|
S: this,
|
|
1222
1246
|
C: (f, a) => f(...a)
|
|
1223
1247
|
});
|
|
@@ -1277,7 +1301,7 @@ var changeIsPresentInDoc = (doc, changeHash) => {
|
|
|
1277
1301
|
var decodeCollectionState = (state) => {
|
|
1278
1302
|
invariant2(typeof state === "object" && state !== null, "Invalid state", {
|
|
1279
1303
|
F: __dxlog_file3,
|
|
1280
|
-
L:
|
|
1304
|
+
L: 624,
|
|
1281
1305
|
S: void 0,
|
|
1282
1306
|
A: [
|
|
1283
1307
|
"typeof state === 'object' && state !== null",
|
|
@@ -1290,22 +1314,29 @@ var encodeCollectionState = (state) => {
|
|
|
1290
1314
|
return state;
|
|
1291
1315
|
};
|
|
1292
1316
|
|
|
1293
|
-
//
|
|
1317
|
+
// src/automerge/mesh-echo-replicator.ts
|
|
1294
1318
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1295
1319
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
1296
1320
|
import { log as log5 } from "@dxos/log";
|
|
1297
1321
|
import { ComplexSet, defaultMap as defaultMap2 } from "@dxos/util";
|
|
1298
1322
|
|
|
1299
|
-
//
|
|
1323
|
+
// src/automerge/mesh-echo-replicator-connection.ts
|
|
1300
1324
|
import * as A from "@automerge/automerge";
|
|
1301
1325
|
import { cbor } from "@automerge/automerge-repo";
|
|
1302
1326
|
import { Resource as Resource4 } from "@dxos/context";
|
|
1303
1327
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
1304
1328
|
import { log as log4 } from "@dxos/log";
|
|
1305
1329
|
import { AutomergeReplicator } from "@dxos/teleport-extension-automerge-replicator";
|
|
1306
|
-
var __dxlog_file4 = "/
|
|
1330
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator-connection.ts";
|
|
1307
1331
|
var DEFAULT_FACTORY = (params) => new AutomergeReplicator(...params);
|
|
1308
1332
|
var MeshReplicatorConnection = class extends Resource4 {
|
|
1333
|
+
_params;
|
|
1334
|
+
readable;
|
|
1335
|
+
writable;
|
|
1336
|
+
remoteDeviceKey;
|
|
1337
|
+
replicatorExtension;
|
|
1338
|
+
_remotePeerId;
|
|
1339
|
+
_isEnabled;
|
|
1309
1340
|
constructor(_params) {
|
|
1310
1341
|
super(), this._params = _params, this.remoteDeviceKey = null, this._remotePeerId = null, this._isEnabled = false;
|
|
1311
1342
|
let readableStreamController;
|
|
@@ -1441,10 +1472,10 @@ var logSendSync = (message) => {
|
|
|
1441
1472
|
});
|
|
1442
1473
|
};
|
|
1443
1474
|
|
|
1444
|
-
//
|
|
1475
|
+
// src/automerge/space-collection.ts
|
|
1445
1476
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
1446
1477
|
import { SpaceId } from "@dxos/keys";
|
|
1447
|
-
var __dxlog_file5 = "/
|
|
1478
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/space-collection.ts";
|
|
1448
1479
|
var deriveCollectionIdFromSpaceId = (spaceId, rootDocumentId) => rootDocumentId ? `space:${spaceId}:${rootDocumentId}` : `space:${spaceId}`;
|
|
1449
1480
|
var getSpaceIdFromCollectionId = (collectionId) => {
|
|
1450
1481
|
const spaceId = collectionId.split(":")[1];
|
|
@@ -1460,27 +1491,25 @@ var getSpaceIdFromCollectionId = (collectionId) => {
|
|
|
1460
1491
|
return spaceId;
|
|
1461
1492
|
};
|
|
1462
1493
|
|
|
1463
|
-
//
|
|
1464
|
-
var __dxlog_file6 = "/
|
|
1494
|
+
// src/automerge/mesh-echo-replicator.ts
|
|
1495
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/automerge/mesh-echo-replicator.ts";
|
|
1465
1496
|
var MeshEchoReplicator = class {
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
this._context = null;
|
|
1483
|
-
}
|
|
1497
|
+
/**
|
|
1498
|
+
* We might have multiple connections open with a peer (one per space), but there'll be only one enabled
|
|
1499
|
+
* connection at any given moment, because there's a single repo for all the spaces.
|
|
1500
|
+
* When a connection closes (space was closed) it gets removed from the list and the next connection
|
|
1501
|
+
* in the line gets enabled.
|
|
1502
|
+
*/
|
|
1503
|
+
_connectionsPerPeer = /* @__PURE__ */ new Map();
|
|
1504
|
+
/**
|
|
1505
|
+
* A set of all connections (enabled and disabled).
|
|
1506
|
+
*/
|
|
1507
|
+
_connections = /* @__PURE__ */ new Set();
|
|
1508
|
+
/**
|
|
1509
|
+
* spaceId -> deviceKey[]
|
|
1510
|
+
*/
|
|
1511
|
+
_authorizedDevices = /* @__PURE__ */ new Map();
|
|
1512
|
+
_context = null;
|
|
1484
1513
|
async connect(context) {
|
|
1485
1514
|
this._context = context;
|
|
1486
1515
|
}
|
|
@@ -1500,7 +1529,7 @@ var MeshEchoReplicator = class {
|
|
|
1500
1529
|
createExtension(extensionFactory) {
|
|
1501
1530
|
invariant5(this._context, void 0, {
|
|
1502
1531
|
F: __dxlog_file6,
|
|
1503
|
-
L:
|
|
1532
|
+
L: 68,
|
|
1504
1533
|
S: this,
|
|
1505
1534
|
A: [
|
|
1506
1535
|
"this._context",
|
|
@@ -1515,13 +1544,13 @@ var MeshEchoReplicator = class {
|
|
|
1515
1544
|
peerId: connection.peerId
|
|
1516
1545
|
}, {
|
|
1517
1546
|
F: __dxlog_file6,
|
|
1518
|
-
L:
|
|
1547
|
+
L: 74,
|
|
1519
1548
|
S: this,
|
|
1520
1549
|
C: (f, a) => f(...a)
|
|
1521
1550
|
});
|
|
1522
1551
|
invariant5(this._context, void 0, {
|
|
1523
1552
|
F: __dxlog_file6,
|
|
1524
|
-
L:
|
|
1553
|
+
L: 75,
|
|
1525
1554
|
S: this,
|
|
1526
1555
|
A: [
|
|
1527
1556
|
"this._context",
|
|
@@ -1546,7 +1575,7 @@ var MeshEchoReplicator = class {
|
|
|
1546
1575
|
peerId: connection.peerId
|
|
1547
1576
|
}, {
|
|
1548
1577
|
F: __dxlog_file6,
|
|
1549
|
-
L:
|
|
1578
|
+
L: 89,
|
|
1550
1579
|
S: this,
|
|
1551
1580
|
C: (f, a) => f(...a)
|
|
1552
1581
|
});
|
|
@@ -1558,7 +1587,7 @@ var MeshEchoReplicator = class {
|
|
|
1558
1587
|
peerId: connection.peerId
|
|
1559
1588
|
}, {
|
|
1560
1589
|
F: __dxlog_file6,
|
|
1561
|
-
L:
|
|
1590
|
+
L: 97,
|
|
1562
1591
|
S: this,
|
|
1563
1592
|
C: (f, a) => f(...a)
|
|
1564
1593
|
});
|
|
@@ -1580,13 +1609,13 @@ var MeshEchoReplicator = class {
|
|
|
1580
1609
|
documentId: params.documentId
|
|
1581
1610
|
}, {
|
|
1582
1611
|
F: __dxlog_file6,
|
|
1583
|
-
L:
|
|
1612
|
+
L: 115,
|
|
1584
1613
|
S: this,
|
|
1585
1614
|
C: (f, a) => f(...a)
|
|
1586
1615
|
});
|
|
1587
1616
|
invariant5(this._context, void 0, {
|
|
1588
1617
|
F: __dxlog_file6,
|
|
1589
|
-
L:
|
|
1618
|
+
L: 116,
|
|
1590
1619
|
S: this,
|
|
1591
1620
|
A: [
|
|
1592
1621
|
"this._context",
|
|
@@ -1606,7 +1635,7 @@ var MeshEchoReplicator = class {
|
|
|
1606
1635
|
acceptDocument: remoteDocumentExists
|
|
1607
1636
|
}, {
|
|
1608
1637
|
F: __dxlog_file6,
|
|
1609
|
-
L:
|
|
1638
|
+
L: 124,
|
|
1610
1639
|
S: this,
|
|
1611
1640
|
C: (f, a) => f(...a)
|
|
1612
1641
|
});
|
|
@@ -1620,7 +1649,7 @@ var MeshEchoReplicator = class {
|
|
|
1620
1649
|
documentId: params.documentId
|
|
1621
1650
|
}, {
|
|
1622
1651
|
F: __dxlog_file6,
|
|
1623
|
-
L:
|
|
1652
|
+
L: 141,
|
|
1624
1653
|
S: this,
|
|
1625
1654
|
C: (f, a) => f(...a)
|
|
1626
1655
|
});
|
|
@@ -1636,7 +1665,7 @@ var MeshEchoReplicator = class {
|
|
|
1636
1665
|
isAuthorized
|
|
1637
1666
|
}, {
|
|
1638
1667
|
F: __dxlog_file6,
|
|
1639
|
-
L:
|
|
1668
|
+
L: 149,
|
|
1640
1669
|
S: this,
|
|
1641
1670
|
C: (f, a) => f(...a)
|
|
1642
1671
|
});
|
|
@@ -1644,7 +1673,7 @@ var MeshEchoReplicator = class {
|
|
|
1644
1673
|
} catch (err) {
|
|
1645
1674
|
log5.catch(err, void 0, {
|
|
1646
1675
|
F: __dxlog_file6,
|
|
1647
|
-
L:
|
|
1676
|
+
L: 159,
|
|
1648
1677
|
S: this,
|
|
1649
1678
|
C: (f, a) => f(...a)
|
|
1650
1679
|
});
|
|
@@ -1660,7 +1689,7 @@ var MeshEchoReplicator = class {
|
|
|
1660
1689
|
collectionId
|
|
1661
1690
|
}, {
|
|
1662
1691
|
F: __dxlog_file6,
|
|
1663
|
-
L:
|
|
1692
|
+
L: 169,
|
|
1664
1693
|
S: this,
|
|
1665
1694
|
C: (f, a) => f(...a)
|
|
1666
1695
|
});
|
|
@@ -1679,7 +1708,7 @@ var MeshEchoReplicator = class {
|
|
|
1679
1708
|
deviceKey
|
|
1680
1709
|
}, {
|
|
1681
1710
|
F: __dxlog_file6,
|
|
1682
|
-
L:
|
|
1711
|
+
L: 186,
|
|
1683
1712
|
S: this,
|
|
1684
1713
|
C: (f, a) => f(...a)
|
|
1685
1714
|
});
|
|
@@ -1695,9 +1724,9 @@ var MeshEchoReplicator = class {
|
|
|
1695
1724
|
}
|
|
1696
1725
|
};
|
|
1697
1726
|
|
|
1698
|
-
//
|
|
1727
|
+
// src/automerge/echo-data-monitor.ts
|
|
1699
1728
|
import { trace as trace3 } from "@dxos/tracing";
|
|
1700
|
-
import { CircularBuffer,
|
|
1729
|
+
import { CircularBuffer, SlidingWindowSummary, mapValues } from "@dxos/util";
|
|
1701
1730
|
function _ts_decorate4(decorators, target, key, desc) {
|
|
1702
1731
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1703
1732
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -1707,6 +1736,17 @@ function _ts_decorate4(decorators, target, key, desc) {
|
|
|
1707
1736
|
var PER_SECOND_RATE_AVG_WINDOW_SIZE = 5;
|
|
1708
1737
|
var DEFAULT_AVG_WINDOW_SIZE = 25;
|
|
1709
1738
|
var EchoDataMonitor = class {
|
|
1739
|
+
_params;
|
|
1740
|
+
_lastTick;
|
|
1741
|
+
_activeCounters;
|
|
1742
|
+
_lastCompleteCounters;
|
|
1743
|
+
_localTimeSeries;
|
|
1744
|
+
_storageAverages;
|
|
1745
|
+
_replicationAverages;
|
|
1746
|
+
_sizeByMessage;
|
|
1747
|
+
_lastReceivedMessages;
|
|
1748
|
+
_lastSentMessages;
|
|
1749
|
+
_connectionsCount;
|
|
1710
1750
|
constructor(_params = {
|
|
1711
1751
|
timeSeriesLength: 30
|
|
1712
1752
|
}) {
|
|
@@ -2056,20 +2096,38 @@ var getByteCount = (message) => {
|
|
|
2056
2096
|
return message.type.length + message.senderId.length + message.targetId.length + (message.data?.byteLength ?? 0) + (message.documentId?.length ?? 0);
|
|
2057
2097
|
};
|
|
2058
2098
|
|
|
2059
|
-
//
|
|
2060
|
-
|
|
2099
|
+
// src/db-host/documents-synchronizer.ts
|
|
2100
|
+
import { next as A2 } from "@automerge/automerge";
|
|
2101
|
+
import { UpdateScheduler, sleep } from "@dxos/async";
|
|
2102
|
+
import { LifecycleState as LifecycleState3, Resource as Resource5, cancelWithContext as cancelWithContext2 } from "@dxos/context";
|
|
2103
|
+
import { invariant as invariant6 } from "@dxos/invariant";
|
|
2104
|
+
import { log as log6 } from "@dxos/log";
|
|
2105
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/documents-synchronizer.ts";
|
|
2061
2106
|
var MAX_UPDATE_FREQ = 10;
|
|
2107
|
+
var WRAP_AROUND_RETRY_LIMIT = 3;
|
|
2108
|
+
var WRAP_AROUND_RETRY_INITIAL_DELAY = 100;
|
|
2062
2109
|
var DocumentsSynchronizer = class extends Resource5 {
|
|
2110
|
+
_params;
|
|
2111
|
+
_syncStates;
|
|
2112
|
+
/**
|
|
2113
|
+
* Documents that have pending updates.
|
|
2114
|
+
* Used to batch updates.
|
|
2115
|
+
*/
|
|
2116
|
+
_pendingUpdates;
|
|
2117
|
+
/**
|
|
2118
|
+
* Job that schedules if there are pending updates.
|
|
2119
|
+
*/
|
|
2120
|
+
_sendUpdatesJob;
|
|
2063
2121
|
constructor(_params) {
|
|
2064
2122
|
super(), this._params = _params, this._syncStates = /* @__PURE__ */ new Map(), this._pendingUpdates = /* @__PURE__ */ new Set(), this._sendUpdatesJob = void 0;
|
|
2065
2123
|
}
|
|
2066
|
-
addDocuments(documentIds, retryCounter = 0) {
|
|
2067
|
-
if (retryCounter >
|
|
2124
|
+
addDocuments(documentIds, retryCounter = 0, wrapAroundRetryDelay = WRAP_AROUND_RETRY_INITIAL_DELAY) {
|
|
2125
|
+
if (retryCounter > WRAP_AROUND_RETRY_LIMIT) {
|
|
2068
2126
|
log6.warn("Failed to load document, retry limit reached", {
|
|
2069
2127
|
documentIds
|
|
2070
2128
|
}, {
|
|
2071
2129
|
F: __dxlog_file7,
|
|
2072
|
-
L:
|
|
2130
|
+
L: 57,
|
|
2073
2131
|
S: this,
|
|
2074
2132
|
C: (f, a) => f(...a)
|
|
2075
2133
|
});
|
|
@@ -2087,13 +2145,13 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2087
2145
|
error
|
|
2088
2146
|
}, {
|
|
2089
2147
|
F: __dxlog_file7,
|
|
2090
|
-
L:
|
|
2148
|
+
L: 71,
|
|
2091
2149
|
S: this,
|
|
2092
2150
|
C: (f, a) => f(...a)
|
|
2093
2151
|
});
|
|
2094
|
-
this.addDocuments([
|
|
2152
|
+
void cancelWithContext2(this._ctx, sleep(wrapAroundRetryDelay)).then(() => this.addDocuments([
|
|
2095
2153
|
documentId
|
|
2096
|
-
], retryCounter + 1);
|
|
2154
|
+
], retryCounter + 1, wrapAroundRetryDelay * 2));
|
|
2097
2155
|
});
|
|
2098
2156
|
}
|
|
2099
2157
|
}
|
|
@@ -2115,14 +2173,9 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2115
2173
|
}
|
|
2116
2174
|
async update(updates) {
|
|
2117
2175
|
for (const { documentId, mutation, isNew } of updates) {
|
|
2118
|
-
|
|
2119
|
-
const doc = await this._params.repo.find(documentId, FIND_PARAMS);
|
|
2120
|
-
doc.update((doc2) => A2.loadIncremental(doc2, mutation));
|
|
2121
|
-
this._startSync(doc);
|
|
2122
|
-
} else {
|
|
2123
|
-
this._writeMutation(documentId, mutation);
|
|
2124
|
-
}
|
|
2176
|
+
this._writeMutation(documentId, mutation, isNew);
|
|
2125
2177
|
}
|
|
2178
|
+
await this._params.repo.flush(updates.map(({ documentId }) => documentId));
|
|
2126
2179
|
}
|
|
2127
2180
|
_startSync(doc) {
|
|
2128
2181
|
if (this._syncStates.has(doc.documentId)) {
|
|
@@ -2130,7 +2183,7 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2130
2183
|
documentId: doc.documentId
|
|
2131
2184
|
}, {
|
|
2132
2185
|
F: __dxlog_file7,
|
|
2133
|
-
L:
|
|
2186
|
+
L: 108,
|
|
2134
2187
|
S: this,
|
|
2135
2188
|
C: (f, a) => f(...a)
|
|
2136
2189
|
});
|
|
@@ -2141,6 +2194,7 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2141
2194
|
};
|
|
2142
2195
|
this._subscribeForChanges(syncState);
|
|
2143
2196
|
this._syncStates.set(doc.documentId, syncState);
|
|
2197
|
+
return syncState;
|
|
2144
2198
|
}
|
|
2145
2199
|
_subscribeForChanges(syncState) {
|
|
2146
2200
|
const handler = () => {
|
|
@@ -2173,7 +2227,7 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2173
2227
|
const syncState = this._syncStates.get(documentId);
|
|
2174
2228
|
invariant6(syncState, "Sync state for document not found", {
|
|
2175
2229
|
F: __dxlog_file7,
|
|
2176
|
-
L:
|
|
2230
|
+
L: 150,
|
|
2177
2231
|
S: this,
|
|
2178
2232
|
A: [
|
|
2179
2233
|
"syncState",
|
|
@@ -2192,37 +2246,50 @@ var DocumentsSynchronizer = class extends Resource5 {
|
|
|
2192
2246
|
syncState.lastSentHead = A2.getHeads(doc);
|
|
2193
2247
|
return mutation;
|
|
2194
2248
|
}
|
|
2195
|
-
_writeMutation(documentId, mutation) {
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
}
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2249
|
+
_writeMutation(documentId, mutation, isNew) {
|
|
2250
|
+
if (this._lifecycleState === LifecycleState3.CLOSED) {
|
|
2251
|
+
return;
|
|
2252
|
+
}
|
|
2253
|
+
if (isNew) {
|
|
2254
|
+
const newHandle = this._params.repo.import(mutation, {
|
|
2255
|
+
docId: documentId
|
|
2256
|
+
});
|
|
2257
|
+
const syncState = this._startSync(newHandle);
|
|
2258
|
+
syncState.lastSentHead = A2.getHeads(newHandle.doc());
|
|
2259
|
+
} else {
|
|
2260
|
+
const syncState = this._syncStates.get(documentId);
|
|
2261
|
+
invariant6(syncState, "Sync state for document not found", {
|
|
2262
|
+
F: __dxlog_file7,
|
|
2263
|
+
L: 174,
|
|
2264
|
+
S: this,
|
|
2265
|
+
A: [
|
|
2266
|
+
"syncState",
|
|
2267
|
+
"'Sync state for document not found'"
|
|
2268
|
+
]
|
|
2269
|
+
});
|
|
2270
|
+
const headsBefore = A2.getHeads(syncState.handle.doc());
|
|
2271
|
+
this._params.repo.import(mutation, {
|
|
2272
|
+
docId: documentId
|
|
2273
|
+
});
|
|
2209
2274
|
if (A2.equals(headsBefore, syncState.lastSentHead)) {
|
|
2210
|
-
syncState.lastSentHead = A2.getHeads(
|
|
2275
|
+
syncState.lastSentHead = A2.getHeads(syncState.handle.doc());
|
|
2211
2276
|
}
|
|
2212
|
-
|
|
2213
|
-
});
|
|
2277
|
+
}
|
|
2214
2278
|
}
|
|
2215
2279
|
};
|
|
2216
2280
|
|
|
2217
|
-
//
|
|
2218
|
-
var __dxlog_file8 = "/
|
|
2281
|
+
// src/db-host/data-service.ts
|
|
2282
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/data-service.ts";
|
|
2219
2283
|
var DataServiceImpl = class {
|
|
2284
|
+
/**
|
|
2285
|
+
* Map of subscriptions.
|
|
2286
|
+
* subscriptionId -> DocumentsSynchronizer
|
|
2287
|
+
*/
|
|
2288
|
+
_subscriptions = /* @__PURE__ */ new Map();
|
|
2289
|
+
_automergeHost;
|
|
2290
|
+
_spaceStateManager;
|
|
2291
|
+
_updateIndexes;
|
|
2220
2292
|
constructor(params) {
|
|
2221
|
-
/**
|
|
2222
|
-
* Map of subscriptions.
|
|
2223
|
-
* subscriptionId -> DocumentsSynchronizer
|
|
2224
|
-
*/
|
|
2225
|
-
this._subscriptions = /* @__PURE__ */ new Map();
|
|
2226
2293
|
this._automergeHost = params.automergeHost;
|
|
2227
2294
|
this._spaceStateManager = params.spaceStateManager;
|
|
2228
2295
|
this._updateIndexes = params.updateIndexes;
|
|
@@ -2238,7 +2305,7 @@ var DataServiceImpl = class {
|
|
|
2238
2305
|
ready();
|
|
2239
2306
|
}).catch((err) => log7.catch(err, void 0, {
|
|
2240
2307
|
F: __dxlog_file8,
|
|
2241
|
-
L:
|
|
2308
|
+
L: 72,
|
|
2242
2309
|
S: this,
|
|
2243
2310
|
C: (f, a) => f(...a)
|
|
2244
2311
|
}));
|
|
@@ -2249,7 +2316,7 @@ var DataServiceImpl = class {
|
|
|
2249
2316
|
const synchronizer = this._subscriptions.get(request.subscriptionId);
|
|
2250
2317
|
invariant7(synchronizer, "Subscription not found", {
|
|
2251
2318
|
F: __dxlog_file8,
|
|
2252
|
-
L:
|
|
2319
|
+
L: 79,
|
|
2253
2320
|
S: this,
|
|
2254
2321
|
A: [
|
|
2255
2322
|
"synchronizer",
|
|
@@ -2270,7 +2337,7 @@ var DataServiceImpl = class {
|
|
|
2270
2337
|
const synchronizer = this._subscriptions.get(request.subscriptionId);
|
|
2271
2338
|
invariant7(synchronizer, "Subscription not found", {
|
|
2272
2339
|
F: __dxlog_file8,
|
|
2273
|
-
L:
|
|
2340
|
+
L: 94,
|
|
2274
2341
|
S: this,
|
|
2275
2342
|
A: [
|
|
2276
2343
|
"synchronizer",
|
|
@@ -2315,7 +2382,7 @@ var DataServiceImpl = class {
|
|
|
2315
2382
|
const spaceId = request.spaceId;
|
|
2316
2383
|
invariant7(SpaceId2.isValid(spaceId), void 0, {
|
|
2317
2384
|
F: __dxlog_file8,
|
|
2318
|
-
L:
|
|
2385
|
+
L: 134,
|
|
2319
2386
|
S: this,
|
|
2320
2387
|
A: [
|
|
2321
2388
|
"SpaceId.isValid(spaceId)",
|
|
@@ -2356,23 +2423,23 @@ var DataServiceImpl = class {
|
|
|
2356
2423
|
}
|
|
2357
2424
|
};
|
|
2358
2425
|
|
|
2359
|
-
//
|
|
2360
|
-
import { LifecycleState as
|
|
2426
|
+
// src/db-host/echo-host.ts
|
|
2427
|
+
import { LifecycleState as LifecycleState6, Resource as Resource9 } from "@dxos/context";
|
|
2361
2428
|
import { todo } from "@dxos/debug";
|
|
2362
|
-
import {
|
|
2429
|
+
import { SpaceDocVersion as SpaceDocVersion3, createIdFromSpaceKey as createIdFromSpaceKey2 } from "@dxos/echo-protocol";
|
|
2363
2430
|
import { IndexMetadataStore, IndexStore, Indexer } from "@dxos/indexing";
|
|
2364
2431
|
import { invariant as invariant13 } from "@dxos/invariant";
|
|
2365
2432
|
import { IndexKind } from "@dxos/protocols/proto/dxos/echo/indexing";
|
|
2366
2433
|
import { trace as trace5 } from "@dxos/tracing";
|
|
2367
2434
|
|
|
2368
|
-
//
|
|
2435
|
+
// src/db-host/documents-iterator.ts
|
|
2369
2436
|
import * as A3 from "@automerge/automerge";
|
|
2370
2437
|
import { Context as Context2 } from "@dxos/context";
|
|
2371
2438
|
import { DatabaseDirectory as DatabaseDirectory2, SpaceDocVersion } from "@dxos/echo-protocol";
|
|
2372
2439
|
import { invariant as invariant8 } from "@dxos/invariant";
|
|
2373
2440
|
import { log as log8 } from "@dxos/log";
|
|
2374
2441
|
import { ObjectPointerVersion, objectPointerCodec as objectPointerCodec2 } from "@dxos/protocols";
|
|
2375
|
-
var __dxlog_file9 = "/
|
|
2442
|
+
var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/documents-iterator.ts";
|
|
2376
2443
|
var LOG_VIEW_OPERATION_THRESHOLD = 300;
|
|
2377
2444
|
var createSelectedDocumentsIterator = (automergeHost) => (
|
|
2378
2445
|
/**
|
|
@@ -2453,7 +2520,7 @@ var createSelectedDocumentsIterator = (automergeHost) => (
|
|
|
2453
2520
|
}
|
|
2454
2521
|
);
|
|
2455
2522
|
|
|
2456
|
-
//
|
|
2523
|
+
// src/db-host/query-service.ts
|
|
2457
2524
|
import { getHeads as getHeads3 } from "@automerge/automerge";
|
|
2458
2525
|
import { Schema } from "effect";
|
|
2459
2526
|
import { DeferredTask, scheduleMicroTask, synchronized as synchronized2 } from "@dxos/async";
|
|
@@ -2465,10 +2532,10 @@ import { log as log10 } from "@dxos/log";
|
|
|
2465
2532
|
import { objectPointerCodec as objectPointerCodec4 } from "@dxos/protocols";
|
|
2466
2533
|
import { trace as trace4 } from "@dxos/tracing";
|
|
2467
2534
|
|
|
2468
|
-
//
|
|
2535
|
+
// src/query/query-executor.ts
|
|
2469
2536
|
import { Match } from "effect";
|
|
2470
|
-
import { Context as Context3, ContextDisposedError, LifecycleState as
|
|
2471
|
-
import { DatabaseDirectory as DatabaseDirectory3,
|
|
2537
|
+
import { Context as Context3, ContextDisposedError, LifecycleState as LifecycleState4, Resource as Resource6 } from "@dxos/context";
|
|
2538
|
+
import { DatabaseDirectory as DatabaseDirectory3, ObjectStructure, isEncodedReference } from "@dxos/echo-protocol";
|
|
2472
2539
|
import { EscapedPropPath } from "@dxos/indexing";
|
|
2473
2540
|
import { invariant as invariant10 } from "@dxos/invariant";
|
|
2474
2541
|
import { DXN, PublicKey as PublicKey3 } from "@dxos/keys";
|
|
@@ -2476,15 +2543,15 @@ import { log as log9 } from "@dxos/log";
|
|
|
2476
2543
|
import { objectPointerCodec as objectPointerCodec3 } from "@dxos/protocols";
|
|
2477
2544
|
import { getDeep, isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
2478
2545
|
|
|
2479
|
-
//
|
|
2546
|
+
// src/query/query-planner.ts
|
|
2480
2547
|
import { invariant as invariant9 } from "@dxos/invariant";
|
|
2481
2548
|
|
|
2482
|
-
//
|
|
2549
|
+
// src/query/errors.ts
|
|
2483
2550
|
import { BaseError } from "@dxos/errors";
|
|
2484
2551
|
var QueryError = class extends BaseError.extend("QUERY_ERROR") {
|
|
2485
2552
|
};
|
|
2486
2553
|
|
|
2487
|
-
//
|
|
2554
|
+
// src/query/plan.ts
|
|
2488
2555
|
(function(QueryPlan2) {
|
|
2489
2556
|
QueryPlan2.Plan = Object.freeze({
|
|
2490
2557
|
make: (steps) => ({
|
|
@@ -2505,12 +2572,13 @@ var QueryError = class extends BaseError.extend("QUERY_ERROR") {
|
|
|
2505
2572
|
})(QueryPlan || (QueryPlan = {}));
|
|
2506
2573
|
var QueryPlan;
|
|
2507
2574
|
|
|
2508
|
-
//
|
|
2509
|
-
var __dxlog_file10 = "/
|
|
2575
|
+
// src/query/query-planner.ts
|
|
2576
|
+
var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/query/query-planner.ts";
|
|
2510
2577
|
var DEFAULT_OPTIONS = {
|
|
2511
2578
|
defaultTextSearchKind: "full-text"
|
|
2512
2579
|
};
|
|
2513
2580
|
var QueryPlanner = class {
|
|
2581
|
+
_options;
|
|
2514
2582
|
constructor(options) {
|
|
2515
2583
|
this._options = {
|
|
2516
2584
|
...DEFAULT_OPTIONS,
|
|
@@ -2950,8 +3018,8 @@ var isTrivialTypenameFilter = (filter) => {
|
|
|
2950
3018
|
return filter.type === "object" && filter.typename !== null && Object.keys(filter.props).length === 0 && (filter.id === void 0 || filter.id.length === 0) && (filter.foreignKeys === void 0 || filter.foreignKeys.length === 0);
|
|
2951
3019
|
};
|
|
2952
3020
|
|
|
2953
|
-
//
|
|
2954
|
-
var __dxlog_file11 = "/
|
|
3021
|
+
// src/query/query-executor.ts
|
|
3022
|
+
var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/query/query-executor.ts";
|
|
2955
3023
|
var ExecutionTrace = Object.freeze({
|
|
2956
3024
|
makeEmpty: () => ({
|
|
2957
3025
|
name: "Empty",
|
|
@@ -2978,10 +3046,21 @@ var ExecutionTrace = Object.freeze({
|
|
|
2978
3046
|
});
|
|
2979
3047
|
var TRACE_QUERY_EXECUTION = false;
|
|
2980
3048
|
var QueryExecutor = class extends Resource6 {
|
|
3049
|
+
_indexer;
|
|
3050
|
+
_automergeHost;
|
|
3051
|
+
_spaceStateManager;
|
|
3052
|
+
/**
|
|
3053
|
+
* Id of this query.
|
|
3054
|
+
*/
|
|
3055
|
+
_id;
|
|
3056
|
+
_query;
|
|
3057
|
+
// TODO(dmaretskyi): Might be used in the future.
|
|
3058
|
+
_reactivity;
|
|
3059
|
+
_plan;
|
|
3060
|
+
_trace = ExecutionTrace.makeEmpty();
|
|
3061
|
+
_lastResultSet = [];
|
|
2981
3062
|
constructor(options) {
|
|
2982
3063
|
super();
|
|
2983
|
-
this._trace = ExecutionTrace.makeEmpty();
|
|
2984
|
-
this._lastResultSet = [];
|
|
2985
3064
|
this._indexer = options.indexer;
|
|
2986
3065
|
this._automergeHost = options.automergeHost;
|
|
2987
3066
|
this._spaceStateManager = options.spaceStateManager;
|
|
@@ -3014,9 +3093,9 @@ var QueryExecutor = class extends Resource6 {
|
|
|
3014
3093
|
}));
|
|
3015
3094
|
}
|
|
3016
3095
|
async execQuery() {
|
|
3017
|
-
invariant10(this._lifecycleState ===
|
|
3096
|
+
invariant10(this._lifecycleState === LifecycleState4.OPEN, void 0, {
|
|
3018
3097
|
F: __dxlog_file11,
|
|
3019
|
-
L:
|
|
3098
|
+
L: 174,
|
|
3020
3099
|
S: this,
|
|
3021
3100
|
A: [
|
|
3022
3101
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -3213,7 +3292,7 @@ var QueryExecutor = class extends Resource6 {
|
|
|
3213
3292
|
}
|
|
3214
3293
|
async _execFilterDeletedStep(step, workingSet) {
|
|
3215
3294
|
if (workingSet.length === 6) {
|
|
3216
|
-
log9
|
|
3295
|
+
log9("filter deleted step", {
|
|
3217
3296
|
step,
|
|
3218
3297
|
workingSet
|
|
3219
3298
|
}, {
|
|
@@ -3260,7 +3339,7 @@ var QueryExecutor = class extends Resource6 {
|
|
|
3260
3339
|
spaceId: item.spaceId
|
|
3261
3340
|
} : null;
|
|
3262
3341
|
} catch {
|
|
3263
|
-
log9.warn("
|
|
3342
|
+
log9.warn("invalid reference", {
|
|
3264
3343
|
ref: ref2["/"]
|
|
3265
3344
|
}, {
|
|
3266
3345
|
F: __dxlog_file11,
|
|
@@ -3318,7 +3397,7 @@ var QueryExecutor = class extends Resource6 {
|
|
|
3318
3397
|
spaceId: item.spaceId
|
|
3319
3398
|
};
|
|
3320
3399
|
} catch {
|
|
3321
|
-
log9.warn("
|
|
3400
|
+
log9.warn("invalid reference", {
|
|
3322
3401
|
ref: ref["/"]
|
|
3323
3402
|
}, {
|
|
3324
3403
|
F: __dxlog_file11,
|
|
@@ -3513,15 +3592,18 @@ var QueryExecutor = class extends Resource6 {
|
|
|
3513
3592
|
}
|
|
3514
3593
|
};
|
|
3515
3594
|
|
|
3516
|
-
//
|
|
3595
|
+
// src/db-host/query-service.ts
|
|
3517
3596
|
function _ts_decorate5(decorators, target, key, desc) {
|
|
3518
3597
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3519
3598
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
3520
3599
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
3521
3600
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
3522
3601
|
}
|
|
3523
|
-
var __dxlog_file12 = "/
|
|
3602
|
+
var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/query-service.ts";
|
|
3524
3603
|
var QueryServiceImpl = class extends Resource7 {
|
|
3604
|
+
_params;
|
|
3605
|
+
_queries;
|
|
3606
|
+
_updateQueries;
|
|
3525
3607
|
// TODO(burdon): OK for options, but not params. Pass separately and type readonly here.
|
|
3526
3608
|
constructor(_params) {
|
|
3527
3609
|
super(), this._params = _params, this._queries = /* @__PURE__ */ new Set();
|
|
@@ -3552,6 +3634,18 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3552
3634
|
}
|
|
3553
3635
|
execQuery(request) {
|
|
3554
3636
|
return new Stream2(({ next, close, ctx }) => {
|
|
3637
|
+
if (this._params.indexer.config?.enabled !== true) {
|
|
3638
|
+
log10.error("indexer is disabled", {
|
|
3639
|
+
config: this._params.indexer.config
|
|
3640
|
+
}, {
|
|
3641
|
+
F: __dxlog_file12,
|
|
3642
|
+
L: 101,
|
|
3643
|
+
S: this,
|
|
3644
|
+
C: (f, a) => f(...a)
|
|
3645
|
+
});
|
|
3646
|
+
close();
|
|
3647
|
+
return;
|
|
3648
|
+
}
|
|
3555
3649
|
const queryEntry = this._createQuery(ctx, request, next, close, close);
|
|
3556
3650
|
scheduleMicroTask(ctx, async () => {
|
|
3557
3651
|
await queryEntry.executor.open();
|
|
@@ -3567,7 +3661,7 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3567
3661
|
async reindex() {
|
|
3568
3662
|
log10("Reindexing all documents...", void 0, {
|
|
3569
3663
|
F: __dxlog_file12,
|
|
3570
|
-
L:
|
|
3664
|
+
L: 120,
|
|
3571
3665
|
S: this,
|
|
3572
3666
|
C: (f, a) => f(...a)
|
|
3573
3667
|
});
|
|
@@ -3582,7 +3676,7 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3582
3676
|
count: ids.size
|
|
3583
3677
|
}, {
|
|
3584
3678
|
F: __dxlog_file12,
|
|
3585
|
-
L:
|
|
3679
|
+
L: 128,
|
|
3586
3680
|
S: this,
|
|
3587
3681
|
C: (f, a) => f(...a)
|
|
3588
3682
|
});
|
|
@@ -3592,7 +3686,7 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3592
3686
|
count: ids.size
|
|
3593
3687
|
}, {
|
|
3594
3688
|
F: __dxlog_file12,
|
|
3595
|
-
L:
|
|
3689
|
+
L: 132,
|
|
3596
3690
|
S: this,
|
|
3597
3691
|
C: (f, a) => f(...a)
|
|
3598
3692
|
});
|
|
@@ -3658,7 +3752,7 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3658
3752
|
} catch (err) {
|
|
3659
3753
|
log10.catch(err, void 0, {
|
|
3660
3754
|
F: __dxlog_file12,
|
|
3661
|
-
L:
|
|
3755
|
+
L: 203,
|
|
3662
3756
|
S: this,
|
|
3663
3757
|
C: (f, a) => f(...a)
|
|
3664
3758
|
});
|
|
@@ -3669,7 +3763,7 @@ var QueryServiceImpl = class extends Resource7 {
|
|
|
3669
3763
|
duration: performance.now() - begin
|
|
3670
3764
|
}, {
|
|
3671
3765
|
F: __dxlog_file12,
|
|
3672
|
-
L:
|
|
3766
|
+
L: 207,
|
|
3673
3767
|
S: this,
|
|
3674
3768
|
C: (f, a) => f(...a)
|
|
3675
3769
|
});
|
|
@@ -3720,7 +3814,7 @@ var createDocumentsIterator = (automergeHost) => (
|
|
|
3720
3814
|
}
|
|
3721
3815
|
const linkHandle = await automergeHost.loadDoc(Context4.default(void 0, {
|
|
3722
3816
|
F: __dxlog_file12,
|
|
3723
|
-
L:
|
|
3817
|
+
L: 247
|
|
3724
3818
|
}), urlString);
|
|
3725
3819
|
for await (const result of getObjectsFromHandle(linkHandle)) {
|
|
3726
3820
|
yield result;
|
|
@@ -3741,22 +3835,22 @@ var createDocumentsIterator = (automergeHost) => (
|
|
|
3741
3835
|
}
|
|
3742
3836
|
);
|
|
3743
3837
|
|
|
3744
|
-
//
|
|
3838
|
+
// src/db-host/space-state-manager.ts
|
|
3745
3839
|
import { interpretAsDocumentId as interpretAsDocumentId3 } from "@automerge/automerge-repo";
|
|
3746
3840
|
import isEqual from "lodash.isequal";
|
|
3747
3841
|
import { Event as Event3, UpdateScheduler as UpdateScheduler3 } from "@dxos/async";
|
|
3748
|
-
import {
|
|
3842
|
+
import { Context as Context5, LifecycleState as LifecycleState5, Resource as Resource8 } from "@dxos/context";
|
|
3749
3843
|
import { invariant as invariant12 } from "@dxos/invariant";
|
|
3750
3844
|
|
|
3751
|
-
//
|
|
3845
|
+
// src/db-host/database-root.ts
|
|
3752
3846
|
import { interpretAsDocumentId as interpretAsDocumentId2 } from "@automerge/automerge-repo";
|
|
3753
3847
|
import { DatabaseDirectory as DatabaseDirectory5, SpaceDocVersion as SpaceDocVersion2 } from "@dxos/echo-protocol";
|
|
3754
3848
|
import { invariant as invariant11 } from "@dxos/invariant";
|
|
3755
3849
|
|
|
3756
|
-
//
|
|
3850
|
+
// src/db-host/automerge-metrics.ts
|
|
3757
3851
|
import * as A4 from "@automerge/automerge";
|
|
3758
3852
|
import { log as log11 } from "@dxos/log";
|
|
3759
|
-
var __dxlog_file13 = "/
|
|
3853
|
+
var __dxlog_file13 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/automerge-metrics.ts";
|
|
3760
3854
|
var measureDocMetrics = (doc) => {
|
|
3761
3855
|
const snapshot = A4.save(doc);
|
|
3762
3856
|
const start = Date.now();
|
|
@@ -3783,9 +3877,10 @@ var measureDocMetrics = (doc) => {
|
|
|
3783
3877
|
};
|
|
3784
3878
|
};
|
|
3785
3879
|
|
|
3786
|
-
//
|
|
3787
|
-
var __dxlog_file14 = "/
|
|
3880
|
+
// src/db-host/database-root.ts
|
|
3881
|
+
var __dxlog_file14 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/database-root.ts";
|
|
3788
3882
|
var DatabaseRoot = class {
|
|
3883
|
+
_rootHandle;
|
|
3789
3884
|
static mapLinks(doc, mapping) {
|
|
3790
3885
|
doc.change((d) => {
|
|
3791
3886
|
if (!d.links) {
|
|
@@ -3867,17 +3962,14 @@ var DatabaseRoot = class {
|
|
|
3867
3962
|
}
|
|
3868
3963
|
};
|
|
3869
3964
|
|
|
3870
|
-
//
|
|
3871
|
-
var __dxlog_file15 = "/
|
|
3965
|
+
// src/db-host/space-state-manager.ts
|
|
3966
|
+
var __dxlog_file15 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/space-state-manager.ts";
|
|
3872
3967
|
var SpaceStateManager = class extends Resource8 {
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
this._lastSpaceDocumentList = /* @__PURE__ */ new Map();
|
|
3879
|
-
this.spaceDocumentListUpdated = new Event3();
|
|
3880
|
-
}
|
|
3968
|
+
_roots = /* @__PURE__ */ new Map();
|
|
3969
|
+
_rootBySpace = /* @__PURE__ */ new Map();
|
|
3970
|
+
_perRootContext = /* @__PURE__ */ new Map();
|
|
3971
|
+
_lastSpaceDocumentList = /* @__PURE__ */ new Map();
|
|
3972
|
+
spaceDocumentListUpdated = new Event3();
|
|
3881
3973
|
async _close(ctx) {
|
|
3882
3974
|
for (const [_, rootCtx] of this._perRootContext) {
|
|
3883
3975
|
await rootCtx.dispose();
|
|
@@ -3894,7 +3986,7 @@ var SpaceStateManager = class extends Resource8 {
|
|
|
3894
3986
|
return this._rootBySpace.get(spaceId);
|
|
3895
3987
|
}
|
|
3896
3988
|
getRootBySpaceId(spaceId) {
|
|
3897
|
-
invariant12(this._lifecycleState ===
|
|
3989
|
+
invariant12(this._lifecycleState === LifecycleState5.OPEN, void 0, {
|
|
3898
3990
|
F: __dxlog_file15,
|
|
3899
3991
|
L: 44,
|
|
3900
3992
|
S: this,
|
|
@@ -3952,6 +4044,10 @@ var SpaceStateManager = class extends Resource8 {
|
|
|
3952
4044
|
}
|
|
3953
4045
|
};
|
|
3954
4046
|
var SpaceDocumentListUpdatedEvent = class {
|
|
4047
|
+
spaceId;
|
|
4048
|
+
spaceRootId;
|
|
4049
|
+
previousRootId;
|
|
4050
|
+
documentIds;
|
|
3955
4051
|
constructor(spaceId, spaceRootId, previousRootId, documentIds) {
|
|
3956
4052
|
this.spaceId = spaceId;
|
|
3957
4053
|
this.spaceRootId = spaceRootId;
|
|
@@ -3960,17 +4056,23 @@ var SpaceDocumentListUpdatedEvent = class {
|
|
|
3960
4056
|
}
|
|
3961
4057
|
};
|
|
3962
4058
|
|
|
3963
|
-
//
|
|
3964
|
-
var __dxlog_file16 = "/
|
|
4059
|
+
// src/db-host/echo-host.ts
|
|
4060
|
+
var __dxlog_file16 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/echo-host.ts";
|
|
3965
4061
|
var DEFAULT_INDEXING_CONFIG = {
|
|
3966
4062
|
// TODO(dmaretskyi): Disabled by default since embedding generation is expensive.
|
|
3967
4063
|
fullText: false,
|
|
3968
4064
|
vector: false
|
|
3969
4065
|
};
|
|
3970
4066
|
var EchoHost = class extends Resource9 {
|
|
4067
|
+
_indexMetadataStore;
|
|
4068
|
+
_indexer;
|
|
4069
|
+
_automergeHost;
|
|
4070
|
+
_queryService;
|
|
4071
|
+
_dataService;
|
|
4072
|
+
_spaceStateManager = new SpaceStateManager();
|
|
4073
|
+
_echoDataMonitor;
|
|
3971
4074
|
constructor({ kv, indexing = {}, peerIdProvider, getSpaceKeyByRootDocumentId }) {
|
|
3972
4075
|
super();
|
|
3973
|
-
this._spaceStateManager = new SpaceStateManager();
|
|
3974
4076
|
const indexingConfig = {
|
|
3975
4077
|
...DEFAULT_INDEXING_CONFIG,
|
|
3976
4078
|
...indexing
|
|
@@ -4135,9 +4237,9 @@ var EchoHost = class extends Resource9 {
|
|
|
4135
4237
|
* Create new space root.
|
|
4136
4238
|
*/
|
|
4137
4239
|
async createSpaceRoot(spaceKey) {
|
|
4138
|
-
invariant13(this._lifecycleState ===
|
|
4240
|
+
invariant13(this._lifecycleState === LifecycleState6.OPEN, void 0, {
|
|
4139
4241
|
F: __dxlog_file16,
|
|
4140
|
-
L:
|
|
4242
|
+
L: 256,
|
|
4141
4243
|
S: this,
|
|
4142
4244
|
A: [
|
|
4143
4245
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -4163,9 +4265,9 @@ var EchoHost = class extends Resource9 {
|
|
|
4163
4265
|
}
|
|
4164
4266
|
// TODO(dmaretskyi): Change to document id.
|
|
4165
4267
|
async openSpaceRoot(spaceId, automergeUrl) {
|
|
4166
|
-
invariant13(this._lifecycleState ===
|
|
4268
|
+
invariant13(this._lifecycleState === LifecycleState6.OPEN, void 0, {
|
|
4167
4269
|
F: __dxlog_file16,
|
|
4168
|
-
L:
|
|
4270
|
+
L: 275,
|
|
4169
4271
|
S: this,
|
|
4170
4272
|
A: [
|
|
4171
4273
|
"this._lifecycleState === LifecycleState.OPEN",
|
|
@@ -4194,9 +4296,9 @@ var EchoHost = class extends Resource9 {
|
|
|
4194
4296
|
}
|
|
4195
4297
|
};
|
|
4196
4298
|
|
|
4197
|
-
//
|
|
4299
|
+
// src/edge/echo-edge-replicator.ts
|
|
4198
4300
|
import { cbor as cbor2 } from "@automerge/automerge-repo";
|
|
4199
|
-
import { Mutex,
|
|
4301
|
+
import { Mutex, scheduleMicroTask as scheduleMicroTask2, scheduleTask as scheduleTask2 } from "@dxos/async";
|
|
4200
4302
|
import { Context as Context6, Resource as Resource11 } from "@dxos/context";
|
|
4201
4303
|
import { randomUUID } from "@dxos/crypto";
|
|
4202
4304
|
import { invariant as invariant14 } from "@dxos/invariant";
|
|
@@ -4206,12 +4308,21 @@ import { buf } from "@dxos/protocols/buf";
|
|
|
4206
4308
|
import { MessageSchema as RouterMessageSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
|
|
4207
4309
|
import { bufferToArray as bufferToArray2 } from "@dxos/util";
|
|
4208
4310
|
|
|
4209
|
-
//
|
|
4311
|
+
// src/edge/inflight-request-limiter.ts
|
|
4210
4312
|
import { Trigger as Trigger2 } from "@dxos/async";
|
|
4211
4313
|
import { Resource as Resource10 } from "@dxos/context";
|
|
4212
4314
|
import { log as log12 } from "@dxos/log";
|
|
4213
|
-
var __dxlog_file17 = "/
|
|
4315
|
+
var __dxlog_file17 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/edge/inflight-request-limiter.ts";
|
|
4214
4316
|
var InflightRequestLimiter = class extends Resource10 {
|
|
4317
|
+
_config;
|
|
4318
|
+
/**
|
|
4319
|
+
* Decrement when we receive a sync message, increment when we send one.
|
|
4320
|
+
* Can't exceed _config.maxInflightRequests.
|
|
4321
|
+
* Resets after timeout to avoid replicator being stuck.
|
|
4322
|
+
*/
|
|
4323
|
+
_inflightRequestBalance;
|
|
4324
|
+
_requestBarrier;
|
|
4325
|
+
_resetBalanceTimeout;
|
|
4215
4326
|
constructor(_config) {
|
|
4216
4327
|
super(), this._config = _config, this._inflightRequestBalance = 0, this._requestBarrier = new Trigger2();
|
|
4217
4328
|
}
|
|
@@ -4259,7 +4370,7 @@ var InflightRequestLimiter = class extends Resource10 {
|
|
|
4259
4370
|
}
|
|
4260
4371
|
};
|
|
4261
4372
|
|
|
4262
|
-
//
|
|
4373
|
+
// src/edge/echo-edge-replicator.ts
|
|
4263
4374
|
function _ts_add_disposable_resource(env, value, async) {
|
|
4264
4375
|
if (value !== null && value !== void 0) {
|
|
4265
4376
|
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
@@ -4325,18 +4436,19 @@ function _ts_dispose_resources(env) {
|
|
|
4325
4436
|
return next();
|
|
4326
4437
|
})(env);
|
|
4327
4438
|
}
|
|
4328
|
-
var __dxlog_file18 = "/
|
|
4439
|
+
var __dxlog_file18 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/edge/echo-edge-replicator.ts";
|
|
4329
4440
|
var INITIAL_RESTART_DELAY = 500;
|
|
4330
4441
|
var RESTART_DELAY_JITTER = 250;
|
|
4331
4442
|
var MAX_RESTART_DELAY = 5e3;
|
|
4332
4443
|
var EchoEdgeReplicator = class {
|
|
4444
|
+
_edgeConnection;
|
|
4445
|
+
_mutex = new Mutex();
|
|
4446
|
+
_ctx = void 0;
|
|
4447
|
+
_context = null;
|
|
4448
|
+
_connectedSpaces = /* @__PURE__ */ new Set();
|
|
4449
|
+
_connections = /* @__PURE__ */ new Map();
|
|
4450
|
+
_sharePolicyEnabled = true;
|
|
4333
4451
|
constructor({ edgeConnection, disableSharePolicy }) {
|
|
4334
|
-
this._mutex = new Mutex();
|
|
4335
|
-
this._ctx = void 0;
|
|
4336
|
-
this._context = null;
|
|
4337
|
-
this._connectedSpaces = /* @__PURE__ */ new Set();
|
|
4338
|
-
this._connections = /* @__PURE__ */ new Map();
|
|
4339
|
-
this._sharePolicyEnabled = true;
|
|
4340
4452
|
this._edgeConnection = edgeConnection;
|
|
4341
4453
|
this._sharePolicyEnabled = !disableSharePolicy;
|
|
4342
4454
|
}
|
|
@@ -4346,14 +4458,14 @@ var EchoEdgeReplicator = class {
|
|
|
4346
4458
|
connectedSpaces: this._connectedSpaces.size
|
|
4347
4459
|
}, {
|
|
4348
4460
|
F: __dxlog_file18,
|
|
4349
|
-
L:
|
|
4461
|
+
L: 62,
|
|
4350
4462
|
S: this,
|
|
4351
4463
|
C: (f, a) => f(...a)
|
|
4352
4464
|
});
|
|
4353
4465
|
this._context = context;
|
|
4354
4466
|
this._ctx = Context6.default(void 0, {
|
|
4355
4467
|
F: __dxlog_file18,
|
|
4356
|
-
L:
|
|
4468
|
+
L: 64
|
|
4357
4469
|
});
|
|
4358
4470
|
this._ctx.onDispose(this._edgeConnection.onReconnected(() => {
|
|
4359
4471
|
this._ctx && scheduleMicroTask2(this._ctx, () => this._handleReconnect());
|
|
@@ -4452,7 +4564,7 @@ var EchoEdgeReplicator = class {
|
|
|
4452
4564
|
async _openConnection(spaceId, reconnects = 0) {
|
|
4453
4565
|
invariant14(this._context, void 0, {
|
|
4454
4566
|
F: __dxlog_file18,
|
|
4455
|
-
L:
|
|
4567
|
+
L: 125,
|
|
4456
4568
|
S: this,
|
|
4457
4569
|
A: [
|
|
4458
4570
|
"this._context",
|
|
@@ -4461,7 +4573,7 @@ var EchoEdgeReplicator = class {
|
|
|
4461
4573
|
});
|
|
4462
4574
|
invariant14(!this._connections.has(spaceId), void 0, {
|
|
4463
4575
|
F: __dxlog_file18,
|
|
4464
|
-
L:
|
|
4576
|
+
L: 126,
|
|
4465
4577
|
S: this,
|
|
4466
4578
|
A: [
|
|
4467
4579
|
"!this._connections.has(spaceId)",
|
|
@@ -4475,9 +4587,25 @@ var EchoEdgeReplicator = class {
|
|
|
4475
4587
|
context: this._context,
|
|
4476
4588
|
sharedPolicyEnabled: this._sharePolicyEnabled,
|
|
4477
4589
|
onRemoteConnected: async () => {
|
|
4590
|
+
log13.trace("dxos.echo.edge.replicator.onRemoteConnected", {
|
|
4591
|
+
spaceId
|
|
4592
|
+
}, {
|
|
4593
|
+
F: __dxlog_file18,
|
|
4594
|
+
L: 136,
|
|
4595
|
+
S: this,
|
|
4596
|
+
C: (f, a) => f(...a)
|
|
4597
|
+
});
|
|
4478
4598
|
this._context?.onConnectionOpen(connection);
|
|
4479
4599
|
},
|
|
4480
4600
|
onRemoteDisconnected: async () => {
|
|
4601
|
+
log13.trace("dxos.echo.edge.replicator.onRemoteDisconnected", {
|
|
4602
|
+
spaceId
|
|
4603
|
+
}, {
|
|
4604
|
+
F: __dxlog_file18,
|
|
4605
|
+
L: 140,
|
|
4606
|
+
S: this,
|
|
4607
|
+
C: (f, a) => f(...a)
|
|
4608
|
+
});
|
|
4481
4609
|
this._context?.onConnectionClosed(connection);
|
|
4482
4610
|
},
|
|
4483
4611
|
onRestartRequested: async () => {
|
|
@@ -4491,7 +4619,7 @@ var EchoEdgeReplicator = class {
|
|
|
4491
4619
|
restartDelay
|
|
4492
4620
|
}, {
|
|
4493
4621
|
F: __dxlog_file18,
|
|
4494
|
-
L:
|
|
4622
|
+
L: 151,
|
|
4495
4623
|
S: this,
|
|
4496
4624
|
C: (f, a) => f(...a)
|
|
4497
4625
|
});
|
|
@@ -4513,6 +4641,16 @@ var EchoEdgeReplicator = class {
|
|
|
4513
4641
|
if (ctx?.disposed) {
|
|
4514
4642
|
return;
|
|
4515
4643
|
}
|
|
4644
|
+
log13.trace("dxos.echo.edge.replicator.restart", {
|
|
4645
|
+
spaceId,
|
|
4646
|
+
reconnects,
|
|
4647
|
+
restartDelay
|
|
4648
|
+
}, {
|
|
4649
|
+
F: __dxlog_file18,
|
|
4650
|
+
L: 168,
|
|
4651
|
+
S: this,
|
|
4652
|
+
C: (f, a) => f(...a)
|
|
4653
|
+
});
|
|
4516
4654
|
await this._openConnection(spaceId, reconnects + 1);
|
|
4517
4655
|
} catch (e) {
|
|
4518
4656
|
env.error = e;
|
|
@@ -4530,13 +4668,24 @@ var EchoEdgeReplicator = class {
|
|
|
4530
4668
|
var MAX_INFLIGHT_REQUESTS = 5;
|
|
4531
4669
|
var MAX_RATE_LIMIT_WAIT_TIME_MS = 3e3;
|
|
4532
4670
|
var EdgeReplicatorConnection = class extends Resource11 {
|
|
4671
|
+
_edgeConnection;
|
|
4672
|
+
_remotePeerId = null;
|
|
4673
|
+
_targetServiceId;
|
|
4674
|
+
_spaceId;
|
|
4675
|
+
_context;
|
|
4676
|
+
_sharedPolicyEnabled;
|
|
4677
|
+
_onRemoteConnected;
|
|
4678
|
+
_onRemoteDisconnected;
|
|
4679
|
+
_onRestartRequested;
|
|
4680
|
+
_requestLimiter = new InflightRequestLimiter({
|
|
4681
|
+
maxInflightRequests: MAX_INFLIGHT_REQUESTS,
|
|
4682
|
+
resetBalanceTimeoutMs: MAX_RATE_LIMIT_WAIT_TIME_MS
|
|
4683
|
+
});
|
|
4684
|
+
_readableStreamController;
|
|
4685
|
+
readable;
|
|
4686
|
+
writable;
|
|
4533
4687
|
constructor({ edgeConnection, spaceId, context, sharedPolicyEnabled, onRemoteConnected, onRemoteDisconnected, onRestartRequested }) {
|
|
4534
4688
|
super();
|
|
4535
|
-
this._remotePeerId = null;
|
|
4536
|
-
this._requestLimiter = new InflightRequestLimiter({
|
|
4537
|
-
maxInflightRequests: MAX_INFLIGHT_REQUESTS,
|
|
4538
|
-
resetBalanceTimeoutMs: MAX_RATE_LIMIT_WAIT_TIME_MS
|
|
4539
|
-
});
|
|
4540
4689
|
this._edgeConnection = edgeConnection;
|
|
4541
4690
|
this._spaceId = spaceId;
|
|
4542
4691
|
this._context = context;
|
|
@@ -4561,7 +4710,7 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4561
4710
|
async _open(ctx) {
|
|
4562
4711
|
log13("opening...", void 0, {
|
|
4563
4712
|
F: __dxlog_file18,
|
|
4564
|
-
L:
|
|
4713
|
+
L: 255,
|
|
4565
4714
|
S: this,
|
|
4566
4715
|
C: (f, a) => f(...a)
|
|
4567
4716
|
});
|
|
@@ -4569,12 +4718,29 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4569
4718
|
this._ctx.onDispose(this._edgeConnection.onMessage((msg) => {
|
|
4570
4719
|
this._onMessage(msg);
|
|
4571
4720
|
}));
|
|
4721
|
+
let firstReconnect = true;
|
|
4722
|
+
this._ctx.onDispose(
|
|
4723
|
+
// NOTE: This will fire immediately if the connection is already open.
|
|
4724
|
+
this._edgeConnection.onReconnected(async () => {
|
|
4725
|
+
if (firstReconnect) {
|
|
4726
|
+
log13.verbose("first reconnect skipped", void 0, {
|
|
4727
|
+
F: __dxlog_file18,
|
|
4728
|
+
L: 270,
|
|
4729
|
+
S: this,
|
|
4730
|
+
C: (f, a) => f(...a)
|
|
4731
|
+
});
|
|
4732
|
+
firstReconnect = false;
|
|
4733
|
+
return;
|
|
4734
|
+
}
|
|
4735
|
+
this._onRestartRequested();
|
|
4736
|
+
})
|
|
4737
|
+
);
|
|
4572
4738
|
await this._onRemoteConnected();
|
|
4573
4739
|
}
|
|
4574
4740
|
async _close() {
|
|
4575
4741
|
log13("closing...", void 0, {
|
|
4576
4742
|
F: __dxlog_file18,
|
|
4577
|
-
L:
|
|
4743
|
+
L: 283,
|
|
4578
4744
|
S: this,
|
|
4579
4745
|
C: (f, a) => f(...a)
|
|
4580
4746
|
});
|
|
@@ -4585,7 +4751,7 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4585
4751
|
get peerId() {
|
|
4586
4752
|
invariant14(this._remotePeerId, "Not connected", {
|
|
4587
4753
|
F: __dxlog_file18,
|
|
4588
|
-
L:
|
|
4754
|
+
L: 292,
|
|
4589
4755
|
S: this,
|
|
4590
4756
|
A: [
|
|
4591
4757
|
"this._remotePeerId",
|
|
@@ -4610,7 +4776,7 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4610
4776
|
remoteId: this._remotePeerId
|
|
4611
4777
|
}, {
|
|
4612
4778
|
F: __dxlog_file18,
|
|
4613
|
-
L:
|
|
4779
|
+
L: 307,
|
|
4614
4780
|
S: this,
|
|
4615
4781
|
C: (f, a) => f(...a)
|
|
4616
4782
|
});
|
|
@@ -4636,7 +4802,7 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4636
4802
|
remoteId: this._remotePeerId
|
|
4637
4803
|
}, {
|
|
4638
4804
|
F: __dxlog_file18,
|
|
4639
|
-
L:
|
|
4805
|
+
L: 336,
|
|
4640
4806
|
S: this,
|
|
4641
4807
|
C: (f, a) => f(...a)
|
|
4642
4808
|
});
|
|
@@ -4659,27 +4825,38 @@ var EdgeReplicatorConnection = class extends Resource11 {
|
|
|
4659
4825
|
remoteId: this._remotePeerId
|
|
4660
4826
|
}, {
|
|
4661
4827
|
F: __dxlog_file18,
|
|
4662
|
-
L:
|
|
4828
|
+
L: 365,
|
|
4663
4829
|
S: this,
|
|
4664
4830
|
C: (f, a) => f(...a)
|
|
4665
4831
|
});
|
|
4666
4832
|
const encoded = cbor2.encode(message);
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4833
|
+
try {
|
|
4834
|
+
await this._edgeConnection.send(buf.create(RouterMessageSchema, {
|
|
4835
|
+
serviceId: this._targetServiceId,
|
|
4836
|
+
source: {
|
|
4837
|
+
identityKey: this._edgeConnection.identityKey,
|
|
4838
|
+
peerKey: this._edgeConnection.peerKey
|
|
4839
|
+
},
|
|
4840
|
+
payload: {
|
|
4841
|
+
value: bufferToArray2(encoded)
|
|
4842
|
+
}
|
|
4843
|
+
}));
|
|
4844
|
+
} catch (err) {
|
|
4845
|
+
log13.error("failed to send message", {
|
|
4846
|
+
err
|
|
4847
|
+
}, {
|
|
4848
|
+
F: __dxlog_file18,
|
|
4849
|
+
L: 385,
|
|
4850
|
+
S: this,
|
|
4851
|
+
C: (f, a) => f(...a)
|
|
4852
|
+
});
|
|
4853
|
+
}
|
|
4677
4854
|
}
|
|
4678
4855
|
};
|
|
4679
4856
|
var isForbiddenErrorMessage = (message) => message.type === "error" && message.message === "Forbidden";
|
|
4680
4857
|
|
|
4681
|
-
//
|
|
4682
|
-
import {
|
|
4858
|
+
// src/util.ts
|
|
4859
|
+
import { ObjectStructure as ObjectStructure2, decodeReference } from "@dxos/echo-protocol";
|
|
4683
4860
|
var findInlineObjectOfType = (spaceDoc, typename) => {
|
|
4684
4861
|
for (const id in spaceDoc.objects ?? {}) {
|
|
4685
4862
|
const obj = spaceDoc.objects[id];
|