@dxos/echo-pipeline 0.6.4 → 0.6.5-staging.097cf0c

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 (35) hide show
  1. package/dist/lib/browser/{chunk-6MJEONOX.mjs → chunk-2MII6KJX.mjs} +464 -104
  2. package/dist/lib/browser/chunk-2MII6KJX.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +1 -1
  6. package/dist/lib/node/{chunk-PT5LWMPA.cjs → chunk-6MWU4MHX.cjs} +475 -116
  7. package/dist/lib/node/chunk-6MWU4MHX.cjs.map +7 -0
  8. package/dist/lib/node/index.cjs +36 -34
  9. package/dist/lib/node/index.cjs.map +2 -2
  10. package/dist/lib/node/meta.json +1 -1
  11. package/dist/lib/node/testing/index.cjs +11 -11
  12. package/dist/types/src/automerge/automerge-host.d.ts +3 -2
  13. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  14. package/dist/types/src/automerge/echo-data-monitor.d.ts +73 -0
  15. package/dist/types/src/automerge/echo-data-monitor.d.ts.map +1 -0
  16. package/dist/types/src/automerge/echo-data-monitor.test.d.ts +2 -0
  17. package/dist/types/src/automerge/echo-data-monitor.test.d.ts.map +1 -0
  18. package/dist/types/src/automerge/echo-network-adapter.d.ts +9 -0
  19. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  20. package/dist/types/src/automerge/index.d.ts +1 -0
  21. package/dist/types/src/automerge/index.d.ts.map +1 -1
  22. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +7 -0
  23. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
  24. package/dist/types/src/space/space.d.ts +0 -1
  25. package/dist/types/src/space/space.d.ts.map +1 -1
  26. package/package.json +41 -39
  27. package/src/automerge/automerge-host.ts +11 -34
  28. package/src/automerge/echo-data-monitor.test.ts +55 -0
  29. package/src/automerge/echo-data-monitor.ts +374 -0
  30. package/src/automerge/echo-network-adapter.ts +37 -13
  31. package/src/automerge/index.ts +1 -0
  32. package/src/automerge/leveldb-storage-adapter.ts +19 -1
  33. package/src/space/space.ts +1 -3
  34. package/dist/lib/browser/chunk-6MJEONOX.mjs.map +0 -7
  35. package/dist/lib/node/chunk-PT5LWMPA.cjs.map +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo-data-monitor.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-data-monitor.test.ts"],"names":[],"mappings":""}
@@ -1,10 +1,18 @@
1
1
  import { NetworkAdapter, type Message, type PeerId, type PeerMetadata } from '@dxos/automerge/automerge-repo';
2
2
  import { type PublicKey } from '@dxos/keys';
3
3
  import { type EchoReplicator, type ShouldAdvertiseParams, type ShouldSyncCollectionParams } from './echo-replicator';
4
+ export interface NetworkDataMonitor {
5
+ recordPeerConnected(peerId: string): void;
6
+ recordPeerDisconnected(peerId: string): void;
7
+ recordMessageSent(message: Message, duration: number): void;
8
+ recordMessageReceived(message: Message): void;
9
+ recordMessageSendingFailed(message: Message): void;
10
+ }
4
11
  export type EchoNetworkAdapterParams = {
5
12
  getContainingSpaceForDocument: (documentId: string) => Promise<PublicKey | null>;
6
13
  onCollectionStateQueried: (collectionId: string, peerId: PeerId) => void;
7
14
  onCollectionStateReceived: (collectionId: string, peerId: PeerId, state: unknown) => void;
15
+ monitor?: NetworkDataMonitor;
8
16
  };
9
17
  /**
10
18
  * Manages a set of {@link EchoReplicator} instances.
@@ -31,6 +39,7 @@ export declare class EchoNetworkAdapter extends NetworkAdapter {
31
39
  shouldSyncCollection(peerId: PeerId, params: ShouldSyncCollectionParams): boolean;
32
40
  queryCollectionState(collectionId: string, targetId: PeerId): void;
33
41
  sendCollectionState(collectionId: string, targetId: PeerId, state: unknown): void;
42
+ private _send;
34
43
  getPeersInterestedInCollection(collectionId: string): PeerId[];
35
44
  private _onConnectionOpen;
36
45
  private _onMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9G,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,MAAM,wBAAwB,GAAG;IACrC,6BAA6B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACjF,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,yBAAyB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3F,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IASxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEf,OAAO,EAAE,wBAAwB;IAIrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAMtE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAc5B,UAAU,IAAI,IAAI;IAKrB,IAAI;IAaJ,KAAK;IAaL,aAAa;IAKb,aAAa,CAAC,UAAU,EAAE,cAAc;IAgBxC,gBAAgB,CAAC,UAAU,EAAE,cAAc;IAO3C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO;IASjF,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUlE,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAYjF,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IAU9D,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,UAAU;IAUlB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,kBAAkB;CAM3B;AASD,eAAO,MAAM,sBAAsB,QAAO,YAI/B,CAAC;AAEZ,eAAO,MAAM,kBAAkB,aAAc,YAAY,KAAG,OACC,CAAC"}
1
+ {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9G,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5D,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,6BAA6B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACjF,wBAAwB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,yBAAyB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1F,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IASxC,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEf,OAAO,EAAE,wBAAwB;IAIrD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAMtE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5B,UAAU,IAAI,IAAI;IAKrB,IAAI;IAaJ,KAAK;IAaL,aAAa;IAKb,aAAa,CAAC,UAAU,EAAE,cAAc;IAgBxC,gBAAgB,CAAC,UAAU,EAAE,cAAc;IAO3C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO;IASjF,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUlE,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWjF,OAAO,CAAC,KAAK;IAuBb,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE;IAU9D,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,UAAU;IAWlB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,kBAAkB;CAM3B;AASD,eAAO,MAAM,sBAAsB,QAAO,YAI/B,CAAC;AAEZ,eAAO,MAAM,kBAAkB,aAAc,YAAY,KAAG,OACC,CAAC"}
@@ -4,4 +4,5 @@ export * from './mesh-echo-replicator';
4
4
  export * from './echo-replicator';
5
5
  export { diffCollectionState } from './collection-synchronizer';
6
6
  export * from './space-collection';
7
+ export * from './echo-data-monitor';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/automerge/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -3,9 +3,16 @@ import { type StorageAdapterInterface, type Chunk, type StorageKey } from '@dxos
3
3
  import { Resource } from '@dxos/context';
4
4
  import { type BatchLevel, type SublevelDB } from '@dxos/kv-store';
5
5
  import { type MaybePromise } from '@dxos/util';
6
+ export interface StorageAdapterDataMonitor {
7
+ recordBytesStored(count: number): void;
8
+ recordBytesLoaded(count: number): void;
9
+ recordLoadDuration(durationMs: number): void;
10
+ recordStoreDuration(durationMs: number): void;
11
+ }
6
12
  export type LevelDBStorageAdapterParams = {
7
13
  db: SublevelDB;
8
14
  callbacks?: StorageCallbacks;
15
+ monitor?: StorageAdapterDataMonitor;
9
16
  };
10
17
  export type BeforeSaveParams = {
11
18
  path: StorageKey;
@@ -1 +1 @@
1
- {"version":3,"file":"leveldb-storage-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/leveldb-storage-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,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,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,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;AAaD,eAAO,MAAM,eAAe;;;CAG3B,CAAC"}
1
+ {"version":3,"file":"leveldb-storage-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/leveldb-storage-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,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,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACrC,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;IAmB3D,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7D,MAAM,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,SAAS,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAqBlD,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAexD;AAaD,eAAO,MAAM,eAAe;;;CAG3B,CAAC"}
@@ -32,7 +32,6 @@ export type CreatePipelineParams = {
32
32
  * Spaces are globally addressable databases with access control.
33
33
  */
34
34
  export declare class Space extends Resource {
35
- private readonly _addFeedMutex;
36
35
  readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
37
36
  readonly stateUpdate: Event<void>;
38
37
  readonly protocol: SpaceProtocol;
@@ -1 +1 @@
1
- {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.6.4",
3
+ "version": "0.6.5-staging.097cf0c",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -9,15 +9,17 @@
9
9
  "exports": {
10
10
  ".": {
11
11
  "browser": "./dist/lib/browser/index.mjs",
12
- "import": "./dist/lib/browser/index.mjs",
13
- "require": "./dist/lib/node/index.cjs",
14
- "node": "./dist/lib/node/index.cjs"
12
+ "node": {
13
+ "default": "./dist/lib/node/index.cjs"
14
+ },
15
+ "types": "./dist/types/src/index.d.ts"
15
16
  },
16
17
  "./testing": {
17
18
  "browser": "./dist/lib/browser/testing/index.mjs",
18
- "import": "./dist/lib/browser/testing/index.mjs",
19
- "require": "./dist/lib/node/testing/index.cjs",
20
- "node": "./dist/lib/node/testing/index.cjs"
19
+ "node": {
20
+ "default": "./dist/lib/node/testing/index.cjs"
21
+ },
22
+ "types": "./dist/types/src/testing/index.d.ts"
21
23
  }
22
24
  },
23
25
  "types": "dist/types/src/index.d.ts",
@@ -39,38 +41,38 @@
39
41
  "crc-32": "^1.2.2",
40
42
  "level": "^8.0.1",
41
43
  "level-transcoder": "^1.0.1",
42
- "@dxos/async": "0.6.4",
43
- "@dxos/context": "0.6.4",
44
- "@dxos/codec-protobuf": "0.6.4",
45
- "@dxos/credentials": "0.6.4",
46
- "@dxos/automerge": "0.6.4",
47
- "@dxos/debug": "0.6.4",
48
- "@dxos/crypto": "0.6.4",
49
- "@dxos/echo-protocol": "0.6.4",
50
- "@dxos/hypercore": "0.6.4",
51
- "@dxos/echo-schema": "0.6.4",
52
- "@dxos/feed-store": "0.6.4",
53
- "@dxos/invariant": "0.6.4",
54
- "@dxos/indexing": "0.6.4",
55
- "@dxos/keyring": "0.6.4",
56
- "@dxos/keys": "0.6.4",
57
- "@dxos/log": "0.6.4",
58
- "@dxos/kv-store": "0.6.4",
59
- "@dxos/network-manager": "0.6.4",
60
- "@dxos/messaging": "0.6.4",
61
- "@dxos/protocols": "0.6.4",
62
- "@dxos/node-std": "0.6.4",
63
- "@dxos/rpc": "0.6.4",
64
- "@dxos/random-access-storage": "0.6.4",
65
- "@dxos/teleport": "0.6.4",
66
- "@dxos/teleport-extension-gossip": "0.6.4",
67
- "@dxos/teleport-extension-automerge-replicator": "0.6.4",
68
- "@dxos/teleport-extension-object-sync": "0.6.4",
69
- "@dxos/timeframe": "0.6.4",
70
- "@dxos/typings": "0.6.4",
71
- "@dxos/teleport-extension-replicator": "0.6.4",
72
- "@dxos/tracing": "0.6.4",
73
- "@dxos/util": "0.6.4"
44
+ "@dxos/async": "0.6.5-staging.097cf0c",
45
+ "@dxos/automerge": "0.6.5-staging.097cf0c",
46
+ "@dxos/credentials": "0.6.5-staging.097cf0c",
47
+ "@dxos/crypto": "0.6.5-staging.097cf0c",
48
+ "@dxos/codec-protobuf": "0.6.5-staging.097cf0c",
49
+ "@dxos/echo-schema": "0.6.5-staging.097cf0c",
50
+ "@dxos/echo-protocol": "0.6.5-staging.097cf0c",
51
+ "@dxos/debug": "0.6.5-staging.097cf0c",
52
+ "@dxos/feed-store": "0.6.5-staging.097cf0c",
53
+ "@dxos/indexing": "0.6.5-staging.097cf0c",
54
+ "@dxos/hypercore": "0.6.5-staging.097cf0c",
55
+ "@dxos/keyring": "0.6.5-staging.097cf0c",
56
+ "@dxos/keys": "0.6.5-staging.097cf0c",
57
+ "@dxos/kv-store": "0.6.5-staging.097cf0c",
58
+ "@dxos/invariant": "0.6.5-staging.097cf0c",
59
+ "@dxos/log": "0.6.5-staging.097cf0c",
60
+ "@dxos/messaging": "0.6.5-staging.097cf0c",
61
+ "@dxos/network-manager": "0.6.5-staging.097cf0c",
62
+ "@dxos/node-std": "0.6.5-staging.097cf0c",
63
+ "@dxos/protocols": "0.6.5-staging.097cf0c",
64
+ "@dxos/random-access-storage": "0.6.5-staging.097cf0c",
65
+ "@dxos/rpc": "0.6.5-staging.097cf0c",
66
+ "@dxos/context": "0.6.5-staging.097cf0c",
67
+ "@dxos/teleport": "0.6.5-staging.097cf0c",
68
+ "@dxos/teleport-extension-object-sync": "0.6.5-staging.097cf0c",
69
+ "@dxos/teleport-extension-automerge-replicator": "0.6.5-staging.097cf0c",
70
+ "@dxos/teleport-extension-replicator": "0.6.5-staging.097cf0c",
71
+ "@dxos/timeframe": "0.6.5-staging.097cf0c",
72
+ "@dxos/teleport-extension-gossip": "0.6.5-staging.097cf0c",
73
+ "@dxos/tracing": "0.6.5-staging.097cf0c",
74
+ "@dxos/util": "0.6.5-staging.097cf0c",
75
+ "@dxos/typings": "0.6.5-staging.097cf0c"
74
76
  },
75
77
  "devDependencies": {
76
78
  "fast-check": "^3.19.0",
@@ -4,7 +4,6 @@
4
4
 
5
5
  import { Event, asyncTimeout } from '@dxos/async';
6
6
  import {
7
- next as automerge,
8
7
  getBackend,
9
8
  getHeads,
10
9
  isAutomerge,
@@ -35,9 +34,9 @@ import { log } from '@dxos/log';
35
34
  import { objectPointerCodec } from '@dxos/protocols';
36
35
  import { type DocHeadsList, type FlushRequest } from '@dxos/protocols/proto/dxos/echo/service';
37
36
  import { trace } from '@dxos/tracing';
38
- import { mapValues } from '@dxos/util';
39
37
 
40
38
  import { CollectionSynchronizer, diffCollectionState, type CollectionState } from './collection-synchronizer';
39
+ import { type EchoDataMonitor } from './echo-data-monitor';
41
40
  import { EchoNetworkAdapter, isEchoPeerMetadata } from './echo-network-adapter';
42
41
  import { type EchoReplicator } from './echo-replicator';
43
42
  import { HeadsStore } from './heads-store';
@@ -47,6 +46,7 @@ export type AutomergeHostParams = {
47
46
  db: LevelDB;
48
47
 
49
48
  indexMetadataStore: IndexMetadataStore;
49
+ dataMonitor?: EchoDataMonitor;
50
50
  };
51
51
 
52
52
  export type LoadDocOptions = {
@@ -67,11 +67,7 @@ export type CreateDocOptions = {
67
67
  export class AutomergeHost extends Resource {
68
68
  private readonly _db: LevelDB;
69
69
  private readonly _indexMetadataStore: IndexMetadataStore;
70
- private readonly _echoNetworkAdapter = new EchoNetworkAdapter({
71
- getContainingSpaceForDocument: this._getContainingSpaceForDocument.bind(this),
72
- onCollectionStateQueried: this._onCollectionStateQueried.bind(this),
73
- onCollectionStateReceived: this._onCollectionStateReceived.bind(this),
74
- });
70
+ private readonly _echoNetworkAdapter: EchoNetworkAdapter;
75
71
 
76
72
  private readonly _collectionSynchronizer = new CollectionSynchronizer({
77
73
  queryCollectionState: this._queryCollectionState.bind(this),
@@ -86,7 +82,7 @@ export class AutomergeHost extends Resource {
86
82
  @trace.info()
87
83
  private _peerId!: PeerId;
88
84
 
89
- constructor({ db, indexMetadataStore }: AutomergeHostParams) {
85
+ constructor({ db, indexMetadataStore, dataMonitor }: AutomergeHostParams) {
90
86
  super();
91
87
  this._db = db;
92
88
  this._storage = new LevelDBStorageAdapter({
@@ -95,6 +91,13 @@ export class AutomergeHost extends Resource {
95
91
  beforeSave: async (params) => this._beforeSave(params),
96
92
  afterSave: async (key) => this._afterSave(key),
97
93
  },
94
+ monitor: dataMonitor,
95
+ });
96
+ this._echoNetworkAdapter = new EchoNetworkAdapter({
97
+ getContainingSpaceForDocument: this._getContainingSpaceForDocument.bind(this),
98
+ onCollectionStateQueried: this._onCollectionStateQueried.bind(this),
99
+ onCollectionStateReceived: this._onCollectionStateReceived.bind(this),
100
+ monitor: dataMonitor,
98
101
  });
99
102
  this._headsStore = new HeadsStore({ db: db.sublevel('heads') });
100
103
  this._indexMetadataStore = indexMetadataStore;
@@ -317,32 +320,6 @@ export class AutomergeHost extends Resource {
317
320
  }
318
321
  }
319
322
 
320
- @trace.info({ depth: null })
321
- private _automergeDocs() {
322
- return mapValues(this._repo.handles, (handle) => ({
323
- state: handle.state,
324
- hasDoc: !!handle.docSync(),
325
- heads: handle.docSync() ? automerge.getHeads(handle.docSync()) : null,
326
- data:
327
- handle.docSync() &&
328
- mapValues(handle.docSync(), (value, key) => {
329
- try {
330
- switch (key) {
331
- case 'access':
332
- case 'links':
333
- return value;
334
- case 'objects':
335
- return Object.keys(value as any);
336
- default:
337
- return `${value}`;
338
- }
339
- } catch (err) {
340
- return `${err}`;
341
- }
342
- }),
343
- }));
344
- }
345
-
346
323
  @trace.info({ depth: null })
347
324
  private _automergePeers() {
348
325
  return this._repo.peers;
@@ -0,0 +1,55 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { expect } from 'chai';
6
+
7
+ import { describe, test } from '@dxos/test';
8
+
9
+ import { EchoDataMonitor } from './echo-data-monitor';
10
+
11
+ describe('EchoDataMonitorTest', () => {
12
+ test('connectionsCount', async () => {
13
+ const dataMonitor = createMonitor();
14
+ expect(dataMonitor.connectionsCount).to.eq(0);
15
+ dataMonitor.recordPeerConnected('A');
16
+ expect(dataMonitor.connectionsCount).to.eq(1);
17
+ tick(dataMonitor); // Test count doesn't change.
18
+ expect(dataMonitor.connectionsCount).to.eq(1);
19
+ dataMonitor.recordPeerDisconnected('B');
20
+ expect(dataMonitor.connectionsCount).to.eq(0);
21
+ });
22
+
23
+ test('counters', async () => {
24
+ const dataMonitor = createMonitor();
25
+ expect(dataMonitor.lastPerSecondStats).to.be.undefined;
26
+ tick(dataMonitor);
27
+ expect(dataMonitor.lastPerSecondStats).not.to.be.undefined;
28
+ const loadedBytes = 100;
29
+ dataMonitor.recordBytesLoaded(loadedBytes);
30
+ expect(dataMonitor.lastPerSecondStats?.storage?.loadedBytes).to.eq(0);
31
+ tick(dataMonitor);
32
+ expect(dataMonitor.lastPerSecondStats?.storage?.loadedBytes).to.eq(100);
33
+ tick(dataMonitor);
34
+ expect(dataMonitor.lastPerSecondStats?.storage?.loadedBytes).to.eq(0);
35
+ });
36
+
37
+ test('averages', async () => {
38
+ const dataMonitor = createMonitor();
39
+ expect(storedChunkSize(dataMonitor)).to.eq(0);
40
+ dataMonitor.recordBytesStored(1000);
41
+ expect(storedChunkSize(dataMonitor)).to.eq(1000);
42
+ dataMonitor.recordBytesStored(500);
43
+ expect(storedChunkSize(dataMonitor)).to.eq(750);
44
+ tick(dataMonitor); // Test average doesn't change.
45
+ expect(storedChunkSize(dataMonitor)).to.eq(750);
46
+ dataMonitor.recordBytesStored(0);
47
+ expect(storedChunkSize(dataMonitor)).to.eq(500);
48
+ });
49
+
50
+ const storedChunkSize = (monitor: EchoDataMonitor) => monitor.computeStats().storage.writes.payloadSize;
51
+
52
+ const createMonitor = () => new EchoDataMonitor();
53
+
54
+ const tick = (monitor: EchoDataMonitor) => monitor.tick(1000);
55
+ });