@dxos/echo-db 2.33.5-dev.97a81dd0 → 2.33.5-dev.bbe0c471

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 (82) hide show
  1. package/dist/src/echo.d.ts +1 -0
  2. package/dist/src/echo.d.ts.map +1 -1
  3. package/dist/src/echo.js +7 -18
  4. package/dist/src/echo.js.map +1 -1
  5. package/dist/src/halo/halo-factory.js +4 -4
  6. package/dist/src/halo/halo-factory.js.map +1 -1
  7. package/dist/src/halo/halo-party.d.ts +3 -3
  8. package/dist/src/halo/halo-party.d.ts.map +1 -1
  9. package/dist/src/halo/halo-party.js +5 -5
  10. package/dist/src/halo/halo-party.js.map +1 -1
  11. package/dist/src/halo/halo.test.js +4 -3
  12. package/dist/src/halo/halo.test.js.map +1 -1
  13. package/dist/src/invitations/greeting-responder.d.ts +6 -4
  14. package/dist/src/invitations/greeting-responder.d.ts.map +1 -1
  15. package/dist/src/invitations/greeting-responder.js +3 -2
  16. package/dist/src/invitations/greeting-responder.js.map +1 -1
  17. package/dist/src/invitations/invitation-factory.d.ts +5 -2
  18. package/dist/src/invitations/invitation-factory.d.ts.map +1 -1
  19. package/dist/src/invitations/invitation-factory.js +4 -3
  20. package/dist/src/invitations/invitation-factory.js.map +1 -1
  21. package/dist/src/parties/data-party.d.ts +3 -3
  22. package/dist/src/parties/data-party.d.ts.map +1 -1
  23. package/dist/src/parties/data-party.js +5 -5
  24. package/dist/src/parties/data-party.js.map +1 -1
  25. package/dist/src/parties/data-party.test.js +13 -12
  26. package/dist/src/parties/data-party.test.js.map +1 -1
  27. package/dist/src/parties/party-factory.js +9 -9
  28. package/dist/src/parties/party-factory.js.map +1 -1
  29. package/dist/src/parties/party-manager.test.js +7 -6
  30. package/dist/src/parties/party-manager.test.js.map +1 -1
  31. package/dist/src/pipeline/metadata-store.d.ts +3 -3
  32. package/dist/src/pipeline/metadata-store.d.ts.map +1 -1
  33. package/dist/src/pipeline/metadata-store.js +5 -5
  34. package/dist/src/pipeline/metadata-store.js.map +1 -1
  35. package/dist/src/pipeline/metadata-store.test.js +8 -4
  36. package/dist/src/pipeline/metadata-store.test.js.map +1 -1
  37. package/dist/src/pipeline/party-core.d.ts +2 -2
  38. package/dist/src/pipeline/party-core.d.ts.map +1 -1
  39. package/dist/src/pipeline/party-core.js +5 -9
  40. package/dist/src/pipeline/party-core.js.map +1 -1
  41. package/dist/src/pipeline/party-core.test.js +15 -15
  42. package/dist/src/pipeline/party-core.test.js.map +1 -1
  43. package/dist/src/pipeline/party-processor.d.ts +3 -9
  44. package/dist/src/pipeline/party-processor.d.ts.map +1 -1
  45. package/dist/src/pipeline/party-processor.js +0 -8
  46. package/dist/src/pipeline/party-processor.js.map +1 -1
  47. package/dist/src/pipeline/pipeline.test.js +2 -2
  48. package/dist/src/pipeline/pipeline.test.js.map +1 -1
  49. package/dist/src/protocol/authenticator.d.ts +3 -3
  50. package/dist/src/protocol/authenticator.d.ts.map +1 -1
  51. package/dist/src/protocol/authenticator.js +2 -2
  52. package/dist/src/protocol/authenticator.js.map +1 -1
  53. package/dist/src/protocol/authenticator.test.js +1 -4
  54. package/dist/src/protocol/authenticator.test.js.map +1 -1
  55. package/dist/src/snapshots/snapshot-store.d.ts +3 -3
  56. package/dist/src/snapshots/snapshot-store.d.ts.map +1 -1
  57. package/dist/src/snapshots/snapshot-store.js +5 -5
  58. package/dist/src/snapshots/snapshot-store.js.map +1 -1
  59. package/dist/src/snapshots/snapshot-store.test.js +1 -1
  60. package/dist/src/snapshots/snapshot-store.test.js.map +1 -1
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +17 -17
  63. package/src/echo.ts +8 -18
  64. package/src/halo/halo-factory.ts +4 -4
  65. package/src/halo/halo-party.ts +12 -7
  66. package/src/halo/halo.test.ts +4 -3
  67. package/src/invitations/greeting-responder.ts +7 -5
  68. package/src/invitations/invitation-factory.ts +8 -5
  69. package/src/parties/data-party.test.ts +14 -12
  70. package/src/parties/data-party.ts +8 -7
  71. package/src/parties/party-factory.ts +9 -9
  72. package/src/parties/party-manager.test.ts +9 -6
  73. package/src/pipeline/metadata-store.test.ts +8 -4
  74. package/src/pipeline/metadata-store.ts +5 -5
  75. package/src/pipeline/party-core.test.ts +15 -15
  76. package/src/pipeline/party-core.ts +6 -11
  77. package/src/pipeline/party-processor.ts +2 -18
  78. package/src/pipeline/pipeline.test.ts +2 -2
  79. package/src/protocol/authenticator.test.ts +1 -4
  80. package/src/protocol/authenticator.ts +8 -4
  81. package/src/snapshots/snapshot-store.test.ts +1 -1
  82. package/src/snapshots/snapshot-store.ts +5 -6
@@ -8,7 +8,7 @@ import { synchronized } from '@dxos/async';
8
8
  import { KeyHint, KeyType, Message as HaloMessage } from '@dxos/credentials';
9
9
  import { PublicKey } from '@dxos/crypto';
10
10
  import { timed } from '@dxos/debug';
11
- import { createFeedWriter, DatabaseSnapshot, PartyKey, PartySnapshot, Timeframe, WriteReceipt } from '@dxos/echo-protocol';
11
+ import { createFeedWriter, DatabaseSnapshot, FeedWriter, PartyKey, PartySnapshot, Timeframe } from '@dxos/echo-protocol';
12
12
  import { ModelFactory } from '@dxos/model-factory';
13
13
  import { SubscriptionGroup } from '@dxos/util';
14
14
 
@@ -99,6 +99,11 @@ export class PartyCore {
99
99
  return feed;
100
100
  }
101
101
 
102
+ get credentialsWriter (): FeedWriter<HaloMessage> {
103
+ assert(this._pipeline?.outboundHaloStream, 'Party not open');
104
+ return this._pipeline?.outboundHaloStream;
105
+ }
106
+
102
107
  /**
103
108
  * Opens the pipeline and connects the streams.
104
109
  */
@@ -147,11 +152,6 @@ export class PartyCore {
147
152
  // TODO(burdon): Support read-only parties.
148
153
  const [readStream, writeStream] = await this._pipeline.open();
149
154
 
150
- // Must happen after open.
151
- if (this._pipeline.outboundHaloStream) {
152
- this._partyProcessor.setOutboundStream(this._pipeline.outboundHaloStream);
153
- }
154
-
155
155
  //
156
156
  // Database
157
157
  //
@@ -202,11 +202,6 @@ export class PartyCore {
202
202
  return this;
203
203
  }
204
204
 
205
- writeCredentialsMessage (message: HaloMessage): Promise<WriteReceipt> {
206
- assert(this._partyProcessor, 'Party not open');
207
- return this._partyProcessor?.writeHaloMessage(message);
208
- }
209
-
210
205
  /**
211
206
  * Create a snapshot of the current state.
212
207
  */
@@ -16,15 +16,11 @@ import {
16
16
  SignedMessage
17
17
  } from '@dxos/credentials';
18
18
  import { PublicKey } from '@dxos/crypto';
19
- import { FeedKey, FeedWriter, IHaloStream, PartyKey, HaloStateSnapshot, WriteReceipt } from '@dxos/echo-protocol';
19
+ import { FeedKey, IHaloStream, PartyKey, HaloStateSnapshot } from '@dxos/echo-protocol';
20
20
  import { jsonReplacer } from '@dxos/util';
21
21
 
22
22
  const log = debug('dxos:echo-db:party-processor');
23
23
 
24
- export interface CredentialWriter {
25
- writeHaloMessage (message: HaloMessage): Promise<WriteReceipt>
26
- }
27
-
28
24
  export interface CredentialProcessor {
29
25
  processMessage (message: IHaloStream): Promise<void>
30
26
  }
@@ -47,11 +43,9 @@ export interface PartyStateProvider {
47
43
  /**
48
44
  * TODO(burdon): Wrapper/Bridge between HALO APIs.
49
45
  */
50
- export class PartyProcessor implements CredentialWriter, CredentialProcessor, PartyStateProvider {
46
+ export class PartyProcessor implements CredentialProcessor, PartyStateProvider {
51
47
  private readonly _state: PartyState;
52
48
 
53
- private _outboundHaloStream: FeedWriter<HaloMessage> | undefined;
54
-
55
49
  readonly feedAdded = new Event<FeedKey>()
56
50
 
57
51
  public readonly keyOrInfoAdded = new Event<PublicKey>();
@@ -148,16 +142,6 @@ export class PartyProcessor implements CredentialWriter, CredentialProcessor, Pa
148
142
  await this._state.processMessages([data]);
149
143
  }
150
144
 
151
- setOutboundStream (stream: FeedWriter<HaloMessage>) {
152
- this._outboundHaloStream = stream;
153
- }
154
-
155
- async writeHaloMessage (message: HaloMessage): Promise<WriteReceipt> {
156
- assert(this._outboundHaloStream, 'Party is closed or read-only');
157
- // TODO(marik-d): Wait for the message to be processed?
158
- return this._outboundHaloStream.write(message);
159
- }
160
-
161
145
  makeSnapshot (): HaloStateSnapshot {
162
146
  return {
163
147
  messages: this._haloMessages
@@ -25,7 +25,7 @@ const log = debug('dxos:echo:pipeline:test');
25
25
  describe('pipeline', () => {
26
26
  test('streams', async () => {
27
27
  const storage = createStorage('', StorageType.RAM);
28
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
28
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
29
29
  const feedKeys: Uint8Array[] = [];
30
30
  const feedSelector: FeedSelector = descriptor => !!feedKeys.find(key => descriptor.key.equals(key));
31
31
  const feedReadStream = new FeedStoreIterator(feedSelector, () => 0, new Timeframe());
@@ -87,7 +87,7 @@ describe('pipeline', () => {
87
87
 
88
88
  test('writing', async () => {
89
89
  const storage = createStorage('', StorageType.RAM);
90
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
90
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
91
91
  const feedReadStream = new FeedStoreIterator(() => true, () => 0, new Timeframe());
92
92
 
93
93
  const { publicKey, secretKey } = createKeyPair();
@@ -6,7 +6,6 @@ import expect from 'expect';
6
6
  import { it as test } from 'mocha';
7
7
 
8
8
  import { createAuthMessage, createKeyAdmitMessage, createPartyGenesisMessage, Keyring, KeyType } from '@dxos/credentials';
9
- import { MockFeedWriter } from '@dxos/echo-protocol';
10
9
 
11
10
  import { PartyProcessor } from '../pipeline';
12
11
  import { createAuthenticator } from './authenticator';
@@ -23,8 +22,6 @@ describe('authenticator', () => {
23
22
  const signer = CredentialsSigner.createDirectDeviceSigner(keyring);
24
23
 
25
24
  const partyProcessor = new PartyProcessor(partyKey.publicKey);
26
- const feed = new MockFeedWriter();
27
- partyProcessor.setOutboundStream(feed);
28
25
  await partyProcessor.processMessage({
29
26
  data: createPartyGenesisMessage(
30
27
  keyring,
@@ -53,7 +50,7 @@ describe('authenticator', () => {
53
50
  meta: {} as any
54
51
  });
55
52
 
56
- const authenticator = createAuthenticator(partyProcessor, signer);
53
+ const authenticator = createAuthenticator(partyProcessor, signer, null as any);
57
54
  const credential = createAuthMessage(
58
55
  keyring,
59
56
  partyKey.publicKey,
@@ -4,18 +4,22 @@
4
4
 
5
5
  import debug from 'debug';
6
6
 
7
- import { Authenticator, codec, createAuthMessage, createEnvelopeMessage, createFeedAdmitMessage, PartyAuthenticator } from '@dxos/credentials';
8
- import { FeedKey, PartyKey } from '@dxos/echo-protocol';
7
+ import { Message as HaloMessage, Authenticator, codec, createAuthMessage, createEnvelopeMessage, createFeedAdmitMessage, PartyAuthenticator } from '@dxos/credentials';
8
+ import { FeedKey, FeedWriter, PartyKey } from '@dxos/echo-protocol';
9
9
 
10
10
  import { PartyProcessor } from '../pipeline';
11
11
  import { CredentialsSigner } from './credentials-signer';
12
12
 
13
13
  const log = debug('dxos:echo-db:authenticator');
14
14
 
15
- export const createAuthenticator = (partyProcessor: PartyProcessor, credentialsSigner: CredentialsSigner): Authenticator => new PartyAuthenticator(partyProcessor.state, async auth => {
15
+ export const createAuthenticator = (
16
+ partyProcessor: PartyProcessor,
17
+ credentialsSigner: CredentialsSigner,
18
+ credentialsWriter: FeedWriter<HaloMessage>
19
+ ): Authenticator => new PartyAuthenticator(partyProcessor.state, async auth => {
16
20
  if (auth.feedAdmit && auth.feedKey && !partyProcessor.isFeedAdmitted(auth.feedKey)) {
17
21
  log(`Admitting feed of authenticated member: ${auth.feedKey}`);
18
- await partyProcessor.writeHaloMessage(createEnvelopeMessage(
22
+ await credentialsWriter.write(createEnvelopeMessage(
19
23
  credentialsSigner.signer,
20
24
  partyProcessor.partyKey,
21
25
  auth.feedAdmit,
@@ -15,7 +15,7 @@ const createPublicKey = () => PublicKey.from(createKeyPair().publicKey);
15
15
 
16
16
  describe('SnapshotStore', () => {
17
17
  test('in-memory', async () => {
18
- const store = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
18
+ const store = new SnapshotStore(createStorage('', StorageType.RAM).directory('snapshots'));
19
19
 
20
20
  const key1 = createPublicKey();
21
21
  const key2 = createPublicKey();
@@ -7,10 +7,9 @@ import debug from 'debug';
7
7
 
8
8
  import { keyToString } from '@dxos/crypto';
9
9
  import { schema, PartyKey, PartySnapshot } from '@dxos/echo-protocol';
10
- import { Storage } from '@dxos/random-access-multi-storage';
10
+ import { Directory } from '@dxos/random-access-multi-storage';
11
11
 
12
12
  const log = debug('dxos:snapshot-store');
13
-
14
13
  /**
15
14
  * Stores party snapshots. Takes any `random-access-storage` compatible backend.
16
15
  *
@@ -18,11 +17,11 @@ const log = debug('dxos:snapshot-store');
18
17
  */
19
18
  export class SnapshotStore {
20
19
  constructor (
21
- private readonly _storage: Storage
20
+ private readonly _directory: Directory
22
21
  ) {}
23
22
 
24
23
  async load (partyKey: PartyKey): Promise<PartySnapshot | undefined> {
25
- const file = this._storage.createOrOpen(partyKey.toHex());
24
+ const file = this._directory.createOrOpen(partyKey.toHex());
26
25
 
27
26
  try {
28
27
  const { size } = await file.stat();
@@ -45,7 +44,7 @@ export class SnapshotStore {
45
44
 
46
45
  async save (snapshot: PartySnapshot) {
47
46
  assert(snapshot.partyKey);
48
- const file = this._storage.createOrOpen(keyToString(snapshot.partyKey), { truncate: true, size: 0 });
47
+ const file = this._directory.createOrOpen(keyToString(snapshot.partyKey), { truncate: true, size: 0 });
49
48
 
50
49
  try {
51
50
  const data = schema.getCodecForType('dxos.echo.snapshot.PartySnapshot').encode(snapshot);
@@ -60,6 +59,6 @@ export class SnapshotStore {
60
59
  */
61
60
  async clear () {
62
61
  log('Clearing all snapshots..');
63
- await this._storage.destroy();
62
+ await this._directory.destroy();
64
63
  }
65
64
  }