@dxos/echo-pipeline 0.7.2 → 0.7.3-staging.971cd8d
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-RRKGEIVZ.mjs → chunk-LZK5YFYE.mjs} +13 -13
- package/dist/lib/browser/{chunk-RRKGEIVZ.mjs.map → chunk-LZK5YFYE.mjs.map} +2 -2
- package/dist/lib/browser/index.mjs +42 -61
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-6KAVD3GU.cjs → chunk-MACQJ2EP.cjs} +16 -16
- package/dist/lib/node/{chunk-6KAVD3GU.cjs.map → chunk-MACQJ2EP.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +66 -87
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +10 -10
- package/dist/lib/node-esm/{chunk-4QES5F4H.mjs → chunk-JIZPSASG.mjs} +13 -13
- package/dist/lib/node-esm/{chunk-4QES5F4H.mjs.map → chunk-JIZPSASG.mjs.map} +2 -2
- package/dist/lib/node-esm/index.mjs +42 -61
- 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 +1 -1
- package/dist/types/src/automerge/automerge-host.d.ts +7 -1
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/db-host/echo-host.d.ts +3 -2
- package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
- package/dist/types/src/db-host/index.d.ts +0 -1
- package/dist/types/src/db-host/index.d.ts.map +1 -1
- package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/{db-host/migration.d.ts → util.d.ts} +1 -3
- package/dist/types/src/util.d.ts.map +1 -0
- package/package.json +34 -34
- package/src/automerge/automerge-host.ts +12 -3
- package/src/db-host/echo-host.ts +4 -1
- package/src/db-host/index.ts +0 -1
- package/src/edge/echo-edge-replicator.ts +3 -0
- package/src/index.ts +1 -0
- package/src/space/space.ts +1 -0
- package/src/util.ts +19 -0
- package/dist/types/src/db-host/migration.d.ts.map +0 -1
- package/src/db-host/migration.ts +0 -57
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.3-staging.971cd8d",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -37,43 +37,43 @@
|
|
|
37
37
|
"crc-32": "^1.2.2",
|
|
38
38
|
"level-transcoder": "^1.0.1",
|
|
39
39
|
"lodash.isequal": "^4.5.0",
|
|
40
|
-
"@dxos/async": "0.7.
|
|
41
|
-
"@dxos/automerge": "0.7.
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/debug": "0.7.
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/echo-
|
|
48
|
-
"@dxos/echo-
|
|
49
|
-
"@dxos/edge-client": "0.7.
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/hypercore": "0.7.
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/invariant": "0.7.
|
|
54
|
-
"@dxos/keyring": "0.7.
|
|
55
|
-
"@dxos/kv-store": "0.7.
|
|
56
|
-
"@dxos/log": "0.7.
|
|
57
|
-
"@dxos/
|
|
58
|
-
"@dxos/
|
|
59
|
-
"@dxos/
|
|
60
|
-
"@dxos/node-std": "0.7.
|
|
61
|
-
"@dxos/protocols": "0.7.
|
|
62
|
-
"@dxos/
|
|
63
|
-
"@dxos/
|
|
64
|
-
"@dxos/teleport": "0.7.
|
|
65
|
-
"@dxos/teleport-extension-gossip": "0.7.
|
|
66
|
-
"@dxos/teleport-extension-object-sync": "0.7.
|
|
67
|
-
"@dxos/teleport-extension-replicator": "0.7.
|
|
68
|
-
"@dxos/timeframe": "0.7.
|
|
69
|
-
"@dxos/
|
|
70
|
-
"@dxos/
|
|
71
|
-
"@dxos/util": "0.7.
|
|
40
|
+
"@dxos/async": "0.7.3-staging.971cd8d",
|
|
41
|
+
"@dxos/automerge": "0.7.3-staging.971cd8d",
|
|
42
|
+
"@dxos/context": "0.7.3-staging.971cd8d",
|
|
43
|
+
"@dxos/credentials": "0.7.3-staging.971cd8d",
|
|
44
|
+
"@dxos/crypto": "0.7.3-staging.971cd8d",
|
|
45
|
+
"@dxos/debug": "0.7.3-staging.971cd8d",
|
|
46
|
+
"@dxos/codec-protobuf": "0.7.3-staging.971cd8d",
|
|
47
|
+
"@dxos/echo-schema": "0.7.3-staging.971cd8d",
|
|
48
|
+
"@dxos/echo-protocol": "0.7.3-staging.971cd8d",
|
|
49
|
+
"@dxos/edge-client": "0.7.3-staging.971cd8d",
|
|
50
|
+
"@dxos/indexing": "0.7.3-staging.971cd8d",
|
|
51
|
+
"@dxos/hypercore": "0.7.3-staging.971cd8d",
|
|
52
|
+
"@dxos/feed-store": "0.7.3-staging.971cd8d",
|
|
53
|
+
"@dxos/invariant": "0.7.3-staging.971cd8d",
|
|
54
|
+
"@dxos/keyring": "0.7.3-staging.971cd8d",
|
|
55
|
+
"@dxos/kv-store": "0.7.3-staging.971cd8d",
|
|
56
|
+
"@dxos/log": "0.7.3-staging.971cd8d",
|
|
57
|
+
"@dxos/messaging": "0.7.3-staging.971cd8d",
|
|
58
|
+
"@dxos/keys": "0.7.3-staging.971cd8d",
|
|
59
|
+
"@dxos/network-manager": "0.7.3-staging.971cd8d",
|
|
60
|
+
"@dxos/node-std": "0.7.3-staging.971cd8d",
|
|
61
|
+
"@dxos/protocols": "0.7.3-staging.971cd8d",
|
|
62
|
+
"@dxos/teleport": "0.7.3-staging.971cd8d",
|
|
63
|
+
"@dxos/random-access-storage": "0.7.3-staging.971cd8d",
|
|
64
|
+
"@dxos/teleport-extension-automerge-replicator": "0.7.3-staging.971cd8d",
|
|
65
|
+
"@dxos/teleport-extension-gossip": "0.7.3-staging.971cd8d",
|
|
66
|
+
"@dxos/teleport-extension-object-sync": "0.7.3-staging.971cd8d",
|
|
67
|
+
"@dxos/teleport-extension-replicator": "0.7.3-staging.971cd8d",
|
|
68
|
+
"@dxos/timeframe": "0.7.3-staging.971cd8d",
|
|
69
|
+
"@dxos/typings": "0.7.3-staging.971cd8d",
|
|
70
|
+
"@dxos/tracing": "0.7.3-staging.971cd8d",
|
|
71
|
+
"@dxos/util": "0.7.3-staging.971cd8d"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@types/lodash.isequal": "^4.5.0",
|
|
75
75
|
"fast-check": "^3.19.0",
|
|
76
|
-
"@dxos/test-utils": "0.7.
|
|
76
|
+
"@dxos/test-utils": "0.7.3-staging.971cd8d"
|
|
77
77
|
},
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|
|
@@ -42,11 +42,18 @@ import { type EchoReplicator, type RemoteDocumentExistenceCheckParams } from './
|
|
|
42
42
|
import { HeadsStore } from './heads-store';
|
|
43
43
|
import { LevelDBStorageAdapter, type BeforeSaveParams } from './leveldb-storage-adapter';
|
|
44
44
|
|
|
45
|
+
export type PeerIdProvider = () => string | undefined;
|
|
46
|
+
|
|
45
47
|
export type AutomergeHostParams = {
|
|
46
48
|
db: LevelDB;
|
|
47
49
|
|
|
48
50
|
indexMetadataStore: IndexMetadataStore;
|
|
49
51
|
dataMonitor?: EchoDataMonitor;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Used for creating stable ids. A random key is generated on open, if no value is provided.
|
|
55
|
+
*/
|
|
56
|
+
peerIdProvider?: PeerIdProvider;
|
|
50
57
|
};
|
|
51
58
|
|
|
52
59
|
export type LoadDocOptions = {
|
|
@@ -82,9 +89,11 @@ export class AutomergeHost extends Resource {
|
|
|
82
89
|
@trace.info()
|
|
83
90
|
private _peerId!: PeerId;
|
|
84
91
|
|
|
92
|
+
private readonly _peerIdProvider?: PeerIdProvider;
|
|
93
|
+
|
|
85
94
|
public readonly collectionStateUpdated = new Event<{ collectionId: CollectionId }>();
|
|
86
95
|
|
|
87
|
-
constructor({ db, indexMetadataStore, dataMonitor }: AutomergeHostParams) {
|
|
96
|
+
constructor({ db, indexMetadataStore, dataMonitor, peerIdProvider }: AutomergeHostParams) {
|
|
88
97
|
super();
|
|
89
98
|
this._db = db;
|
|
90
99
|
this._storage = new LevelDBStorageAdapter({
|
|
@@ -104,11 +113,11 @@ export class AutomergeHost extends Resource {
|
|
|
104
113
|
});
|
|
105
114
|
this._headsStore = new HeadsStore({ db: db.sublevel('heads') });
|
|
106
115
|
this._indexMetadataStore = indexMetadataStore;
|
|
116
|
+
this._peerIdProvider = peerIdProvider;
|
|
107
117
|
}
|
|
108
118
|
|
|
109
119
|
protected override async _open() {
|
|
110
|
-
|
|
111
|
-
this._peerId = `host-${PublicKey.random().toHex()}` as PeerId;
|
|
120
|
+
this._peerId = `host-${this._peerIdProvider?.() ?? PublicKey.random().toHex()}` as PeerId;
|
|
112
121
|
|
|
113
122
|
await this._storage.open?.();
|
|
114
123
|
|
package/src/db-host/echo-host.ts
CHANGED
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
type EchoReplicator,
|
|
34
34
|
type CollectionSyncState,
|
|
35
35
|
type EchoDataStats,
|
|
36
|
+
type PeerIdProvider,
|
|
36
37
|
} from '../automerge';
|
|
37
38
|
|
|
38
39
|
const INDEXER_CONFIG: IndexConfig = {
|
|
@@ -42,6 +43,7 @@ const INDEXER_CONFIG: IndexConfig = {
|
|
|
42
43
|
|
|
43
44
|
export type EchoHostParams = {
|
|
44
45
|
kv: LevelDB;
|
|
46
|
+
peerIdProvider?: PeerIdProvider;
|
|
45
47
|
};
|
|
46
48
|
|
|
47
49
|
/**
|
|
@@ -59,7 +61,7 @@ export class EchoHost extends Resource {
|
|
|
59
61
|
private readonly _spaceStateManager = new SpaceStateManager();
|
|
60
62
|
private readonly _echoDataMonitor: EchoDataMonitor;
|
|
61
63
|
|
|
62
|
-
constructor({ kv }: EchoHostParams) {
|
|
64
|
+
constructor({ kv, peerIdProvider }: EchoHostParams) {
|
|
63
65
|
super();
|
|
64
66
|
|
|
65
67
|
this._indexMetadataStore = new IndexMetadataStore({ db: kv.sublevel('index-metadata') });
|
|
@@ -70,6 +72,7 @@ export class EchoHost extends Resource {
|
|
|
70
72
|
db: kv,
|
|
71
73
|
dataMonitor: this._echoDataMonitor,
|
|
72
74
|
indexMetadataStore: this._indexMetadataStore,
|
|
75
|
+
peerIdProvider,
|
|
73
76
|
});
|
|
74
77
|
|
|
75
78
|
this._indexer = new Indexer({
|
package/src/db-host/index.ts
CHANGED
|
@@ -97,6 +97,9 @@ export class EchoEdgeReplicator implements EchoReplicator {
|
|
|
97
97
|
async connectToSpace(spaceId: SpaceId) {
|
|
98
98
|
using _guard = await this._mutex.acquire();
|
|
99
99
|
|
|
100
|
+
if (this._connectedSpaces.has(spaceId)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
100
103
|
this._connectedSpaces.add(spaceId);
|
|
101
104
|
|
|
102
105
|
// Check if AM-repo requested that we connect to remote peers.
|
package/src/index.ts
CHANGED
package/src/space/space.ts
CHANGED
|
@@ -48,6 +48,7 @@ export type CreatePipelineParams = {
|
|
|
48
48
|
* Spaces are globally addressable databases with access control.
|
|
49
49
|
*/
|
|
50
50
|
// TODO(dmaretskyi): Extract database stuff.
|
|
51
|
+
// TODO(dmaretskyi): Rename HaloGraph move to HALO.
|
|
51
52
|
@trackLeaks('open', 'close')
|
|
52
53
|
@trace.resource()
|
|
53
54
|
export class Space extends Resource {
|
package/src/util.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { decodeReference, type ObjectStructure, type SpaceDoc } from '@dxos/echo-protocol';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Assumes properties are at root.
|
|
9
|
+
*/
|
|
10
|
+
export const findInlineObjectOfType = (spaceDoc: SpaceDoc, typename: string): [string, ObjectStructure] | undefined => {
|
|
11
|
+
for (const id in spaceDoc.objects ?? {}) {
|
|
12
|
+
const obj = spaceDoc.objects![id];
|
|
13
|
+
if (obj.system.type && decodeReference(obj.system.type).objectId === typename) {
|
|
14
|
+
return [id, obj];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return undefined;
|
|
19
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../../src/db-host/migration.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,eAAe,EAEpB,KAAK,QAAQ,EAEd,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,uBAAuB,QAAe,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAU7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAgB,QAAQ,KAAG,OAAO,CAAC,QAAQ,CAYhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,aAAc,QAAQ,YAAY,MAAM,KAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SASzG,CAAC"}
|
package/src/db-host/migration.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { convertLegacyReference } from '@dxos/echo-protocol';
|
|
6
|
-
import {
|
|
7
|
-
decodeReference,
|
|
8
|
-
encodeReference,
|
|
9
|
-
isLegacyReference,
|
|
10
|
-
LEGACY_TYPE_PROPERTIES,
|
|
11
|
-
type ObjectStructure,
|
|
12
|
-
Reference,
|
|
13
|
-
type SpaceDoc,
|
|
14
|
-
SpaceDocVersion,
|
|
15
|
-
} from '@dxos/echo-protocol';
|
|
16
|
-
import { TYPE_PROPERTIES } from '@dxos/echo-schema';
|
|
17
|
-
import { deepMapValuesAsync } from '@dxos/util';
|
|
18
|
-
|
|
19
|
-
export const convertLegacyReferences = async (doc: SpaceDoc): Promise<SpaceDoc> => {
|
|
20
|
-
const newDoc = await deepMapValuesAsync(doc, async (value, recurse) => {
|
|
21
|
-
if (isLegacyReference(value)) {
|
|
22
|
-
return convertLegacyReference(value);
|
|
23
|
-
}
|
|
24
|
-
return recurse(value);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
newDoc.version = SpaceDocVersion.CURRENT;
|
|
28
|
-
return newDoc;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export const convertLegacySpaceRootDoc = async (root: SpaceDoc): Promise<SpaceDoc> => {
|
|
32
|
-
// Convert references.
|
|
33
|
-
const newDoc: SpaceDoc = await convertLegacyReferences(root);
|
|
34
|
-
|
|
35
|
-
// Update properties type.
|
|
36
|
-
const properties = findInlineObjectOfType(newDoc, LEGACY_TYPE_PROPERTIES);
|
|
37
|
-
if (properties) {
|
|
38
|
-
const [_, obj] = properties;
|
|
39
|
-
obj.system.type = encodeReference(Reference.fromLegacyTypename(TYPE_PROPERTIES));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return newDoc;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Assumes properties are at root.
|
|
47
|
-
*/
|
|
48
|
-
export const findInlineObjectOfType = (spaceDoc: SpaceDoc, typename: string): [string, ObjectStructure] | undefined => {
|
|
49
|
-
for (const id in spaceDoc.objects ?? {}) {
|
|
50
|
-
const obj = spaceDoc.objects![id];
|
|
51
|
-
if (obj.system.type && decodeReference(obj.system.type).objectId === typename) {
|
|
52
|
-
return [id, obj];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return undefined;
|
|
57
|
-
};
|