@dxos/echo-pipeline 0.5.6 → 0.5.7-main.1b7f312
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-GANAND63.mjs → chunk-BE5QQHWH.mjs} +43 -15
- package/dist/lib/browser/{chunk-GANAND63.mjs.map → chunk-BE5QQHWH.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +12 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +4 -4
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-M475BGBI.cjs → chunk-ZELCNJ3D.cjs} +54 -25
- package/dist/lib/node/chunk-ZELCNJ3D.cjs.map +7 -0
- package/dist/lib/node/index.cjs +33 -29
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +13 -13
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
- package/dist/types/src/automerge/migrations.d.ts.map +1 -1
- package/dist/types/src/space/space-manager.d.ts +2 -2
- package/dist/types/src/space/space-manager.d.ts.map +1 -1
- package/dist/types/src/space/space-protocol.d.ts +2 -2
- package/dist/types/src/space/space-protocol.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +9 -1
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/automerge/automerge-doc-loader.test.ts +2 -1
- package/src/automerge/automerge-host.ts +12 -5
- package/src/automerge/migrations.ts +2 -1
- package/src/space/space-manager.ts +6 -4
- package/src/space/space-protocol.test.ts +3 -3
- package/src/space/space-protocol.ts +3 -3
- package/src/space/space.ts +30 -1
- package/src/testing/test-agent-builder.ts +4 -4
- package/dist/lib/node/chunk-M475BGBI.cjs.map +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-agent-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-agent-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAA0B,
|
|
1
|
+
{"version":3,"file":"test-agent-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-agent-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAA0B,mBAAmB,EAAoC,MAAM,uBAAuB,CAAC;AACtH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGxE,OAAO,EAA8B,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAA0C,YAAY,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAE3G,MAAM,MAAM,sBAAsB,GAAG,MAAM,mBAAmB,CAAC;AAE/D,eAAO,MAAM,4BAA4B,kBACvB,0BAA0B,KAAG,sBAKzC,CAAC;AAEP,eAAO,MAAM,+BAA+B,cAC9B,MAAM,KAAG,sBAKjB,CAAC;AAEP,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyB;gBAErD,EAAE,OAAO,EAAE,sBAAsB,EAAE,GAAE,uBAA4B;IAMvE,KAAK;IAIX,IAAI,MAAM,gBAET;IAED,QAAQ,CAAC,SAAS,EAAE,SAAS;IAIvB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;CAYvC;AAED;;GAEG;AACH,qBAAa,SAAS;IAuBlB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY;aACb,WAAW,EAAE,SAAS;aACtB,SAAS,EAAE,SAAS;IAzBtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAE5E,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAElD,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,IAAI,aAAa,kBAEhB;IAED,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,IAAI,aAAa,kBAEhB;IAED,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,IAAI,SAAS,cAEZ;gBAGkB,uBAAuB,EAAE,sBAAsB,EAC/C,YAAY,EAAE,eAAe,EAC9B,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,SAAS;IAOhC,KAAK;IAIX,IAAI,MAAM,YAET;IAED,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAI5B,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,IAAI,YAAY,iBAQf;IAEK,WAAW,CACf,WAAW,GAAE,SAA4B,EACzC,QAAQ,CAAC,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,SAAS,EACtB,OAAO,CAAC,EAAE,SAAS,EACnB,YAAY,UAAQ,GACnB,OAAO,CAAC,KAAK,CAAC;IAoDjB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IAmBrD,YAAY;IAMZ,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM;IASxB,YAAY,CAAC,KAAK,EAAE,KAAK;CAchC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/echo-pipeline",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7-main.1b7f312",
|
|
4
4
|
"description": "ECHO database.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -39,38 +39,38 @@
|
|
|
39
39
|
"crc-32": "^1.2.2",
|
|
40
40
|
"level": "^8.0.1",
|
|
41
41
|
"level-transcoder": "^1.0.1",
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/crypto": "0.5.
|
|
48
|
-
"@dxos/debug": "0.5.
|
|
49
|
-
"@dxos/echo-protocol": "0.5.
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/
|
|
52
|
-
"@dxos/hypercore": "0.5.
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/
|
|
55
|
-
"@dxos/
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/
|
|
58
|
-
"@dxos/
|
|
59
|
-
"@dxos/
|
|
60
|
-
"@dxos/
|
|
61
|
-
"@dxos/
|
|
62
|
-
"@dxos/
|
|
63
|
-
"@dxos/
|
|
64
|
-
"@dxos/
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/teleport-extension-automerge-replicator": "0.5.
|
|
67
|
-
"@dxos/teleport-extension-gossip": "0.5.
|
|
68
|
-
"@dxos/teleport-extension-object-sync": "0.5.
|
|
69
|
-
"@dxos/teleport-extension-replicator": "0.5.
|
|
70
|
-
"@dxos/tracing": "0.5.
|
|
71
|
-
"@dxos/timeframe": "0.5.
|
|
72
|
-
"@dxos/typings": "0.5.
|
|
73
|
-
"@dxos/util": "0.5.
|
|
42
|
+
"@dxos/automerge": "0.5.7-main.1b7f312",
|
|
43
|
+
"@dxos/codec-protobuf": "0.5.7-main.1b7f312",
|
|
44
|
+
"@dxos/async": "0.5.7-main.1b7f312",
|
|
45
|
+
"@dxos/credentials": "0.5.7-main.1b7f312",
|
|
46
|
+
"@dxos/context": "0.5.7-main.1b7f312",
|
|
47
|
+
"@dxos/crypto": "0.5.7-main.1b7f312",
|
|
48
|
+
"@dxos/debug": "0.5.7-main.1b7f312",
|
|
49
|
+
"@dxos/echo-protocol": "0.5.7-main.1b7f312",
|
|
50
|
+
"@dxos/echo-schema": "0.5.7-main.1b7f312",
|
|
51
|
+
"@dxos/feed-store": "0.5.7-main.1b7f312",
|
|
52
|
+
"@dxos/hypercore": "0.5.7-main.1b7f312",
|
|
53
|
+
"@dxos/invariant": "0.5.7-main.1b7f312",
|
|
54
|
+
"@dxos/keyring": "0.5.7-main.1b7f312",
|
|
55
|
+
"@dxos/indexing": "0.5.7-main.1b7f312",
|
|
56
|
+
"@dxos/kv-store": "0.5.7-main.1b7f312",
|
|
57
|
+
"@dxos/log": "0.5.7-main.1b7f312",
|
|
58
|
+
"@dxos/keys": "0.5.7-main.1b7f312",
|
|
59
|
+
"@dxos/messaging": "0.5.7-main.1b7f312",
|
|
60
|
+
"@dxos/network-manager": "0.5.7-main.1b7f312",
|
|
61
|
+
"@dxos/protocols": "0.5.7-main.1b7f312",
|
|
62
|
+
"@dxos/node-std": "0.5.7-main.1b7f312",
|
|
63
|
+
"@dxos/random-access-storage": "0.5.7-main.1b7f312",
|
|
64
|
+
"@dxos/rpc": "0.5.7-main.1b7f312",
|
|
65
|
+
"@dxos/teleport": "0.5.7-main.1b7f312",
|
|
66
|
+
"@dxos/teleport-extension-automerge-replicator": "0.5.7-main.1b7f312",
|
|
67
|
+
"@dxos/teleport-extension-gossip": "0.5.7-main.1b7f312",
|
|
68
|
+
"@dxos/teleport-extension-object-sync": "0.5.7-main.1b7f312",
|
|
69
|
+
"@dxos/teleport-extension-replicator": "0.5.7-main.1b7f312",
|
|
70
|
+
"@dxos/tracing": "0.5.7-main.1b7f312",
|
|
71
|
+
"@dxos/timeframe": "0.5.7-main.1b7f312",
|
|
72
|
+
"@dxos/typings": "0.5.7-main.1b7f312",
|
|
73
|
+
"@dxos/util": "0.5.7-main.1b7f312"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"fast-check": "^3.19.0",
|
|
@@ -8,6 +8,7 @@ import { sleep } from '@dxos/async';
|
|
|
8
8
|
import { Repo } from '@dxos/automerge/automerge-repo';
|
|
9
9
|
import { Context } from '@dxos/context';
|
|
10
10
|
import { type SpaceDoc } from '@dxos/echo-protocol';
|
|
11
|
+
import { generateEchoId } from '@dxos/echo-schema';
|
|
11
12
|
import { PublicKey } from '@dxos/keys';
|
|
12
13
|
import { describe, test } from '@dxos/test';
|
|
13
14
|
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
|
|
20
21
|
const ctx = new Context();
|
|
21
22
|
const SPACE_KEY = PublicKey.random();
|
|
22
|
-
const randomId = () =>
|
|
23
|
+
const randomId = () => generateEchoId();
|
|
23
24
|
describe('AutomergeDocumentLoader', () => {
|
|
24
25
|
test('space access is set on root doc handle and it is accessible', async () => {
|
|
25
26
|
const { loader, spaceRootDocHandle } = await setupTest();
|
|
@@ -76,6 +76,9 @@ export class AutomergeHost {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
async open() {
|
|
79
|
+
// TODO(burdon): Should this be stable?
|
|
80
|
+
this._peerId = `host-${PublicKey.random().toHex()}` as PeerId;
|
|
81
|
+
|
|
79
82
|
// TODO(mykola): remove this before 0.6 release.
|
|
80
83
|
this._directory && (await levelMigration({ db: this._db, directory: this._directory }));
|
|
81
84
|
this._storage = new LevelDBStorageAdapter({
|
|
@@ -86,20 +89,24 @@ export class AutomergeHost {
|
|
|
86
89
|
},
|
|
87
90
|
});
|
|
88
91
|
await this._storage.open?.();
|
|
89
|
-
this._peerId = `host-${PublicKey.random().toHex()}` as PeerId;
|
|
90
92
|
|
|
91
93
|
this._clientNetwork = new LocalHostNetworkAdapter();
|
|
92
94
|
|
|
95
|
+
// Construct the automerge repo.
|
|
93
96
|
this._repo = new Repo({
|
|
94
97
|
peerId: this._peerId as PeerId,
|
|
95
|
-
network: [this._clientNetwork, this._echoNetworkAdapter],
|
|
96
|
-
storage: this._storage,
|
|
97
|
-
|
|
98
98
|
sharePolicy: this._sharePolicy.bind(this),
|
|
99
|
+
storage: this._storage,
|
|
100
|
+
network: [
|
|
101
|
+
// Downstream client.
|
|
102
|
+
this._clientNetwork,
|
|
103
|
+
// Upstream swarm.
|
|
104
|
+
this._echoNetworkAdapter,
|
|
105
|
+
],
|
|
99
106
|
});
|
|
107
|
+
|
|
100
108
|
this._clientNetwork.ready();
|
|
101
109
|
await this._echoNetworkAdapter.open();
|
|
102
|
-
|
|
103
110
|
await this._clientNetwork.whenConnected();
|
|
104
111
|
await this._echoNetworkAdapter.whenConnected();
|
|
105
112
|
}
|
|
@@ -12,7 +12,7 @@ import { AutomergeStorageAdapter } from './automerge-storage-adapter';
|
|
|
12
12
|
import { encodingOptions } from './leveldb-storage-adapter';
|
|
13
13
|
|
|
14
14
|
export const levelMigration = async ({ db, directory }: { db: SublevelDB; directory: Directory }) => {
|
|
15
|
-
// Note: Make
|
|
15
|
+
// Note: Make auto-migration from previous storage to leveldb here.
|
|
16
16
|
const isNewLevel = !(await db
|
|
17
17
|
.iterator<StorageKey, Uint8Array>({
|
|
18
18
|
...encodingOptions,
|
|
@@ -32,6 +32,7 @@ export const levelMigration = async ({ db, directory }: { db: SublevelDB; direct
|
|
|
32
32
|
if (chunks.length === 0) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
+
|
|
35
36
|
const batch = db.batch();
|
|
36
37
|
log.info('found chunks on old storage adapter', { chunks: chunks.length });
|
|
37
38
|
for (const { key, data } of await oldStorageAdapter.loadRange([])) {
|
|
@@ -8,7 +8,7 @@ import { failUndefined } from '@dxos/debug';
|
|
|
8
8
|
import { type FeedStore } from '@dxos/feed-store';
|
|
9
9
|
import { PublicKey } from '@dxos/keys';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
|
-
import { type
|
|
11
|
+
import { type SwarmNetworkManager } from '@dxos/network-manager';
|
|
12
12
|
import { trace } from '@dxos/protocols';
|
|
13
13
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
14
14
|
import { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
@@ -16,14 +16,14 @@ import { type Teleport } from '@dxos/teleport';
|
|
|
16
16
|
import { type BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
17
17
|
import { ComplexMap } from '@dxos/util';
|
|
18
18
|
|
|
19
|
-
import { Space } from './space';
|
|
19
|
+
import { Space, createIdFromSpaceKey } from './space';
|
|
20
20
|
import { SpaceProtocol, type SwarmIdentity } from './space-protocol';
|
|
21
21
|
import { SnapshotManager, type SnapshotStore } from '../db-host';
|
|
22
22
|
import { type MetadataStore } from '../metadata';
|
|
23
23
|
|
|
24
24
|
export type SpaceManagerParams = {
|
|
25
25
|
feedStore: FeedStore<FeedMessage>;
|
|
26
|
-
networkManager:
|
|
26
|
+
networkManager: SwarmNetworkManager;
|
|
27
27
|
metadataStore: MetadataStore;
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -54,7 +54,7 @@ export type ConstructSpaceParams = {
|
|
|
54
54
|
export class SpaceManager {
|
|
55
55
|
private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);
|
|
56
56
|
private readonly _feedStore: FeedStore<FeedMessage>;
|
|
57
|
-
private readonly _networkManager:
|
|
57
|
+
private readonly _networkManager: SwarmNetworkManager;
|
|
58
58
|
private readonly _metadataStore: MetadataStore;
|
|
59
59
|
private readonly _snapshotStore: SnapshotStore;
|
|
60
60
|
private readonly _blobStore: BlobStore;
|
|
@@ -98,6 +98,7 @@ export class SpaceManager {
|
|
|
98
98
|
const genesisFeed = await this._feedStore.openFeed(metadata.genesisFeedKey ?? failUndefined());
|
|
99
99
|
|
|
100
100
|
const spaceKey = metadata.key;
|
|
101
|
+
const spaceId = await createIdFromSpaceKey(spaceKey);
|
|
101
102
|
const protocol = new SpaceProtocol({
|
|
102
103
|
topic: spaceKey,
|
|
103
104
|
swarmIdentity,
|
|
@@ -109,6 +110,7 @@ export class SpaceManager {
|
|
|
109
110
|
const snapshotManager = new SnapshotManager(this._snapshotStore, this._blobStore, protocol.blobSync);
|
|
110
111
|
|
|
111
112
|
const space = new Space({
|
|
113
|
+
id: spaceId,
|
|
112
114
|
spaceKey,
|
|
113
115
|
protocol,
|
|
114
116
|
genesisFeed,
|
|
@@ -7,7 +7,7 @@ import waitForExpect from 'wait-for-expect';
|
|
|
7
7
|
|
|
8
8
|
import { PublicKey } from '@dxos/keys';
|
|
9
9
|
import { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';
|
|
10
|
-
import { MemoryTransportFactory,
|
|
10
|
+
import { MemoryTransportFactory, SwarmNetworkManager } from '@dxos/network-manager';
|
|
11
11
|
import { StorageType, createStorage } from '@dxos/random-access-storage';
|
|
12
12
|
import { BlobStore } from '@dxos/teleport-extension-object-sync';
|
|
13
13
|
import { describe, test, afterTest } from '@dxos/test';
|
|
@@ -56,7 +56,7 @@ describe('space/space-protocol', () => {
|
|
|
56
56
|
credentialAuthenticator: async () => false, // Reject everyone.
|
|
57
57
|
},
|
|
58
58
|
blobStore: new BlobStore(createStorage({ type: StorageType.RAM }).createDirectory()),
|
|
59
|
-
networkManager: new
|
|
59
|
+
networkManager: new SwarmNetworkManager({
|
|
60
60
|
signalManager: new MemorySignalManager(signalContext),
|
|
61
61
|
transportFactory: MemoryTransportFactory,
|
|
62
62
|
}),
|
|
@@ -70,7 +70,7 @@ describe('space/space-protocol', () => {
|
|
|
70
70
|
credentialAuthenticator: MOCK_AUTH_VERIFIER,
|
|
71
71
|
},
|
|
72
72
|
blobStore: new BlobStore(createStorage({ type: StorageType.RAM }).createDirectory()),
|
|
73
|
-
networkManager: new
|
|
73
|
+
networkManager: new SwarmNetworkManager({
|
|
74
74
|
signalManager: new MemorySignalManager(signalContext),
|
|
75
75
|
transportFactory: MemoryTransportFactory,
|
|
76
76
|
}),
|
|
@@ -9,7 +9,7 @@ import { PublicKey } from '@dxos/keys';
|
|
|
9
9
|
import { log, logInfo } from '@dxos/log';
|
|
10
10
|
import {
|
|
11
11
|
MMSTTopology,
|
|
12
|
-
type
|
|
12
|
+
type SwarmNetworkManager,
|
|
13
13
|
type SwarmConnection,
|
|
14
14
|
type WireProtocol,
|
|
15
15
|
type WireProtocolParams,
|
|
@@ -37,7 +37,7 @@ export interface SwarmIdentity {
|
|
|
37
37
|
export type SpaceProtocolOptions = {
|
|
38
38
|
topic: PublicKey; // TODO(burdon): Rename?
|
|
39
39
|
swarmIdentity: SwarmIdentity;
|
|
40
|
-
networkManager:
|
|
40
|
+
networkManager: SwarmNetworkManager;
|
|
41
41
|
|
|
42
42
|
blobStore: BlobStore;
|
|
43
43
|
|
|
@@ -54,7 +54,7 @@ export type SpaceProtocolOptions = {
|
|
|
54
54
|
*/
|
|
55
55
|
@trace.resource()
|
|
56
56
|
export class SpaceProtocol {
|
|
57
|
-
private readonly _networkManager:
|
|
57
|
+
private readonly _networkManager: SwarmNetworkManager;
|
|
58
58
|
private readonly _swarmIdentity: SwarmIdentity;
|
|
59
59
|
private readonly _onSessionAuth?: (session: Teleport) => void;
|
|
60
60
|
private readonly _onAuthFailure?: (session: Teleport) => void;
|
package/src/space/space.ts
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
import { Event, Mutex, synchronized, trackLeaks } from '@dxos/async';
|
|
6
6
|
import { type Context, LifecycleState, Resource } from '@dxos/context';
|
|
7
7
|
import { type DelegateInvitationCredential, type FeedInfo, type MemberInfo } from '@dxos/credentials';
|
|
8
|
+
import { subtleCrypto } from '@dxos/crypto';
|
|
8
9
|
import { type FeedOptions, type FeedWrapper } from '@dxos/feed-store';
|
|
9
10
|
import { invariant } from '@dxos/invariant';
|
|
10
|
-
import { type PublicKey } from '@dxos/keys';
|
|
11
|
+
import { SpaceId, type PublicKey } from '@dxos/keys';
|
|
11
12
|
import { log, logInfo } from '@dxos/log';
|
|
12
13
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
13
14
|
import { AdmittedFeed, type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
@@ -25,6 +26,7 @@ import { type PipelineAccessor } from '../pipeline';
|
|
|
25
26
|
type FeedProvider = (feedKey: PublicKey, opts?: FeedOptions) => Promise<FeedWrapper<FeedMessage>>;
|
|
26
27
|
|
|
27
28
|
export type SpaceParams = {
|
|
29
|
+
id: SpaceId;
|
|
28
30
|
spaceKey: PublicKey;
|
|
29
31
|
protocol: SpaceProtocol;
|
|
30
32
|
genesisFeed: FeedWrapper<FeedMessage>;
|
|
@@ -59,6 +61,7 @@ export class Space extends Resource {
|
|
|
59
61
|
@trace.info()
|
|
60
62
|
public readonly protocol: SpaceProtocol;
|
|
61
63
|
|
|
64
|
+
private readonly _id: SpaceId;
|
|
62
65
|
private readonly _key: PublicKey;
|
|
63
66
|
private readonly _genesisFeedKey: PublicKey;
|
|
64
67
|
private readonly _feedProvider: FeedProvider;
|
|
@@ -73,6 +76,7 @@ export class Space extends Resource {
|
|
|
73
76
|
constructor(params: SpaceParams) {
|
|
74
77
|
super();
|
|
75
78
|
invariant(params.spaceKey && params.feedProvider);
|
|
79
|
+
this._id = params.id;
|
|
76
80
|
this._key = params.spaceKey;
|
|
77
81
|
this._genesisFeedKey = params.genesisFeed.key;
|
|
78
82
|
this._feedProvider = params.feedProvider;
|
|
@@ -120,6 +124,12 @@ export class Space extends Resource {
|
|
|
120
124
|
this.protocol.addFeed(params.genesisFeed);
|
|
121
125
|
}
|
|
122
126
|
|
|
127
|
+
@logInfo
|
|
128
|
+
@trace.info()
|
|
129
|
+
get id() {
|
|
130
|
+
return this._id;
|
|
131
|
+
}
|
|
132
|
+
|
|
123
133
|
@logInfo
|
|
124
134
|
@trace.info()
|
|
125
135
|
get key() {
|
|
@@ -199,3 +209,22 @@ export class Space extends Resource {
|
|
|
199
209
|
log('closed');
|
|
200
210
|
}
|
|
201
211
|
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Space keys are generated by creating a keypair, and then taking the first 20 bytes of the SHA-256 hash of the public key and encoding them to multibase RFC4648 base-32 format (prefixed with B, see Multibase Table).
|
|
215
|
+
* Inspired by how ethereum addresses are derived.
|
|
216
|
+
*/
|
|
217
|
+
export const createIdFromSpaceKey = async (spaceKey: PublicKey): Promise<SpaceId> => {
|
|
218
|
+
// Sanity check.
|
|
219
|
+
invariant(spaceKey.length === EXPECTED_SPACE_KEY_LENGTH);
|
|
220
|
+
|
|
221
|
+
const digest = await subtleCrypto.digest('SHA-256', spaceKey.asUint8Array());
|
|
222
|
+
|
|
223
|
+
const bytes = new Uint8Array(digest).slice(0, SpaceId.byteLength);
|
|
224
|
+
return SpaceId.encode(bytes);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Length of the ECDSA P-256 public key from WebCrypto exported as "raw".
|
|
229
|
+
*/
|
|
230
|
+
const EXPECTED_SPACE_KEY_LENGTH = 65;
|
|
@@ -8,7 +8,7 @@ import { type FeedStore } from '@dxos/feed-store';
|
|
|
8
8
|
import { type Keyring } from '@dxos/keyring';
|
|
9
9
|
import { PublicKey } from '@dxos/keys';
|
|
10
10
|
import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';
|
|
11
|
-
import { MemoryTransportFactory,
|
|
11
|
+
import { MemoryTransportFactory, SwarmNetworkManager, createSimplePeerTransportFactory } from '@dxos/network-manager';
|
|
12
12
|
import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
|
|
13
13
|
import { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
14
14
|
import { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';
|
|
@@ -22,12 +22,12 @@ import { SnapshotStore } from '../db-host';
|
|
|
22
22
|
import { MetadataStore } from '../metadata';
|
|
23
23
|
import { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, SpaceManager, SpaceProtocol, type Space } from '../space';
|
|
24
24
|
|
|
25
|
-
export type NetworkManagerProvider = () =>
|
|
25
|
+
export type NetworkManagerProvider = () => SwarmNetworkManager;
|
|
26
26
|
|
|
27
27
|
export const MemoryNetworkManagerProvider =
|
|
28
28
|
(signalContext: MemorySignalManagerContext): NetworkManagerProvider =>
|
|
29
29
|
() =>
|
|
30
|
-
new
|
|
30
|
+
new SwarmNetworkManager({
|
|
31
31
|
signalManager: new MemorySignalManager(signalContext),
|
|
32
32
|
transportFactory: MemoryTransportFactory,
|
|
33
33
|
});
|
|
@@ -35,7 +35,7 @@ export const MemoryNetworkManagerProvider =
|
|
|
35
35
|
export const WebsocketNetworkManagerProvider =
|
|
36
36
|
(signalUrl: string): NetworkManagerProvider =>
|
|
37
37
|
() =>
|
|
38
|
-
new
|
|
38
|
+
new SwarmNetworkManager({
|
|
39
39
|
signalManager: new WebsocketSignalManager([{ server: signalUrl }]),
|
|
40
40
|
transportFactory: createSimplePeerTransportFactory(),
|
|
41
41
|
});
|