@dxos/echo-pipeline 0.5.9-next.a50ff17 → 0.6.0

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 (36) hide show
  1. package/dist/lib/browser/{chunk-I2J5TTHJ.mjs → chunk-HS77A4I4.mjs} +174 -23
  2. package/dist/lib/browser/{chunk-I2J5TTHJ.mjs.map → chunk-HS77A4I4.mjs.map} +4 -4
  3. package/dist/lib/browser/index.mjs +182 -126
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +11 -7
  7. package/dist/lib/browser/testing/index.mjs.map +1 -1
  8. package/dist/lib/node/{chunk-QPCNQ4ZK.cjs → chunk-Y5U7UXEL.cjs} +185 -34
  9. package/dist/lib/node/{chunk-QPCNQ4ZK.cjs.map → chunk-Y5U7UXEL.cjs.map} +4 -4
  10. package/dist/lib/node/index.cjs +230 -174
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +21 -17
  14. package/dist/lib/node/testing/index.cjs.map +1 -1
  15. package/dist/types/src/automerge/automerge-doc-loader.d.ts +2 -1
  16. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
  17. package/dist/types/src/automerge/automerge-host.d.ts +40 -3
  18. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  19. package/dist/types/src/automerge/echo-network-adapter.d.ts +2 -0
  20. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  21. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  22. package/dist/types/src/space/admission-discovery-extension.d.ts +30 -0
  23. package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -0
  24. package/dist/types/src/space/index.d.ts +1 -0
  25. package/dist/types/src/space/index.d.ts.map +1 -1
  26. package/dist/types/src/space/space-manager.d.ts +8 -0
  27. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  28. package/package.json +33 -33
  29. package/src/automerge/automerge-doc-loader.test.ts +8 -5
  30. package/src/automerge/automerge-doc-loader.ts +29 -20
  31. package/src/automerge/automerge-host.ts +96 -32
  32. package/src/automerge/echo-network-adapter.ts +10 -4
  33. package/src/automerge/mesh-echo-replicator.ts +7 -2
  34. package/src/space/admission-discovery-extension.ts +90 -0
  35. package/src/space/index.ts +1 -0
  36. package/src/space/space-manager.ts +46 -1
@@ -2,7 +2,7 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { synchronized, trackLeaks } from '@dxos/async';
5
+ import { synchronized, trackLeaks, Trigger } from '@dxos/async';
6
6
  import { type DelegateInvitationCredential, type MemberInfo } from '@dxos/credentials';
7
7
  import { failUndefined } from '@dxos/debug';
8
8
  import { type FeedStore } from '@dxos/feed-store';
@@ -12,10 +12,12 @@ 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';
15
+ import type { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
15
16
  import { type Teleport } from '@dxos/teleport';
16
17
  import { type BlobStore } from '@dxos/teleport-extension-object-sync';
17
18
  import { ComplexMap } from '@dxos/util';
18
19
 
20
+ import { CredentialRetrieverExtension } from './admission-discovery-extension';
19
21
  import { Space, createIdFromSpaceKey } from './space';
20
22
  import { SpaceProtocol, type SwarmIdentity } from './space-protocol';
21
23
  import { SnapshotManager, type SnapshotStore } from '../db-host';
@@ -47,6 +49,13 @@ export type ConstructSpaceParams = {
47
49
  onMemberRolesChanged: (member: MemberInfo[]) => Promise<void>;
48
50
  };
49
51
 
52
+ export type RequestSpaceAdmissionCredentialParams = {
53
+ spaceKey: PublicKey;
54
+ identityKey: PublicKey;
55
+ swarmIdentity: SwarmIdentity;
56
+ timeout: number;
57
+ };
58
+
50
59
  /**
51
60
  * Manages a collection of ECHO (Data) Spaces.
52
61
  */
@@ -126,4 +135,40 @@ export class SpaceManager {
126
135
  log.trace('dxos.echo.space-manager.construct-space', trace.end({ id: this._instanceId }));
127
136
  return space;
128
137
  }
138
+
139
+ public async requestSpaceAdmissionCredential(params: RequestSpaceAdmissionCredentialParams): Promise<Credential> {
140
+ const traceKey = 'dxos.echo.space-manager.request-space-admission';
141
+ log.trace(traceKey, trace.begin({ id: this._instanceId }));
142
+ log('requesting space admission credential...', { spaceKey: params.spaceKey });
143
+
144
+ const onCredentialResolved = new Trigger<Credential>();
145
+ const protocol = new SpaceProtocol({
146
+ topic: params.spaceKey,
147
+ swarmIdentity: params.swarmIdentity,
148
+ networkManager: this._networkManager,
149
+ onSessionAuth: (session: Teleport) => {
150
+ session.addExtension(
151
+ 'dxos.mesh.teleport.admission-discovery',
152
+ new CredentialRetrieverExtension(
153
+ { spaceKey: params.spaceKey, memberKey: params.identityKey },
154
+ onCredentialResolved,
155
+ ),
156
+ );
157
+ },
158
+ onAuthFailure: (session: Teleport) => session.close(),
159
+ blobStore: this._blobStore,
160
+ });
161
+
162
+ try {
163
+ await protocol.start();
164
+ const credential = await onCredentialResolved.wait({ timeout: params.timeout });
165
+ log.trace(traceKey, trace.end({ id: this._instanceId }));
166
+ return credential;
167
+ } catch (err: any) {
168
+ log.trace(traceKey, trace.error({ id: this._instanceId, error: err }));
169
+ throw err;
170
+ } finally {
171
+ await protocol.stop();
172
+ }
173
+ }
129
174
  }