@dxos/echo-pipeline 0.4.8-main.c4e8b01 → 0.4.8-main.de30065
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-LED7X4WK.mjs → chunk-XR2636AC.mjs} +34 -25
- package/dist/lib/browser/{chunk-LED7X4WK.mjs.map → chunk-XR2636AC.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +3 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/{chunk-UKREXVZX.cjs → chunk-LD4R726W.cjs} +46 -36
- package/dist/lib/node/{chunk-UKREXVZX.cjs.map → chunk-LD4R726W.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +31 -29
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +16 -16
- package/dist/types/src/automerge/automerge-host.d.ts +2 -1
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/automerge-storage-adapter.d.ts +2 -2
- package/dist/types/src/automerge/automerge-storage-adapter.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/automerge/automerge-host.ts +24 -22
- package/src/automerge/automerge-storage-adapter.ts +8 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.4.8-main.
|
|
3
|
+
"version": "0.4.8-main.de30065",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -36,38 +36,38 @@
|
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"crc-32": "^1.2.2",
|
|
39
|
-
"@dxos/async": "0.4.8-main.
|
|
40
|
-
"@dxos/automerge": "0.4.8-main.
|
|
41
|
-
"@dxos/codec-protobuf": "0.4.8-main.
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/crypto": "0.4.8-main.
|
|
45
|
-
"@dxos/debug": "0.4.8-main.
|
|
46
|
-
"@dxos/document-model": "0.4.8-main.
|
|
47
|
-
"@dxos/echo-db": "0.4.8-main.
|
|
48
|
-
"@dxos/feed-store": "0.4.8-main.
|
|
49
|
-
"@dxos/hypercore": "0.4.8-main.
|
|
50
|
-
"@dxos/invariant": "0.4.8-main.
|
|
51
|
-
"@dxos/keyring": "0.4.8-main.
|
|
52
|
-
"@dxos/keys": "0.4.8-main.
|
|
53
|
-
"@dxos/log": "0.4.8-main.
|
|
54
|
-
"@dxos/
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/node-std": "0.4.8-main.
|
|
58
|
-
"@dxos/protocols": "0.4.8-main.
|
|
59
|
-
"@dxos/
|
|
60
|
-
"@dxos/
|
|
61
|
-
"@dxos/
|
|
62
|
-
"@dxos/teleport-extension-automerge-replicator": "0.4.8-main.
|
|
63
|
-
"@dxos/teleport-extension-gossip": "0.4.8-main.
|
|
64
|
-
"@dxos/teleport-extension-object-sync": "0.4.8-main.
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/
|
|
67
|
-
"@dxos/
|
|
68
|
-
"@dxos/
|
|
69
|
-
"@dxos/
|
|
70
|
-
"@dxos/
|
|
39
|
+
"@dxos/async": "0.4.8-main.de30065",
|
|
40
|
+
"@dxos/automerge": "0.4.8-main.de30065",
|
|
41
|
+
"@dxos/codec-protobuf": "0.4.8-main.de30065",
|
|
42
|
+
"@dxos/context": "0.4.8-main.de30065",
|
|
43
|
+
"@dxos/credentials": "0.4.8-main.de30065",
|
|
44
|
+
"@dxos/crypto": "0.4.8-main.de30065",
|
|
45
|
+
"@dxos/debug": "0.4.8-main.de30065",
|
|
46
|
+
"@dxos/document-model": "0.4.8-main.de30065",
|
|
47
|
+
"@dxos/echo-db": "0.4.8-main.de30065",
|
|
48
|
+
"@dxos/feed-store": "0.4.8-main.de30065",
|
|
49
|
+
"@dxos/hypercore": "0.4.8-main.de30065",
|
|
50
|
+
"@dxos/invariant": "0.4.8-main.de30065",
|
|
51
|
+
"@dxos/keyring": "0.4.8-main.de30065",
|
|
52
|
+
"@dxos/keys": "0.4.8-main.de30065",
|
|
53
|
+
"@dxos/log": "0.4.8-main.de30065",
|
|
54
|
+
"@dxos/model-factory": "0.4.8-main.de30065",
|
|
55
|
+
"@dxos/messaging": "0.4.8-main.de30065",
|
|
56
|
+
"@dxos/network-manager": "0.4.8-main.de30065",
|
|
57
|
+
"@dxos/node-std": "0.4.8-main.de30065",
|
|
58
|
+
"@dxos/protocols": "0.4.8-main.de30065",
|
|
59
|
+
"@dxos/random-access-storage": "0.4.8-main.de30065",
|
|
60
|
+
"@dxos/rpc": "0.4.8-main.de30065",
|
|
61
|
+
"@dxos/teleport": "0.4.8-main.de30065",
|
|
62
|
+
"@dxos/teleport-extension-automerge-replicator": "0.4.8-main.de30065",
|
|
63
|
+
"@dxos/teleport-extension-gossip": "0.4.8-main.de30065",
|
|
64
|
+
"@dxos/teleport-extension-object-sync": "0.4.8-main.de30065",
|
|
65
|
+
"@dxos/teleport-extension-replicator": "0.4.8-main.de30065",
|
|
66
|
+
"@dxos/text-model": "0.4.8-main.de30065",
|
|
67
|
+
"@dxos/tracing": "0.4.8-main.de30065",
|
|
68
|
+
"@dxos/timeframe": "0.4.8-main.de30065",
|
|
69
|
+
"@dxos/typings": "0.4.8-main.de30065",
|
|
70
|
+
"@dxos/util": "0.4.8-main.de30065"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"fast-check": "^3.15.1",
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from '@dxos/automerge/automerge-repo';
|
|
14
14
|
import { IndexedDBStorageAdapter } from '@dxos/automerge/automerge-repo-storage-indexeddb';
|
|
15
15
|
import { type Stream } from '@dxos/codec-protobuf';
|
|
16
|
-
import { Context
|
|
16
|
+
import { Context } from '@dxos/context';
|
|
17
17
|
import { PublicKey } from '@dxos/keys';
|
|
18
18
|
import { log } from '@dxos/log';
|
|
19
19
|
import { idCodec } from '@dxos/protocols';
|
|
@@ -31,7 +31,7 @@ import { MeshNetworkAdapter } from './mesh-network-adapter';
|
|
|
31
31
|
export type { DocumentId };
|
|
32
32
|
|
|
33
33
|
export interface MetadataMethods {
|
|
34
|
-
markDirty(
|
|
34
|
+
markDirty(idToLastHash: Map<string, string>): Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export type AutomergeHostParams = {
|
|
@@ -98,15 +98,13 @@ export class AutomergeHost {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!rawSpaceKey) {
|
|
101
|
+
const spaceKey = getSpaceKeyFromDoc(doc);
|
|
102
|
+
if (!spaceKey) {
|
|
104
103
|
log('space key not found for share policy check', { peerId, documentId });
|
|
105
104
|
return false;
|
|
106
105
|
}
|
|
107
106
|
|
|
108
|
-
const
|
|
109
|
-
const authorizedDevices = this._authorizedDevices.get(spaceKey);
|
|
107
|
+
const authorizedDevices = this._authorizedDevices.get(PublicKey.from(spaceKey));
|
|
110
108
|
|
|
111
109
|
// TODO(mykola): Hack, stop abusing `peerMetadata` field.
|
|
112
110
|
const deviceKeyHex = (this.repo.peerMetadataByPeerId[peerId] as any)?.dxos_deviceKey;
|
|
@@ -164,8 +162,8 @@ export class AutomergeHost {
|
|
|
164
162
|
}
|
|
165
163
|
|
|
166
164
|
private _onUpdate(event: DocHandleChangePayload<any>) {
|
|
167
|
-
const spaceKey = event.doc
|
|
168
|
-
if (!spaceKey) {
|
|
165
|
+
const spaceKey = getSpaceKeyFromDoc(event.doc);
|
|
166
|
+
if (!spaceKey || this._metadata == null) {
|
|
169
167
|
return;
|
|
170
168
|
}
|
|
171
169
|
|
|
@@ -180,24 +178,18 @@ export class AutomergeHost {
|
|
|
180
178
|
return;
|
|
181
179
|
}
|
|
182
180
|
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
lastAvailableHash,
|
|
190
|
-
),
|
|
191
|
-
);
|
|
192
|
-
}),
|
|
193
|
-
)
|
|
181
|
+
const encodedIds = objectIds.map((objectId) =>
|
|
182
|
+
idCodec.encode({ documentId: event.handle.documentId, objectId, spaceKey }),
|
|
183
|
+
);
|
|
184
|
+
const idToLastHash = new Map(encodedIds.map((id) => [id, lastAvailableHash]));
|
|
185
|
+
const markingDirtyPromise = this._metadata
|
|
186
|
+
.markDirty(idToLastHash)
|
|
194
187
|
.then(() => {
|
|
195
188
|
this._updatingMetadata.delete(event.handle.documentId);
|
|
196
189
|
})
|
|
197
190
|
.catch((err: Error) => {
|
|
198
|
-
|
|
191
|
+
this._ctx.disposed && log.catch(err);
|
|
199
192
|
});
|
|
200
|
-
|
|
201
193
|
this._updatingMetadata.set(event.handle.documentId, markingDirtyPromise);
|
|
202
194
|
}
|
|
203
195
|
|
|
@@ -285,3 +277,13 @@ const getInlineChanges = (event: DocHandleChangePayload<any>) => {
|
|
|
285
277
|
}
|
|
286
278
|
return [...inlineChangedObjectIds];
|
|
287
279
|
};
|
|
280
|
+
|
|
281
|
+
export const getSpaceKeyFromDoc = (doc: any): string | null => {
|
|
282
|
+
// experimental_spaceKey is set on old documents, new ones are created with doc.access.spaceKey
|
|
283
|
+
const rawSpaceKey = doc.access?.spaceKey ?? doc.experimental_spaceKey;
|
|
284
|
+
if (rawSpaceKey == null) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return String(rawSpaceKey);
|
|
289
|
+
};
|
|
@@ -5,20 +5,18 @@
|
|
|
5
5
|
// Copyright 2023 DXOS.org
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { type Chunk, type StorageKey, type StorageAdapterInterface } from '@dxos/automerge/automerge-repo';
|
|
9
9
|
import { type Directory } from '@dxos/random-access-storage';
|
|
10
10
|
import { arrayToBuffer, bufferToArray } from '@dxos/util';
|
|
11
11
|
|
|
12
|
-
export class AutomergeStorageAdapter
|
|
12
|
+
export class AutomergeStorageAdapter implements StorageAdapterInterface {
|
|
13
13
|
// TODO(mykola): Hack for restricting automerge Repo to access storage if Host is `closed`.
|
|
14
14
|
// Automerge Repo do not have any lifetime management.
|
|
15
15
|
private _state: 'opened' | 'closed' = 'opened';
|
|
16
16
|
|
|
17
|
-
constructor(private readonly _directory: Directory) {
|
|
18
|
-
super();
|
|
19
|
-
}
|
|
17
|
+
constructor(private readonly _directory: Directory) {}
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
async load(key: StorageKey): Promise<Uint8Array | undefined> {
|
|
22
20
|
if (this._state !== 'opened') {
|
|
23
21
|
return undefined;
|
|
24
22
|
}
|
|
@@ -32,7 +30,7 @@ export class AutomergeStorageAdapter extends StorageAdapter {
|
|
|
32
30
|
return bufferToArray(buffer);
|
|
33
31
|
}
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
async save(key: StorageKey, data: Uint8Array): Promise<void> {
|
|
36
34
|
if (this._state !== 'opened') {
|
|
37
35
|
return undefined;
|
|
38
36
|
}
|
|
@@ -44,7 +42,7 @@ export class AutomergeStorageAdapter extends StorageAdapter {
|
|
|
44
42
|
await file.flush?.();
|
|
45
43
|
}
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
async remove(key: StorageKey): Promise<void> {
|
|
48
46
|
if (this._state !== 'opened') {
|
|
49
47
|
return undefined;
|
|
50
48
|
}
|
|
@@ -54,7 +52,7 @@ export class AutomergeStorageAdapter extends StorageAdapter {
|
|
|
54
52
|
await file.destroy();
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
|
|
55
|
+
async loadRange(keyPrefix: StorageKey): Promise<Chunk[]> {
|
|
58
56
|
if (this._state !== 'opened') {
|
|
59
57
|
return [];
|
|
60
58
|
}
|
|
@@ -75,7 +73,7 @@ export class AutomergeStorageAdapter extends StorageAdapter {
|
|
|
75
73
|
);
|
|
76
74
|
}
|
|
77
75
|
|
|
78
|
-
|
|
76
|
+
async removeRange(keyPrefix: StorageKey): Promise<void> {
|
|
79
77
|
if (this._state !== 'opened') {
|
|
80
78
|
return undefined;
|
|
81
79
|
}
|