@dxos/echo-pipeline 0.4.10-main.ef6fbc2 → 0.4.10-main.f635fb0
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-RA6MLCZM.mjs → chunk-SYE4EK33.mjs} +17 -9
- package/dist/lib/browser/chunk-SYE4EK33.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +304 -230
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +8 -2
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node/{chunk-KGIYLJBT.cjs → chunk-WCTX6RNS.cjs} +19 -11
- package/dist/lib/node/chunk-WCTX6RNS.cjs.map +7 -0
- package/dist/lib/node/index.cjs +325 -254
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +18 -13
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/types/src/automerge/automerge-host.d.ts +19 -17
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/automerge-repo.test.d.ts +2 -0
- package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -0
- package/dist/types/src/automerge/index.d.ts +1 -0
- package/dist/types/src/automerge/index.d.ts.map +1 -1
- package/dist/types/src/automerge/level.test.d.ts +2 -0
- package/dist/types/src/automerge/level.test.d.ts.map +1 -0
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +30 -0
- package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -0
- package/dist/types/src/automerge/local-host-network-adapter.d.ts +8 -1
- package/dist/types/src/automerge/local-host-network-adapter.d.ts.map +1 -1
- package/dist/types/src/automerge/migrations.d.ts +7 -0
- package/dist/types/src/automerge/migrations.d.ts.map +1 -0
- package/dist/types/src/automerge/storage-adapter.test.d.ts +2 -0
- package/dist/types/src/automerge/storage-adapter.test.d.ts.map +1 -0
- package/dist/types/src/automerge/types.d.ts +6 -0
- package/dist/types/src/automerge/types.d.ts.map +1 -1
- package/dist/types/src/metadata/metadata-store.d.ts +2 -1
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/level.d.ts +3 -0
- package/dist/types/src/testing/level.d.ts.map +1 -0
- package/package.json +33 -30
- package/src/automerge/automerge-host.test.ts +22 -8
- package/src/automerge/automerge-host.ts +52 -114
- package/src/automerge/automerge-repo.test.ts +29 -0
- package/src/automerge/index.ts +1 -0
- package/src/automerge/level.test.ts +64 -0
- package/src/automerge/leveldb-storage-adapter.ts +117 -0
- package/src/automerge/local-host-network-adapter.ts +19 -13
- package/src/automerge/migrations.ts +41 -0
- package/src/automerge/storage-adapter.test.ts +90 -0
- package/src/automerge/types.ts +6 -3
- package/src/metadata/metadata-store.ts +17 -8
- package/src/testing/index.ts +1 -0
- package/src/testing/level.ts +11 -0
- package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +0 -7
- package/dist/lib/node/chunk-KGIYLJBT.cjs.map +0 -7
|
@@ -23,10 +23,11 @@ __export(testing_exports, {
|
|
|
23
23
|
TestAgentBuilder: () => TestAgentBuilder,
|
|
24
24
|
TestFeedBuilder: () => TestFeedBuilder,
|
|
25
25
|
WebsocketNetworkManagerProvider: () => WebsocketNetworkManagerProvider,
|
|
26
|
-
changeStorageVersionInMetadata: () => changeStorageVersionInMetadata
|
|
26
|
+
changeStorageVersionInMetadata: () => changeStorageVersionInMetadata,
|
|
27
|
+
createTestLevel: () => createTestLevel
|
|
27
28
|
});
|
|
28
29
|
module.exports = __toCommonJS(testing_exports);
|
|
29
|
-
var
|
|
30
|
+
var import_chunk_WCTX6RNS = require("../chunk-WCTX6RNS.cjs");
|
|
30
31
|
var import_log = require("@dxos/log");
|
|
31
32
|
var import_protocols = require("@dxos/protocols");
|
|
32
33
|
var import_context = require("@dxos/context");
|
|
@@ -40,6 +41,8 @@ var import_teleport_extension_gossip = require("@dxos/teleport-extension-gossip"
|
|
|
40
41
|
var import_teleport_extension_object_sync = require("@dxos/teleport-extension-object-sync");
|
|
41
42
|
var import_util = require("@dxos/util");
|
|
42
43
|
var import_testing = require("@dxos/feed-store/testing");
|
|
44
|
+
var import_level = require("level");
|
|
45
|
+
var import_keys2 = require("@dxos/keys");
|
|
43
46
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/testing/change-metadata.ts";
|
|
44
47
|
var EchoMetadata = import_protocols.schema.getCodecForType("dxos.echo.metadata.EchoMetadata");
|
|
45
48
|
var changeStorageVersionInMetadata = async (storage, version) => {
|
|
@@ -49,7 +52,7 @@ var changeStorageVersionInMetadata = async (storage, version) => {
|
|
|
49
52
|
S: void 0,
|
|
50
53
|
C: (f, a) => f(...a)
|
|
51
54
|
});
|
|
52
|
-
const metadata = new
|
|
55
|
+
const metadata = new import_chunk_WCTX6RNS.MetadataStore(storage.createDirectory("metadata"));
|
|
53
56
|
await metadata.load();
|
|
54
57
|
const echoMetadata = metadata.metadata;
|
|
55
58
|
echoMetadata.version = version;
|
|
@@ -60,7 +63,7 @@ var changeStorageVersionInMetadata = async (storage, version) => {
|
|
|
60
63
|
var TestFeedBuilder = class extends import_testing.TestBuilder {
|
|
61
64
|
constructor() {
|
|
62
65
|
super({
|
|
63
|
-
valueEncoding:
|
|
66
|
+
valueEncoding: import_chunk_WCTX6RNS.valueEncoding
|
|
64
67
|
});
|
|
65
68
|
}
|
|
66
69
|
};
|
|
@@ -104,10 +107,10 @@ var TestAgentBuilder = class {
|
|
|
104
107
|
};
|
|
105
108
|
var TestAgent = class {
|
|
106
109
|
get metadataStore() {
|
|
107
|
-
return this._metadataStore ??= new
|
|
110
|
+
return this._metadataStore ??= new import_chunk_WCTX6RNS.MetadataStore(this.storage.createDirectory("metadata"));
|
|
108
111
|
}
|
|
109
112
|
get snapshotStore() {
|
|
110
|
-
return this._snapshotStore ??= new
|
|
113
|
+
return this._snapshotStore ??= new import_chunk_WCTX6RNS.SnapshotStore(this.storage.createDirectory("snapshots"));
|
|
111
114
|
}
|
|
112
115
|
get blobStore() {
|
|
113
116
|
return this._blobStore ??= new import_teleport_extension_object_sync.BlobStore(this.storage.createDirectory("blobs"));
|
|
@@ -134,7 +137,7 @@ var TestAgent = class {
|
|
|
134
137
|
return this._spaces.get(spaceKey);
|
|
135
138
|
}
|
|
136
139
|
get spaceManager() {
|
|
137
|
-
return this._spaceManager ??= new
|
|
140
|
+
return this._spaceManager ??= new import_chunk_WCTX6RNS.SpaceManager({
|
|
138
141
|
feedStore: this.feedStore,
|
|
139
142
|
networkManager: this._networkManagerProvider(),
|
|
140
143
|
metadataStore: this.metadataStore,
|
|
@@ -171,8 +174,8 @@ var TestAgent = class {
|
|
|
171
174
|
metadata,
|
|
172
175
|
swarmIdentity: {
|
|
173
176
|
peerKey: this.deviceKey,
|
|
174
|
-
credentialProvider:
|
|
175
|
-
credentialAuthenticator:
|
|
177
|
+
credentialProvider: import_chunk_WCTX6RNS.MOCK_AUTH_PROVIDER,
|
|
178
|
+
credentialAuthenticator: import_chunk_WCTX6RNS.MOCK_AUTH_VERIFIER
|
|
176
179
|
},
|
|
177
180
|
memberKey: identityKey,
|
|
178
181
|
onAuthorizedConnection: (session) => {
|
|
@@ -188,12 +191,12 @@ var TestAgent = class {
|
|
|
188
191
|
return space;
|
|
189
192
|
}
|
|
190
193
|
createSpaceProtocol(topic, gossip) {
|
|
191
|
-
return new
|
|
194
|
+
return new import_chunk_WCTX6RNS.SpaceProtocol({
|
|
192
195
|
topic,
|
|
193
196
|
swarmIdentity: {
|
|
194
197
|
peerKey: this.deviceKey,
|
|
195
|
-
credentialProvider:
|
|
196
|
-
credentialAuthenticator:
|
|
198
|
+
credentialProvider: import_chunk_WCTX6RNS.MOCK_AUTH_PROVIDER,
|
|
199
|
+
credentialAuthenticator: import_chunk_WCTX6RNS.MOCK_AUTH_VERIFIER
|
|
197
200
|
},
|
|
198
201
|
networkManager: this._networkManagerProvider(),
|
|
199
202
|
blobStore: this.blobStore,
|
|
@@ -233,6 +236,7 @@ var TestAgent = class {
|
|
|
233
236
|
}
|
|
234
237
|
}
|
|
235
238
|
};
|
|
239
|
+
var createTestLevel = () => new import_level.Level(`/tmp/dxos-${import_keys2.PublicKey.random().toHex()}`);
|
|
236
240
|
// Annotate the CommonJS export names for ESM import in node:
|
|
237
241
|
0 && (module.exports = {
|
|
238
242
|
MemoryNetworkManagerProvider,
|
|
@@ -240,6 +244,7 @@ var TestAgent = class {
|
|
|
240
244
|
TestAgentBuilder,
|
|
241
245
|
TestFeedBuilder,
|
|
242
246
|
WebsocketNetworkManagerProvider,
|
|
243
|
-
changeStorageVersionInMetadata
|
|
247
|
+
changeStorageVersionInMetadata,
|
|
248
|
+
createTestLevel
|
|
244
249
|
});
|
|
245
250
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\n\nimport { MetadataStore } from '../metadata';\n\nconst EchoMetadata = schema.getCodecForType('dxos.echo.metadata.EchoMetadata');\n\n/**\n * This function will change the storage version in the metadata.\n * This will break your storage and make it unusable.\n * Use this only for testing purposes.\n */\nexport const changeStorageVersionInMetadata = async (storage: Storage, version: number) => {\n log.info('Changing storage version in metadata. USE ONLY FOR TESTING.');\n const metadata = new MetadataStore(storage.createDirectory('metadata'));\n await metadata.load();\n const echoMetadata = metadata.metadata;\n echoMetadata.version = version;\n const file = metadata._directory.getOrCreateFile('EchoMetadata');\n await metadata._writeFile(file, EchoMetadata, echoMetadata);\n await metadata._directory.flush();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator } from '@dxos/credentials';\nimport { type FeedStore } from '@dxos/feed-store';\nimport { type Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager, createSimplePeerTransportFactory } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { StorageType, createStorage, type Storage } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\nimport { ComplexMap } from '@dxos/util';\n\nimport { TestFeedBuilder } from './test-feed-builder';\nimport { SnapshotStore } from '../db-host';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\n\nexport type NetworkManagerProvider = () => NetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new WebsocketSignalManager([{ server: signalUrl }]),\n transportFactory: createSimplePeerTransportFactory(),\n });\n\nexport type TestAgentBuilderOptions = {\n storage?: Storage;\n networkManagerProvider?: NetworkManagerProvider;\n};\n\n/**\n * Factory for test agents.\n */\nexport class TestAgentBuilder {\n private readonly _agents = new ComplexMap<PublicKey, TestAgent>(PublicKey.hash);\n private readonly _storage: Storage;\n private readonly _networkManagerProvider: NetworkManagerProvider;\n\n constructor({ storage, networkManagerProvider }: TestAgentBuilderOptions = {}) {\n this._storage = storage ?? createStorage({ type: StorageType.RAM });\n this._networkManagerProvider =\n networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());\n }\n\n async close() {\n return Promise.all(this.agents.map((agent) => agent.close()));\n }\n\n get agents() {\n return Array.from(this._agents.values());\n }\n\n getAgent(deviceKey: PublicKey) {\n return this._agents.get(deviceKey);\n }\n\n async createPeer(): Promise<TestAgent> {\n // prettier-ignore\n const feedBuilder = new TestFeedBuilder()\n .setStorage(this._storage, `agent-${this._agents.size}`);\n\n const identityKey = await feedBuilder.keyring.createKey();\n const deviceKey = await feedBuilder.keyring.createKey();\n\n const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);\n this._agents.set(deviceKey, agent);\n return agent;\n }\n}\n\n/**\n * Test agent that enables the creation and replication of multiple spaces.\n */\nexport class TestAgent {\n private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);\n\n public readonly storage: Storage;\n public readonly keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\n\n private _metadataStore?: MetadataStore;\n get metadataStore() {\n return (this._metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n private _snapshotStore?: SnapshotStore;\n get snapshotStore() {\n return (this._snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n private _blobStore?: BlobStore;\n get blobStore() {\n return (this._blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n constructor(\n private readonly _networkManagerProvider: NetworkManagerProvider,\n private readonly _feedBuilder: TestFeedBuilder,\n public readonly identityKey: PublicKey,\n public readonly deviceKey: PublicKey,\n ) {\n this.storage = this._feedBuilder.storage;\n this.keyring = this._feedBuilder.keyring;\n this.feedStore = this._feedBuilder.createFeedStore();\n }\n\n async close() {\n return Promise.all([...this.spaces.map((space) => space.close())]);\n }\n\n get spaces() {\n return Array.from(this._spaces.values());\n }\n\n getSpace(spaceKey: PublicKey) {\n return this._spaces.get(spaceKey);\n }\n\n private _spaceManager?: SpaceManager;\n get spaceManager() {\n return (this._spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this._networkManagerProvider(),\n metadataStore: this.metadataStore,\n snapshotStore: this.snapshotStore,\n blobStore: this.blobStore,\n }));\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey,\n dataKey?: PublicKey,\n saveMetadata = false,\n ): Promise<Space> {\n if (!spaceKey) {\n saveMetadata = true;\n spaceKey = await this.keyring.createKey();\n }\n if (!genesisKey) {\n genesisKey = await this.keyring.createKey();\n }\n\n const controlFeed = await this.feedStore.openFeed(genesisKey, { writable: true });\n const dataFeed = await this.feedStore.openFeed(dataKey ?? (await this.keyring.createKey()), {\n writable: true,\n sparse: true,\n });\n\n const metadata: SpaceMetadata = {\n key: spaceKey,\n genesisFeedKey: genesisKey,\n controlFeedKey: controlFeed.key,\n dataFeedKey: dataFeed.key,\n };\n if (saveMetadata) {\n await this.metadataStore.addSpace(metadata);\n }\n\n await this.spaceManager.open();\n const space = await this.spaceManager.constructSpace({\n metadata,\n swarmIdentity: {\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n memberKey: identityKey,\n onAuthorizedConnection: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n this.createGossip().createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n await space.setControlFeed(controlFeed);\n await space.setDataFeed(dataFeed);\n\n await space.open(new Context());\n\n this._spaces.set(spaceKey, space);\n return space;\n }\n\n createSpaceProtocol(topic: PublicKey, gossip?: Gossip) {\n return new SpaceProtocol({\n topic,\n swarmIdentity: {\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n networkManager: this._networkManagerProvider(),\n blobStore: this.blobStore,\n onSessionAuth: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n (gossip ?? this.createGossip()).createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n }\n\n createGossip() {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip) {\n return new Presence({\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey,\n gossip: gossip ?? this.createGossip(),\n });\n }\n\n async spaceGenesis(space: Space) {\n const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);\n const credentials = [\n ...(await generator.createSpaceGenesis(space.key, space.controlFeedKey!)),\n await generator.createFeedAdmission(space.key, space.dataFeedKey!, AdmittedFeed.Designation.DATA),\n await generator.createEpochCredential(space.key),\n ];\n\n for (const credential of credentials) {\n await space.controlPipeline.writer.write({\n credential: { credential },\n });\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { TestBuilder } from '@dxos/feed-store/testing';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\n\nimport { valueEncoding } from '../common';\n\n/**\n * Builder with default encoder and generator.\n */\nexport class TestFeedBuilder extends TestBuilder<FeedMessage> {\n constructor() {\n super({\n valueEncoding,\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_credentials", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createSimplePeerTransportFactory", "TestAgentBuilder", "networkManagerProvider", "_agents", "ComplexMap", "PublicKey", "hash", "_storage", "createStorage", "type", "StorageType", "RAM", "_networkManagerProvider", "MemorySignalManagerContext", "close", "Promise", "all", "agents", "map", "agent", "Array", "from", "values", "getAgent", "deviceKey", "get", "createPeer", "feedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "metadataStore", "_metadataStore", "snapshotStore", "_snapshotStore", "SnapshotStore", "blobStore", "_blobStore", "BlobStore", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "spaceManager", "_spaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "sparse", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onAuthorizedConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "setControlFeed", "setDataFeed", "Context", "createSpaceProtocol", "topic", "gossip", "SpaceProtocol", "onSessionAuth", "Gossip", "localPeerId", "createPresence", "Presence", "announceInterval", "offlineTimeout", "spaceGenesis", "generator", "CredentialGenerator", "credentials", "createSpaceGenesis", "createFeedAdmission", "AdmittedFeed", "Designation", "DATA", "createEpochCredential", "credential", "controlPipeline", "writer", "write"]
|
|
3
|
+
"sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/level.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols';\nimport type { Storage } from '@dxos/random-access-storage';\n\nimport { MetadataStore } from '../metadata';\n\nconst EchoMetadata = schema.getCodecForType('dxos.echo.metadata.EchoMetadata');\n\n/**\n * This function will change the storage version in the metadata.\n * This will break your storage and make it unusable.\n * Use this only for testing purposes.\n */\nexport const changeStorageVersionInMetadata = async (storage: Storage, version: number) => {\n log.info('Changing storage version in metadata. USE ONLY FOR TESTING.');\n const metadata = new MetadataStore(storage.createDirectory('metadata'));\n await metadata.load();\n const echoMetadata = metadata.metadata;\n echoMetadata.version = version;\n const file = metadata._directory.getOrCreateFile('EchoMetadata');\n await metadata._writeFile(file, EchoMetadata, echoMetadata);\n await metadata._directory.flush();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator } from '@dxos/credentials';\nimport { type FeedStore } from '@dxos/feed-store';\nimport { type Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager, createSimplePeerTransportFactory } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { StorageType, createStorage, type Storage } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\nimport { ComplexMap } from '@dxos/util';\n\nimport { TestFeedBuilder } from './test-feed-builder';\nimport { SnapshotStore } from '../db-host';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';\n\nexport type NetworkManagerProvider = () => NetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new WebsocketSignalManager([{ server: signalUrl }]),\n transportFactory: createSimplePeerTransportFactory(),\n });\n\nexport type TestAgentBuilderOptions = {\n storage?: Storage;\n networkManagerProvider?: NetworkManagerProvider;\n};\n\n/**\n * Factory for test agents.\n */\nexport class TestAgentBuilder {\n private readonly _agents = new ComplexMap<PublicKey, TestAgent>(PublicKey.hash);\n private readonly _storage: Storage;\n private readonly _networkManagerProvider: NetworkManagerProvider;\n\n constructor({ storage, networkManagerProvider }: TestAgentBuilderOptions = {}) {\n this._storage = storage ?? createStorage({ type: StorageType.RAM });\n this._networkManagerProvider =\n networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());\n }\n\n async close() {\n return Promise.all(this.agents.map((agent) => agent.close()));\n }\n\n get agents() {\n return Array.from(this._agents.values());\n }\n\n getAgent(deviceKey: PublicKey) {\n return this._agents.get(deviceKey);\n }\n\n async createPeer(): Promise<TestAgent> {\n // prettier-ignore\n const feedBuilder = new TestFeedBuilder()\n .setStorage(this._storage, `agent-${this._agents.size}`);\n\n const identityKey = await feedBuilder.keyring.createKey();\n const deviceKey = await feedBuilder.keyring.createKey();\n\n const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);\n this._agents.set(deviceKey, agent);\n return agent;\n }\n}\n\n/**\n * Test agent that enables the creation and replication of multiple spaces.\n */\nexport class TestAgent {\n private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);\n\n public readonly storage: Storage;\n public readonly keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\n\n private _metadataStore?: MetadataStore;\n get metadataStore() {\n return (this._metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n private _snapshotStore?: SnapshotStore;\n get snapshotStore() {\n return (this._snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n private _blobStore?: BlobStore;\n get blobStore() {\n return (this._blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n constructor(\n private readonly _networkManagerProvider: NetworkManagerProvider,\n private readonly _feedBuilder: TestFeedBuilder,\n public readonly identityKey: PublicKey,\n public readonly deviceKey: PublicKey,\n ) {\n this.storage = this._feedBuilder.storage;\n this.keyring = this._feedBuilder.keyring;\n this.feedStore = this._feedBuilder.createFeedStore();\n }\n\n async close() {\n return Promise.all([...this.spaces.map((space) => space.close())]);\n }\n\n get spaces() {\n return Array.from(this._spaces.values());\n }\n\n getSpace(spaceKey: PublicKey) {\n return this._spaces.get(spaceKey);\n }\n\n private _spaceManager?: SpaceManager;\n get spaceManager() {\n return (this._spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this._networkManagerProvider(),\n metadataStore: this.metadataStore,\n snapshotStore: this.snapshotStore,\n blobStore: this.blobStore,\n }));\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey,\n dataKey?: PublicKey,\n saveMetadata = false,\n ): Promise<Space> {\n if (!spaceKey) {\n saveMetadata = true;\n spaceKey = await this.keyring.createKey();\n }\n if (!genesisKey) {\n genesisKey = await this.keyring.createKey();\n }\n\n const controlFeed = await this.feedStore.openFeed(genesisKey, { writable: true });\n const dataFeed = await this.feedStore.openFeed(dataKey ?? (await this.keyring.createKey()), {\n writable: true,\n sparse: true,\n });\n\n const metadata: SpaceMetadata = {\n key: spaceKey,\n genesisFeedKey: genesisKey,\n controlFeedKey: controlFeed.key,\n dataFeedKey: dataFeed.key,\n };\n if (saveMetadata) {\n await this.metadataStore.addSpace(metadata);\n }\n\n await this.spaceManager.open();\n const space = await this.spaceManager.constructSpace({\n metadata,\n swarmIdentity: {\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n memberKey: identityKey,\n onAuthorizedConnection: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n this.createGossip().createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n await space.setControlFeed(controlFeed);\n await space.setDataFeed(dataFeed);\n\n await space.open(new Context());\n\n this._spaces.set(spaceKey, space);\n return space;\n }\n\n createSpaceProtocol(topic: PublicKey, gossip?: Gossip) {\n return new SpaceProtocol({\n topic,\n swarmIdentity: {\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n networkManager: this._networkManagerProvider(),\n blobStore: this.blobStore,\n onSessionAuth: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n (gossip ?? this.createGossip()).createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n }\n\n createGossip() {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip) {\n return new Presence({\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey,\n gossip: gossip ?? this.createGossip(),\n });\n }\n\n async spaceGenesis(space: Space) {\n const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);\n const credentials = [\n ...(await generator.createSpaceGenesis(space.key, space.controlFeedKey!)),\n await generator.createFeedAdmission(space.key, space.dataFeedKey!, AdmittedFeed.Designation.DATA),\n await generator.createEpochCredential(space.key),\n ];\n\n for (const credential of credentials) {\n await space.controlPipeline.writer.write({\n credential: { credential },\n });\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { TestBuilder } from '@dxos/feed-store/testing';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\n\nimport { valueEncoding } from '../common';\n\n/**\n * Builder with default encoder and generator.\n */\nexport class TestFeedBuilder extends TestBuilder<FeedMessage> {\n constructor() {\n super({\n valueEncoding,\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Level } from 'level';\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { type LevelDB } from '../automerge/types';\n\nexport const createTestLevel = (): LevelDB => new Level<string, string>(`/tmp/dxos-${PublicKey.random().toHex()}`);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iBAAoB;AACpB,uBAAuB;ACDvB,qBAAwB;AACxB,yBAAoC;AAGpC,kBAA0B;AAC1B,uBAAwF;AACxF,6BAAyF;AAGzF,IAAAA,sBAA6B;AAC7B,mCAAyD;AACzD,uCAAiC;AACjC,4CAA0B;AAC1B,kBAA2B;ACb3B,qBAA4B;ACA5B,mBAAsB;AAEtB,IAAAC,eAA0B;;AHI1B,IAAMC,eAAeC,wBAAOC,gBAAgB,iCAAA;AAOrC,IAAMC,iCAAiC,OAAOC,SAAkBC,YAAAA;AACrEC,iBAAIC,KAAK,+DAAA,QAAA;;;;;;AACT,QAAMC,WAAW,IAAIC,oCAAcL,QAAQM,gBAAgB,UAAA,CAAA;AAC3D,QAAMF,SAASG,KAAI;AACnB,QAAMC,eAAeJ,SAASA;AAC9BI,eAAaP,UAAUA;AACvB,QAAMQ,OAAOL,SAASM,WAAWC,gBAAgB,cAAA;AACjD,QAAMP,SAASQ,WAAWH,MAAMb,cAAcY,YAAAA;AAC9C,QAAMJ,SAASM,WAAWG,MAAK;AACjC;AEdO,IAAMC,kBAAN,cAA8BC,2BAAAA;EACnCC,cAAc;AACZ,UAAM;MACJC;IACF,CAAA;EACF;AACF;ADQO,IAAMC,+BACX,CAACC,kBACD,MACE,IAAIC,sCAAe;EACjBC,eAAe,IAAIC,qCAAoBH,aAAAA;EACvCI,kBAAkBC;AACpB,CAAA;AAEG,IAAMC,kCACX,CAACC,cACD,MACE,IAAIN,sCAAe;EACjBC,eAAe,IAAIM,wCAAuB;IAAC;MAAEC,QAAQF;IAAU;GAAE;EACjEH,sBAAkBM,yDAAAA;AACpB,CAAA;AAUG,IAAMC,mBAAN,MAAMA;EAKXd,YAAY,EAAEhB,SAAS+B,uBAAsB,IAA8B,CAAC,GAAG;AAJ9DC,SAAAA,UAAU,IAAIC,uBAAiCC,sBAAUC,IAAI;AAK5E,SAAKC,WAAWpC,eAAWqC,4CAAc;MAAEC,MAAMC,yCAAYC;IAAI,CAAA;AACjE,SAAKC,0BACHV,0BAA0Bb,6BAA6B,IAAIwB,4CAAAA,CAAAA;EAC/D;EAEA,MAAMC,QAAQ;AACZ,WAAOC,QAAQC,IAAI,KAAKC,OAAOC,IAAI,CAACC,UAAUA,MAAML,MAAK,CAAA,CAAA;EAC3D;EAEA,IAAIG,SAAS;AACX,WAAOG,MAAMC,KAAK,KAAKlB,QAAQmB,OAAM,CAAA;EACvC;EAEAC,SAASC,WAAsB;AAC7B,WAAO,KAAKrB,QAAQsB,IAAID,SAAAA;EAC1B;EAEA,MAAME,aAAiC;AAErC,UAAMC,cAAc,IAAI1C,gBAAAA,EACrB2C,WAAW,KAAKrB,UAAU,SAAS,KAAKJ,QAAQ0B,IAAI,EAAE;AAEzD,UAAMC,cAAc,MAAMH,YAAYI,QAAQC,UAAS;AACvD,UAAMR,YAAY,MAAMG,YAAYI,QAAQC,UAAS;AAErD,UAAMb,QAAQ,IAAIc,UAAU,KAAKrB,yBAAyBe,aAAaG,aAAaN,SAAAA;AACpF,SAAKrB,QAAQ+B,IAAIV,WAAWL,KAAAA;AAC5B,WAAOA;EACT;AACF;AAKO,IAAMc,YAAN,MAAMA;EAQX,IAAIE,gBAAgB;AAClB,WAAQ,KAAKC,mBAAmB,IAAI5D,oCAAc,KAAKL,QAAQM,gBAAgB,UAAA,CAAA;EACjF;EAGA,IAAI4D,gBAAgB;AAClB,WAAQ,KAAKC,mBAAmB,IAAIC,oCAAc,KAAKpE,QAAQM,gBAAgB,WAAA,CAAA;EACjF;EAGA,IAAI+D,YAAY;AACd,WAAQ,KAAKC,eAAe,IAAIC,gDAAU,KAAKvE,QAAQM,gBAAgB,OAAA,CAAA;EACzE;EAEAU,YACmByB,yBACA+B,cACDb,aACAN,WAChB;SAJiBZ,0BAAAA;SACA+B,eAAAA;SACDb,cAAAA;SACAN,YAAAA;SAzBDoB,UAAU,IAAIxC,uBAA6BC,sBAAUC,IAAI;AA2BxE,SAAKnC,UAAU,KAAKwE,aAAaxE;AACjC,SAAK4D,UAAU,KAAKY,aAAaZ;AACjC,SAAKc,YAAY,KAAKF,aAAaG,gBAAe;EACpD;EAEA,MAAMhC,QAAQ;AACZ,WAAOC,QAAQC,IAAI;SAAI,KAAK+B,OAAO7B,IAAI,CAAC8B,UAAUA,MAAMlC,MAAK,CAAA;KAAI;EACnE;EAEA,IAAIiC,SAAS;AACX,WAAO3B,MAAMC,KAAK,KAAKuB,QAAQtB,OAAM,CAAA;EACvC;EAEA2B,SAASC,UAAqB;AAC5B,WAAO,KAAKN,QAAQnB,IAAIyB,QAAAA;EAC1B;EAGA,IAAIC,eAAe;AACjB,WAAQ,KAAKC,kBAAkB,IAAIC,mCAAa;MAC9CR,WAAW,KAAKA;MAChBS,gBAAgB,KAAK1C,wBAAuB;MAC5CuB,eAAe,KAAKA;MACpBE,eAAe,KAAKA;MACpBG,WAAW,KAAKA;IAClB,CAAA;EACF;EAEA,MAAMe,YACJzB,cAAyB,KAAKA,aAC9BoB,UACAM,YACAC,SACAC,eAAe,OACC;AAChB,QAAI,CAACR,UAAU;AACbQ,qBAAe;AACfR,iBAAW,MAAM,KAAKnB,QAAQC,UAAS;IACzC;AACA,QAAI,CAACwB,YAAY;AACfA,mBAAa,MAAM,KAAKzB,QAAQC,UAAS;IAC3C;AAEA,UAAM2B,cAAc,MAAM,KAAKd,UAAUe,SAASJ,YAAY;MAAEK,UAAU;IAAK,CAAA;AAC/E,UAAMC,WAAW,MAAM,KAAKjB,UAAUe,SAASH,WAAY,MAAM,KAAK1B,QAAQC,UAAS,GAAK;MAC1F6B,UAAU;MACVE,QAAQ;IACV,CAAA;AAEA,UAAMxF,WAA0B;MAC9ByF,KAAKd;MACLe,gBAAgBT;MAChBU,gBAAgBP,YAAYK;MAC5BG,aAAaL,SAASE;IACxB;AACA,QAAIN,cAAc;AAChB,YAAM,KAAKvB,cAAciC,SAAS7F,QAAAA;IACpC;AAEA,UAAM,KAAK4E,aAAakB,KAAI;AAC5B,UAAMrB,QAAQ,MAAM,KAAKG,aAAamB,eAAe;MACnD/F;MACAgG,eAAe;QACbC,SAAS,KAAKhD;QACdiD,oBAAoBC;QACpBC,yBAAyBC;MAC3B;MACAC,WAAW/C;MACXgD,wBAAwB,CAACC,YAAAA;AACvBA,gBAAQC,aACN,6BACA,KAAKC,aAAY,EAAGC,gBAAgB;UAAEC,cAAcJ,QAAQI;QAAa,CAAA,CAAA;MAE7E;IACF,CAAA;AACA,UAAMnC,MAAMoC,eAAezB,WAAAA;AAC3B,UAAMX,MAAMqC,YAAYvB,QAAAA;AAExB,UAAMd,MAAMqB,KAAK,IAAIiB,uBAAAA,CAAAA;AAErB,SAAK1C,QAAQV,IAAIgB,UAAUF,KAAAA;AAC3B,WAAOA;EACT;EAEAuC,oBAAoBC,OAAkBC,QAAiB;AACrD,WAAO,IAAIC,oCAAc;MACvBF;MACAjB,eAAe;QACbC,SAAS,KAAKhD;QACdiD,oBAAoBC;QACpBC,yBAAyBC;MAC3B;MACAtB,gBAAgB,KAAK1C,wBAAuB;MAC5C4B,WAAW,KAAKA;MAChBmD,eAAe,CAACZ,YAAAA;AACdA,gBAAQC,aACN,8BACCS,UAAU,KAAKR,aAAY,GAAIC,gBAAgB;UAAEC,cAAcJ,QAAQI;QAAa,CAAA,CAAA;MAEzF;IACF,CAAA;EACF;EAEAF,eAAe;AACb,WAAO,IAAIW,wCAAO;MAChBC,aAAa,KAAKrE;IACpB,CAAA;EACF;EAEAsE,eAAeL,QAAiB;AAC9B,WAAO,IAAIM,0CAAS;MAClBC,kBAAkB;MAClBC,gBAAgB;MAChBnE,aAAa,KAAKA;MAClB2D,QAAQA,UAAU,KAAKR,aAAY;IACrC,CAAA;EACF;EAEA,MAAMiB,aAAalD,OAAc;AAC/B,UAAMmD,YAAY,IAAIC,uCAAoB,KAAKrE,SAAS,KAAKD,aAAa,KAAKN,SAAS;AACxF,UAAM6E,cAAc;SACd,MAAMF,UAAUG,mBAAmBtD,MAAMgB,KAAKhB,MAAMkB,cAAc;MACtE,MAAMiC,UAAUI,oBAAoBvD,MAAMgB,KAAKhB,MAAMmB,aAAcqC,iCAAaC,YAAYC,IAAI;MAChG,MAAMP,UAAUQ,sBAAsB3D,MAAMgB,GAAG;;AAGjD,eAAW4C,cAAcP,aAAa;AACpC,YAAMrD,MAAM6D,gBAAgBC,OAAOC,MAAM;QACvCH,YAAY;UAAEA;QAAW;MAC3B,CAAA;IACF;EACF;AACF;AEhPO,IAAMI,kBAAkB,MAAe,IAAIC,mBAAsB,aAAa5G,aAAAA,UAAU6G,OAAM,EAAGC,MAAK,CAAA,EAAI;",
|
|
6
|
+
"names": ["import_credentials", "import_keys", "EchoMetadata", "schema", "getCodecForType", "changeStorageVersionInMetadata", "storage", "version", "log", "info", "metadata", "MetadataStore", "createDirectory", "load", "echoMetadata", "file", "_directory", "getOrCreateFile", "_writeFile", "flush", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "server", "createSimplePeerTransportFactory", "TestAgentBuilder", "networkManagerProvider", "_agents", "ComplexMap", "PublicKey", "hash", "_storage", "createStorage", "type", "StorageType", "RAM", "_networkManagerProvider", "MemorySignalManagerContext", "close", "Promise", "all", "agents", "map", "agent", "Array", "from", "values", "getAgent", "deviceKey", "get", "createPeer", "feedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "metadataStore", "_metadataStore", "snapshotStore", "_snapshotStore", "SnapshotStore", "blobStore", "_blobStore", "BlobStore", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "spaceManager", "_spaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataKey", "saveMetadata", "controlFeed", "openFeed", "writable", "dataFeed", "sparse", "key", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "addSpace", "open", "constructSpace", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "memberKey", "onAuthorizedConnection", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "setControlFeed", "setDataFeed", "Context", "createSpaceProtocol", "topic", "gossip", "SpaceProtocol", "onSessionAuth", "Gossip", "localPeerId", "createPresence", "Presence", "announceInterval", "offlineTimeout", "spaceGenesis", "generator", "CredentialGenerator", "credentials", "createSpaceGenesis", "createFeedAdmission", "AdmittedFeed", "Designation", "DATA", "createEpochCredential", "credential", "controlPipeline", "writer", "write", "createTestLevel", "Level", "random", "toHex"]
|
|
7
7
|
}
|
|
@@ -4,36 +4,38 @@ import { PublicKey } from '@dxos/keys';
|
|
|
4
4
|
import { type FlushRequest, type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';
|
|
5
5
|
import { type Directory } from '@dxos/random-access-storage';
|
|
6
6
|
import { type AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';
|
|
7
|
+
import { type StorageCallbacks } from './leveldb-storage-adapter';
|
|
8
|
+
import { type SubLevelDB } from './types';
|
|
7
9
|
export type { DocumentId };
|
|
8
|
-
export interface MetadataMethods {
|
|
9
|
-
markDirty(idToLastHash: Map<string, string>): Promise<void>;
|
|
10
|
-
}
|
|
11
10
|
export type AutomergeHostParams = {
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
db: SubLevelDB;
|
|
12
|
+
/**
|
|
13
|
+
* For migration purposes.
|
|
14
|
+
*/
|
|
15
|
+
directory?: Directory;
|
|
16
|
+
storageCallbacks?: StorageCallbacks;
|
|
14
17
|
};
|
|
15
18
|
export declare class AutomergeHost {
|
|
16
19
|
private readonly _ctx;
|
|
17
|
-
private readonly
|
|
18
|
-
private readonly
|
|
19
|
-
private readonly
|
|
20
|
-
private
|
|
21
|
-
private
|
|
20
|
+
private readonly _directory?;
|
|
21
|
+
private readonly _db;
|
|
22
|
+
private readonly _storageCallbacks?;
|
|
23
|
+
private _repo;
|
|
24
|
+
private _meshNetwork;
|
|
25
|
+
private _clientNetwork;
|
|
26
|
+
private _storage;
|
|
27
|
+
private _peerId;
|
|
22
28
|
/**
|
|
23
29
|
* spaceKey -> deviceKey[]
|
|
24
30
|
*/
|
|
25
31
|
private readonly _authorizedDevices;
|
|
26
|
-
private readonly _updatingMetadata;
|
|
27
|
-
private readonly _metadata?;
|
|
28
32
|
_requestedDocs: Set<string>;
|
|
29
|
-
constructor({ directory,
|
|
33
|
+
constructor({ directory, db, storageCallbacks }: AutomergeHostParams);
|
|
34
|
+
open(): Promise<void>;
|
|
35
|
+
close(): Promise<void>;
|
|
30
36
|
get repo(): Repo;
|
|
31
|
-
private _beforeSave;
|
|
32
|
-
private _onDocument;
|
|
33
|
-
private _onUpdate;
|
|
34
37
|
private _automergeDocs;
|
|
35
38
|
private _automergePeers;
|
|
36
|
-
close(): Promise<void>;
|
|
37
39
|
flush({ documentIds }: FlushRequest): Promise<void>;
|
|
38
40
|
syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse>;
|
|
39
41
|
sendSyncMessage(request: SyncRepoRequest): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAA6C,MAAM,gCAAgC,CAAC;AAClH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAIzF,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIzF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,UAAU,CAAC;IACf;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,qBACa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAmB;IAEtD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAuC;IAGvD,OAAO,CAAC,OAAO,CAAU;IAEzB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoE;IAEhG,cAAc,cAAqB;gBAE9B,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,mBAAmB;IAM9D,IAAI;IA0EJ,KAAK;IAMX,IAAI,IAAI,IAAI,IAAI,CAEf;IAGD,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,eAAe;IAQjB,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAI5D,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQtC,eAAe,IAAI,mBAAmB;IAItC,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;CAI1D;AAED,eAAO,MAAM,kBAAkB,QAAS,GAAG,KAAG,MAAM,GAAG,IAQtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automerge-repo.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './automerge-host';
|
|
2
2
|
export * from './automerge-storage-adapter';
|
|
3
3
|
export * from './automerge-doc-loader';
|
|
4
|
+
export * from './leveldb-storage-adapter';
|
|
4
5
|
export * from './local-host-network-adapter';
|
|
5
6
|
export * from './mesh-network-adapter';
|
|
6
7
|
export * from './types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/level.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type StorageAdapterInterface, type Chunk, type StorageKey } from '@dxos/automerge/automerge-repo';
|
|
2
|
+
import { Resource } from '@dxos/context';
|
|
3
|
+
import { type MaybePromise } from '@dxos/util';
|
|
4
|
+
import { type BatchLevel, type SubLevelDB } from './types';
|
|
5
|
+
export type LevelDBStorageAdapterParams = {
|
|
6
|
+
db: SubLevelDB;
|
|
7
|
+
callbacks?: StorageCallbacks;
|
|
8
|
+
};
|
|
9
|
+
export type BeforeSaveParams = {
|
|
10
|
+
path: StorageKey;
|
|
11
|
+
batch: BatchLevel;
|
|
12
|
+
};
|
|
13
|
+
export interface StorageCallbacks {
|
|
14
|
+
beforeSave(params: BeforeSaveParams): MaybePromise<void>;
|
|
15
|
+
afterSave(path: StorageKey): MaybePromise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare class LevelDBStorageAdapter extends Resource implements StorageAdapterInterface {
|
|
18
|
+
private readonly _params;
|
|
19
|
+
constructor(_params: LevelDBStorageAdapterParams);
|
|
20
|
+
load(keyArray: StorageKey): Promise<Uint8Array | undefined>;
|
|
21
|
+
save(keyArray: StorageKey, binary: Uint8Array): Promise<void>;
|
|
22
|
+
remove(keyArray: StorageKey): Promise<void>;
|
|
23
|
+
loadRange(keyPrefix: StorageKey): Promise<Chunk[]>;
|
|
24
|
+
removeRange(keyPrefix: StorageKey): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare const encodingOptions: {
|
|
27
|
+
keyEncoding: import("level-transcoder").IExternalEncoding<StorageKey, Uint8Array, StorageKey>;
|
|
28
|
+
valueEncoding: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=leveldb-storage-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leveldb-storage-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/leveldb-storage-adapter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC3G,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,qBAAa,qBAAsB,SAAQ,QAAS,YAAW,uBAAuB;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,2BAA2B;IAI3D,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAe3D,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D,MAAM,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,SAAS,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBlD,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD;AAYD,eAAO,MAAM,eAAe;;;CAG3B,CAAC"}
|
|
@@ -10,11 +10,18 @@ export declare class LocalHostNetworkAdapter extends NetworkAdapter {
|
|
|
10
10
|
* Emits `ready` event. That signals to `Repo` that it can start using the adapter.
|
|
11
11
|
*/
|
|
12
12
|
ready(): void;
|
|
13
|
-
private _connected;
|
|
13
|
+
private readonly _connected;
|
|
14
|
+
private _isConnected;
|
|
15
|
+
/**
|
|
16
|
+
* Called by `Repo` to connect to the network.
|
|
17
|
+
*
|
|
18
|
+
* @param peerId Our peer Id.
|
|
19
|
+
*/
|
|
14
20
|
connect(peerId: PeerId): void;
|
|
15
21
|
send(message: Message): void;
|
|
16
22
|
close(): Promise<void>;
|
|
17
23
|
disconnect(): void;
|
|
24
|
+
whenConnected(): Promise<void>;
|
|
18
25
|
syncRepo({ id, syncMessage }: SyncRepoRequest): Stream<SyncRepoResponse>;
|
|
19
26
|
sendSyncMessage({ id, syncMessage }: SyncRepoRequest): Promise<void>;
|
|
20
27
|
getHostInfo(): Promise<HostInfo>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-host-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/local-host-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,gCAAgC,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"local-host-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/local-host-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,gCAAgC,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAQrH;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAElE;;OAEG;IACH,KAAK;IAQL,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,YAAY,CAAkB;IAEtC;;;;OAIG;IACM,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/B,KAAK;IAKF,UAAU,IAAI,IAAI;IAKrB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;IA6BlE,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQtC,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Directory } from '@dxos/random-access-storage';
|
|
2
|
+
import { type SubLevelDB } from './types';
|
|
3
|
+
export declare const levelMigration: ({ db, directory }: {
|
|
4
|
+
db: SubLevelDB;
|
|
5
|
+
directory: Directory;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../src/automerge/migrations.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAI1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,eAAO,MAAM,cAAc;;eAA0D,SAAS;mBA2B7F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-adapter.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/storage-adapter.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { type AbstractChainedBatch, type AbstractSublevel } from 'abstract-level';
|
|
3
|
+
import { type Level } from 'level';
|
|
1
4
|
import { type EncodedReferenceObject } from './reference';
|
|
2
5
|
export type SpaceState = {
|
|
3
6
|
rootUrl?: string;
|
|
@@ -64,4 +67,7 @@ export type ObjectSystem = {
|
|
|
64
67
|
*/
|
|
65
68
|
type?: EncodedReferenceObject;
|
|
66
69
|
};
|
|
70
|
+
export type LevelDB = Level<string, string>;
|
|
71
|
+
export type SubLevelDB = AbstractSublevel<any, string | Buffer | Uint8Array, string, string>;
|
|
72
|
+
export type BatchLevel = AbstractChainedBatch<any, string, string>;
|
|
67
73
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/automerge/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/automerge/types.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;KAChC,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,IAAI,CAAC,EAAE,sBAAsB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7F,MAAM,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Event } from '@dxos/async';
|
|
2
2
|
import { PublicKey } from '@dxos/keys';
|
|
3
|
-
import {
|
|
3
|
+
import { Invitation, SpaceState } from '@dxos/protocols/proto/dxos/client/services';
|
|
4
4
|
import { type ControlPipelineSnapshot, EchoMetadata, type SpaceMetadata, type IdentityRecord, type SpaceCache } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
5
5
|
import { type Directory } from '@dxos/random-access-storage';
|
|
6
6
|
import { type Timeframe } from '@dxos/timeframe';
|
|
@@ -53,5 +53,6 @@ export declare class MetadataStore {
|
|
|
53
53
|
getSpaceControlPipelineSnapshot(spaceKey: PublicKey): ControlPipelineSnapshot | undefined;
|
|
54
54
|
setSpaceControlPipelineSnapshot(spaceKey: PublicKey, snapshot: ControlPipelineSnapshot): Promise<void>;
|
|
55
55
|
}
|
|
56
|
+
export declare const hasInvitationExpired: (invitation: Invitation) => boolean;
|
|
56
57
|
export {};
|
|
57
58
|
//# sourceMappingURL=metadata-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAsC,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAsC,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EACL,KAAK,uBAAuB,EAC5B,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EAEhB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAKjD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,SAAS,CAAC;CACxB;AAWD,QAAA,MAAM,YAAY,yDAA4D,CAAC;AAG/E,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,mBAAmB,CAAiE;IAE5F,OAAO,CAAC,aAAa,CAAC,CAAmB;IAEzC,SAAgB,MAAM,sBAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;gBAO3C,SAAS,EAAE,SAAS;IAIhC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,EAAE,CAE5B;YAEa,SAAS;IA+CjB,KAAK;IASX;;OAEG;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAgDb,KAAK;YAcL,uBAAuB;YAavB,uBAAuB;IAM/B,KAAK;IAIX,SAAS,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa;IAW7C,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,iBAAiB,IAAI,cAAc,GAAG,SAAS;IAIzC,iBAAiB,CAAC,MAAM,EAAE,cAAc;IAQ9C,cAAc,IAAI,UAAU,EAAE;IAIxB,aAAa,CAAC,UAAU,EAAE,UAAU;IAUpC,gBAAgB,CAAC,YAAY,EAAE,MAAM;IAMrC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAW9B,2BAA2B,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAKrE,8BAA8B,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAMxE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAK/C,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;IAQ1F,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;IAM1D,+BAA+B,CAAC,QAAQ,EAAE,SAAS,GAAG,uBAAuB,GAAG,SAAS;IAInF,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB;CAK7F;AAID,eAAO,MAAM,oBAAoB,eAAgB,UAAU,KAAG,OAO7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../../../src/testing/level.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,eAAO,MAAM,eAAe,QAAO,OAA+E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.4.10-main.
|
|
3
|
+
"version": "0.4.10-main.f635fb0",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -35,36 +35,39 @@
|
|
|
35
35
|
"src"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
+
"abstract-level": "^1.0.2",
|
|
38
39
|
"crc-32": "^1.2.2",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/
|
|
58
|
-
"@dxos/
|
|
59
|
-
"@dxos/
|
|
60
|
-
"@dxos/
|
|
61
|
-
"@dxos/teleport
|
|
62
|
-
"@dxos/teleport-extension-replicator": "0.4.10-main.
|
|
63
|
-
"@dxos/teleport-extension-
|
|
64
|
-
"@dxos/
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/
|
|
67
|
-
"@dxos/
|
|
40
|
+
"level": "^8.0.1",
|
|
41
|
+
"level-transcoder": "^1.0.1",
|
|
42
|
+
"@dxos/async": "0.4.10-main.f635fb0",
|
|
43
|
+
"@dxos/automerge": "0.4.10-main.f635fb0",
|
|
44
|
+
"@dxos/context": "0.4.10-main.f635fb0",
|
|
45
|
+
"@dxos/codec-protobuf": "0.4.10-main.f635fb0",
|
|
46
|
+
"@dxos/crypto": "0.4.10-main.f635fb0",
|
|
47
|
+
"@dxos/echo-db": "0.4.10-main.f635fb0",
|
|
48
|
+
"@dxos/credentials": "0.4.10-main.f635fb0",
|
|
49
|
+
"@dxos/debug": "0.4.10-main.f635fb0",
|
|
50
|
+
"@dxos/hypercore": "0.4.10-main.f635fb0",
|
|
51
|
+
"@dxos/feed-store": "0.4.10-main.f635fb0",
|
|
52
|
+
"@dxos/invariant": "0.4.10-main.f635fb0",
|
|
53
|
+
"@dxos/keyring": "0.4.10-main.f635fb0",
|
|
54
|
+
"@dxos/keys": "0.4.10-main.f635fb0",
|
|
55
|
+
"@dxos/log": "0.4.10-main.f635fb0",
|
|
56
|
+
"@dxos/messaging": "0.4.10-main.f635fb0",
|
|
57
|
+
"@dxos/node-std": "0.4.10-main.f635fb0",
|
|
58
|
+
"@dxos/network-manager": "0.4.10-main.f635fb0",
|
|
59
|
+
"@dxos/random-access-storage": "0.4.10-main.f635fb0",
|
|
60
|
+
"@dxos/protocols": "0.4.10-main.f635fb0",
|
|
61
|
+
"@dxos/rpc": "0.4.10-main.f635fb0",
|
|
62
|
+
"@dxos/teleport": "0.4.10-main.f635fb0",
|
|
63
|
+
"@dxos/teleport-extension-automerge-replicator": "0.4.10-main.f635fb0",
|
|
64
|
+
"@dxos/teleport-extension-gossip": "0.4.10-main.f635fb0",
|
|
65
|
+
"@dxos/teleport-extension-object-sync": "0.4.10-main.f635fb0",
|
|
66
|
+
"@dxos/teleport-extension-replicator": "0.4.10-main.f635fb0",
|
|
67
|
+
"@dxos/timeframe": "0.4.10-main.f635fb0",
|
|
68
|
+
"@dxos/tracing": "0.4.10-main.f635fb0",
|
|
69
|
+
"@dxos/util": "0.4.10-main.f635fb0",
|
|
70
|
+
"@dxos/typings": "0.4.10-main.f635fb0"
|
|
68
71
|
},
|
|
69
72
|
"devDependencies": {
|
|
70
73
|
"fast-check": "^3.15.1",
|
|
@@ -25,35 +25,50 @@ import { arrayToBuffer, bufferToArray } from '@dxos/util';
|
|
|
25
25
|
import { AutomergeHost } from './automerge-host';
|
|
26
26
|
import { AutomergeStorageAdapter } from './automerge-storage-adapter';
|
|
27
27
|
import { MeshNetworkAdapter } from './mesh-network-adapter';
|
|
28
|
+
import { createTestLevel } from '../testing';
|
|
28
29
|
|
|
29
30
|
describe('AutomergeHost', () => {
|
|
30
|
-
test('can create documents', () => {
|
|
31
|
-
const
|
|
31
|
+
test('can create documents', async () => {
|
|
32
|
+
const level = createTestLevel();
|
|
33
|
+
await level.open();
|
|
34
|
+
afterTest(() => level.close());
|
|
35
|
+
const host = new AutomergeHost({
|
|
36
|
+
db: level.sublevel('automerge'),
|
|
37
|
+
});
|
|
38
|
+
await host.open();
|
|
39
|
+
afterTest(() => host.close());
|
|
32
40
|
|
|
33
41
|
const handle = host.repo.create();
|
|
34
42
|
handle.change((doc: any) => {
|
|
35
43
|
doc.text = 'Hello world';
|
|
36
44
|
});
|
|
45
|
+
await host.repo.flush();
|
|
37
46
|
expect(handle.docSync().text).toEqual('Hello world');
|
|
38
47
|
});
|
|
39
48
|
|
|
40
49
|
test('changes are preserved in storage', async () => {
|
|
41
|
-
const
|
|
50
|
+
const level = createTestLevel();
|
|
51
|
+
await level.open();
|
|
52
|
+
afterTest(() => level.close());
|
|
42
53
|
|
|
43
|
-
const host = new AutomergeHost({
|
|
54
|
+
const host = new AutomergeHost({ db: level.sublevel('automerge') });
|
|
55
|
+
await host.open();
|
|
44
56
|
const handle = host.repo.create();
|
|
45
57
|
handle.change((doc: any) => {
|
|
46
58
|
doc.text = 'Hello world';
|
|
47
59
|
});
|
|
48
60
|
const url = handle.url;
|
|
49
61
|
|
|
50
|
-
|
|
51
|
-
await
|
|
62
|
+
await host.repo.flush();
|
|
63
|
+
await host.close();
|
|
52
64
|
|
|
53
|
-
const host2 = new AutomergeHost({
|
|
65
|
+
const host2 = new AutomergeHost({ db: level.sublevel('automerge') });
|
|
66
|
+
await host2.open();
|
|
67
|
+
afterTest(() => host2.close());
|
|
54
68
|
const handle2 = host2.repo.find(url);
|
|
55
69
|
await handle2.whenReady();
|
|
56
70
|
expect(handle2.docSync().text).toEqual('Hello world');
|
|
71
|
+
await host2.repo.flush();
|
|
57
72
|
});
|
|
58
73
|
|
|
59
74
|
test('basic networking', async () => {
|
|
@@ -168,7 +183,6 @@ describe('AutomergeHost', () => {
|
|
|
168
183
|
const secondHandle = host.create();
|
|
169
184
|
secondHandle.change((doc: any) => (doc.text = 'Hello world'));
|
|
170
185
|
await host.find(secondHandle.url).whenReady();
|
|
171
|
-
// await sleep(100);
|
|
172
186
|
allowedDocs.push(secondHandle.documentId);
|
|
173
187
|
|
|
174
188
|
{
|