@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.
Files changed (40) hide show
  1. package/dist/lib/browser/{chunk-RRKGEIVZ.mjs → chunk-LZK5YFYE.mjs} +13 -13
  2. package/dist/lib/browser/{chunk-RRKGEIVZ.mjs.map → chunk-LZK5YFYE.mjs.map} +2 -2
  3. package/dist/lib/browser/index.mjs +42 -61
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +1 -1
  7. package/dist/lib/node/{chunk-6KAVD3GU.cjs → chunk-MACQJ2EP.cjs} +16 -16
  8. package/dist/lib/node/{chunk-6KAVD3GU.cjs.map → chunk-MACQJ2EP.cjs.map} +2 -2
  9. package/dist/lib/node/index.cjs +66 -87
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +10 -10
  13. package/dist/lib/node-esm/{chunk-4QES5F4H.mjs → chunk-JIZPSASG.mjs} +13 -13
  14. package/dist/lib/node-esm/{chunk-4QES5F4H.mjs.map → chunk-JIZPSASG.mjs.map} +2 -2
  15. package/dist/lib/node-esm/index.mjs +42 -61
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +1 -1
  19. package/dist/types/src/automerge/automerge-host.d.ts +7 -1
  20. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  21. package/dist/types/src/db-host/echo-host.d.ts +3 -2
  22. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  23. package/dist/types/src/db-host/index.d.ts +0 -1
  24. package/dist/types/src/db-host/index.d.ts.map +1 -1
  25. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  26. package/dist/types/src/index.d.ts +1 -0
  27. package/dist/types/src/index.d.ts.map +1 -1
  28. package/dist/types/src/space/space.d.ts.map +1 -1
  29. package/dist/types/src/{db-host/migration.d.ts → util.d.ts} +1 -3
  30. package/dist/types/src/util.d.ts.map +1 -0
  31. package/package.json +34 -34
  32. package/src/automerge/automerge-host.ts +12 -3
  33. package/src/db-host/echo-host.ts +4 -1
  34. package/src/db-host/index.ts +0 -1
  35. package/src/edge/echo-edge-replicator.ts +3 -0
  36. package/src/index.ts +1 -0
  37. package/src/space/space.ts +1 -0
  38. package/src/util.ts +19 -0
  39. package/dist/types/src/db-host/migration.d.ts.map +0 -1
  40. 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.2",
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.2",
41
- "@dxos/automerge": "0.7.2",
42
- "@dxos/codec-protobuf": "0.7.2",
43
- "@dxos/crypto": "0.7.2",
44
- "@dxos/credentials": "0.7.2",
45
- "@dxos/debug": "0.7.2",
46
- "@dxos/context": "0.7.2",
47
- "@dxos/echo-protocol": "0.7.2",
48
- "@dxos/echo-schema": "0.7.2",
49
- "@dxos/edge-client": "0.7.2",
50
- "@dxos/feed-store": "0.7.2",
51
- "@dxos/hypercore": "0.7.2",
52
- "@dxos/indexing": "0.7.2",
53
- "@dxos/invariant": "0.7.2",
54
- "@dxos/keyring": "0.7.2",
55
- "@dxos/kv-store": "0.7.2",
56
- "@dxos/log": "0.7.2",
57
- "@dxos/keys": "0.7.2",
58
- "@dxos/network-manager": "0.7.2",
59
- "@dxos/messaging": "0.7.2",
60
- "@dxos/node-std": "0.7.2",
61
- "@dxos/protocols": "0.7.2",
62
- "@dxos/random-access-storage": "0.7.2",
63
- "@dxos/teleport-extension-automerge-replicator": "0.7.2",
64
- "@dxos/teleport": "0.7.2",
65
- "@dxos/teleport-extension-gossip": "0.7.2",
66
- "@dxos/teleport-extension-object-sync": "0.7.2",
67
- "@dxos/teleport-extension-replicator": "0.7.2",
68
- "@dxos/timeframe": "0.7.2",
69
- "@dxos/tracing": "0.7.2",
70
- "@dxos/typings": "0.7.2",
71
- "@dxos/util": "0.7.2"
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.2"
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
- // TODO(burdon): Should this be stable?
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
 
@@ -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({
@@ -5,7 +5,6 @@
5
5
  export * from './data-service';
6
6
  export * from './documents-synchronizer';
7
7
  export * from './echo-host';
8
- export * from './migration';
9
8
  export * from './database-root';
10
9
  export * from './query-state';
11
10
  export * from './query-service';
@@ -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
@@ -9,3 +9,4 @@ export * from './pipeline';
9
9
  export * from './space';
10
10
  export * from './automerge';
11
11
  export * from './edge';
12
+ export * from './util';
@@ -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"}
@@ -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
- };