@dxos/echo-pipeline 0.1.36-next.ef27157 → 0.1.36

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 (48) hide show
  1. package/dist/lib/browser/{chunk-LIPDNX3G.mjs → chunk-4YAT2XJW.mjs} +159 -125
  2. package/dist/lib/browser/chunk-4YAT2XJW.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3 -3
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +5 -5
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/node/index.cjs +158 -124
  8. package/dist/lib/node/index.cjs.map +4 -4
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/testing/index.cjs +158 -124
  11. package/dist/lib/node/testing/index.cjs.map +4 -4
  12. package/dist/types/src/dbhost/data-service-host.d.ts.map +1 -1
  13. package/dist/types/src/dbhost/{database-backend.d.ts → database-host.d.ts} +2 -2
  14. package/dist/types/src/dbhost/database-host.d.ts.map +1 -0
  15. package/dist/types/src/dbhost/index.d.ts +1 -1
  16. package/dist/types/src/dbhost/index.d.ts.map +1 -1
  17. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  18. package/dist/types/src/pipeline/pipeline.d.ts +1 -0
  19. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  20. package/dist/types/src/pipeline/timeframe-clock.d.ts +11 -1
  21. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -1
  22. package/dist/types/src/space/data-pipeline.d.ts +8 -9
  23. package/dist/types/src/space/data-pipeline.d.ts.map +1 -1
  24. package/dist/types/src/space/data-pipeline.test.d.ts +1 -0
  25. package/dist/types/src/space/data-pipeline.test.d.ts.map +1 -0
  26. package/dist/types/src/space/space-manager.d.ts +1 -0
  27. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  28. package/dist/types/src/testing/database-test-rig.d.ts +4 -4
  29. package/dist/types/src/testing/database-test-rig.d.ts.map +1 -1
  30. package/dist/types/src/testing/util.d.ts +4 -4
  31. package/dist/types/src/testing/util.d.ts.map +1 -1
  32. package/package.json +31 -29
  33. package/src/common/feeds.ts +1 -1
  34. package/src/dbhost/data-service-host.ts +16 -9
  35. package/src/dbhost/{database-backend.ts → database-host.ts} +1 -1
  36. package/src/dbhost/index.ts +1 -1
  37. package/src/metadata/metadata-store.ts +24 -20
  38. package/src/pipeline/pipeline.ts +6 -1
  39. package/src/pipeline/timeframe-clock.ts +22 -3
  40. package/src/space/data-pipeline.test.ts +3 -0
  41. package/src/space/data-pipeline.ts +63 -64
  42. package/src/space/space-manager.ts +2 -1
  43. package/src/testing/database-test-rig.ts +6 -6
  44. package/src/testing/util.ts +4 -4
  45. package/src/tests/database-unit.test.ts +13 -0
  46. package/src/tests/database.test.ts +39 -1
  47. package/dist/lib/browser/chunk-LIPDNX3G.mjs.map +0 -7
  48. package/dist/types/src/dbhost/database-backend.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-service-host.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/data-service-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAuB,WAAW,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGnG;;;GAGG;AAEH,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;gBAGiB,YAAY,EAAE,WAAW,EACzB,YAAY,EAAE,WAAW,EACzB,YAAY,CAAC,qCAAyB;IAGzD;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;IAwCxB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;CAsB7D"}
1
+ {"version":3,"file":"data-service-host.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/data-service-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAuB,WAAW,EAAE,WAAW,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGnG;;;GAGG;AAEH,qBAAa,eAAe;IAMxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAPhC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;gBAGiB,YAAY,EAAE,WAAW,EACzB,YAAY,EAAE,WAAW,EACzB,YAAY,CAAC,qCAAyB;IAGzD;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;IAuCxB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;CA8B7D"}
@@ -9,7 +9,7 @@ import { DataServiceHost } from './data-service-host';
9
9
  * Mutations are read from the incoming streams and applied to the ItemManager via ItemDemuxer.
10
10
  * Write operations result in mutations being written to the outgoing stream.
11
11
  */
12
- export declare class DatabaseBackendHost {
12
+ export declare class DatabaseHost {
13
13
  private readonly _outboundStream;
14
14
  private readonly _snapshot?;
15
15
  private _echoProcessor;
@@ -24,4 +24,4 @@ export declare class DatabaseBackendHost {
24
24
  createSnapshot(): EchoSnapshot;
25
25
  createDataServiceHost(): DataServiceHost;
26
26
  }
27
- //# sourceMappingURL=database-backend.d.ts.map
27
+ //# sourceMappingURL=database-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-host.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/database-host.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,YAAY;IAMrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAN7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IAC5B,YAAY,EAAG,WAAW,CAAC;gBAGf,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,EACpD,SAAS,CAAC,0BAAc;IAG3C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,aAAa,kBAEhB;IAEK,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY;IAYzD,KAAK;IAEX,cAAc,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS;IAIrD,cAAc;IAId,qBAAqB;CAGtB"}
@@ -1,5 +1,5 @@
1
1
  export * from './data-service-host';
2
- export * from './database-backend';
2
+ export * from './database-host';
3
3
  export * from './snapshot-manager';
4
4
  export * from './snapshot-store';
5
5
  export * from './data-service';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dbhost/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAgB,aAAa,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,SAAS,CAAC;CACxB;AASD,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,SAAS,CAAqC;gBAInC,UAAU,EAAE,SAAS;IAGxC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,EAAE,CAE5B;IAED;;OAEG;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA6Bb,KAAK;IAwBnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,iBAAiB,IAAI,cAAc,GAAG,SAAS;IAIzC,iBAAiB,CAAC,MAAM,EAAE,cAAc;IAOxC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAU9B,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAQjE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAQtD,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CAQjG"}
1
+ {"version":3,"file":"metadata-store.d.ts","sourceRoot":"","sources":["../../../../src/metadata/metadata-store.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAgB,aAAa,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,SAAS,CAAC;CACxB;AASD,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,SAAS,CAAqC;gBAInC,UAAU,EAAE,SAAS;IAGxC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,aAAa,EAAE,CAE5B;IAED;;OAEG;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAiCb,KAAK;IA6BnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,iBAAiB,IAAI,cAAc,GAAG,SAAS;IAIzC,iBAAiB,CAAC,MAAM,EAAE,cAAc;IAOxC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAU9B,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAQjE,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;IAQtD,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS;CAQjG"}
@@ -35,6 +35,7 @@ export declare class PipelineState {
35
35
  */
36
36
  get endTimeframe(): Timeframe;
37
37
  get timeframe(): Timeframe;
38
+ get pendingTimeframe(): Timeframe;
38
39
  get targetTimeframe(): Timeframe;
39
40
  get feeds(): FeedWrapper<any>[];
40
41
  waitUntilTimeframe(target: Timeframe): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAyC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1F,oBAAY,4BAA4B,GAAG;IACzC;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe;IAZzB,SAAgB,eAAe,yCAA+B;IAE9D;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,qBAAqB,CAA4B;gBAI/C,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAC/B,eAAe,EAAE,cAAc;IAGzC;;;OAGG;IAEH,IAAI,YAAY,cASf;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,eAAe,cAElB;IAED,IAAI,KAAK,uBAER;IAEK,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAI1C,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAIpC;;;;;;OAMG;IACG,+BAA+B,CAAC,EACpC,GAAmB,EACnB,OAAO,EACP,YAAmB,EACpB,GAAE,4BAAiC;CAuCrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,QAAS,YAAW,gBAAgB;IAsB7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IArBpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8C;IAG9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG9B;IAGH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiF;IAGxG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAG3D,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO,CAAC,OAAO,CAAS;gBAIL,iBAAiB,GAAE,SAA2B;IAOjE,IAAI,KAAK,kBAER;IAED,IAAI,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAG5C;IAED,QAAQ,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;IAMhC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAI5C,OAAO,CAAC,OAAO,EAAE,SAAS;IAI1B,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAcrC,KAAK;IAOL,IAAI;IAOV;;;OAGG;IACI,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC;CAelD"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAyC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1F,oBAAY,4BAA4B,GAAG;IACzC;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,eAAe;IAZzB,SAAgB,eAAe,yCAA+B;IAE9D;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAwB;IAEhD,OAAO,CAAC,qBAAqB,CAA4B;gBAI/C,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAC/B,eAAe,EAAE,cAAc;IAGzC;;;OAGG;IAEH,IAAI,YAAY,cASf;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,gBAAgB,cAEnB;IAED,IAAI,eAAe,cAElB;IAED,IAAI,KAAK,uBAER;IAEK,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAI1C,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAIpC;;;;;;OAMG;IACG,+BAA+B,CAAC,EACpC,GAAmB,EACnB,OAAO,EACP,YAAmB,EACpB,GAAE,4BAAiC;CAuCrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,QAAS,YAAW,gBAAgB;IAsB7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IArBpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8C;IAG9E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG9B;IAGH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiF;IAGxG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAG3D,OAAO,CAAC,OAAO,CAA8C;IAE7D,OAAO,CAAC,OAAO,CAAS;gBAIL,iBAAiB,GAAE,SAA2B;IAOjE,IAAI,KAAK,kBAER;IAED,IAAI,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAG5C;IAED,QAAQ,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;IAMhC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAI5C,OAAO,CAAC,OAAO,EAAE,SAAS;IAI1B,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAcrC,KAAK;IAOL,IAAI;IAOV;;;OAGG;IACI,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC;CAgBlD"}
@@ -11,9 +11,19 @@ export declare const startAfter: (timeframe: Timeframe) => FeedIndex[];
11
11
  export declare class TimeframeClock {
12
12
  private _timeframe;
13
13
  readonly update: Event<Timeframe>;
14
+ private _pendingTimeframe;
14
15
  constructor(_timeframe?: Timeframe);
16
+ /**
17
+ * Timeframe that was processed by ECHO.
18
+ */
15
19
  get timeframe(): Timeframe;
16
- updateTimeframe(key: PublicKey, seq: number): void;
20
+ /**
21
+ * Timeframe that is currently being processed by ECHO.
22
+ * Will be equal to `timeframe` after the processing is complete.
23
+ */
24
+ get pendingTimeframe(): Timeframe;
25
+ updatePendingTimeframe(key: PublicKey, seq: number): void;
26
+ updateTimeframe(): void;
17
27
  hasGaps(timeframe: Timeframe): boolean;
18
28
  waitUntilReached(target: Timeframe): Promise<void>;
19
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timeframe-clock.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/timeframe-clock.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,yBAAyB,cAAe,SAAS,KAAG,SAAS,EACN,CAAC;AAErE,eAAO,MAAM,yBAAyB,YAAa,SAAS,EAAE,KAAG,SACK,CAAC;AAEvE,eAAO,MAAM,UAAU,cAAe,SAAS,KAAG,SAAS,EACoB,CAAC;AAEhF;;GAEG;AACH,qBAAa,cAAc;IAKvB,OAAO,CAAC,UAAU;IAJpB,QAAQ,CAAC,MAAM,mBAA0B;gBAI/B,UAAU,YAAkB;IAGtC,IAAI,SAAS,cAEZ;IAED,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM;IAK3C,OAAO,CAAC,SAAS,EAAE,SAAS;IAMtB,gBAAgB,CAAC,MAAM,EAAE,SAAS;CAYzC"}
1
+ {"version":3,"file":"timeframe-clock.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/timeframe-clock.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,yBAAyB,cAAe,SAAS,KAAG,SAAS,EACN,CAAC;AAErE,eAAO,MAAM,yBAAyB,YAAa,SAAS,EAAE,KAAG,SACK,CAAC;AAEvE,eAAO,MAAM,UAAU,cAAe,SAAS,KAAG,SAAS,EACoB,CAAC;AAEhF;;GAEG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,UAAU;IANpB,QAAQ,CAAC,MAAM,mBAA0B;IAEzC,OAAO,CAAC,iBAAiB,CAAY;gBAI3B,UAAU,YAAkB;IAKtC;;OAEG;IACH,IAAI,SAAS,cAEZ;IAED;;;OAGG;IACH,IAAI,gBAAgB,cAEnB;IAED,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM;IAIlD,eAAe;IAKf,OAAO,CAAC,SAAS,EAAE,SAAS;IAMtB,gBAAgB,CAAC,MAAM,EAAE,SAAS;CAYzC"}
@@ -1,11 +1,9 @@
1
- import { Event } from '@dxos/async';
2
1
  import { FeedInfo } from '@dxos/credentials';
3
2
  import { ItemManager } from '@dxos/echo-db';
4
3
  import { PublicKey } from '@dxos/keys';
5
4
  import { ModelFactory } from '@dxos/model-factory';
6
- import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
7
5
  import { Timeframe } from '@dxos/timeframe';
8
- import { DatabaseBackendHost, SnapshotManager } from '../dbhost';
6
+ import { DatabaseHost, SnapshotManager } from '../dbhost';
9
7
  import { MetadataStore } from '../metadata';
10
8
  import { Pipeline } from '../pipeline';
11
9
  export interface PipelineFactory {
@@ -34,22 +32,23 @@ export declare class DataPipeline {
34
32
  private _targetTimeframe?;
35
33
  private _lastAutomaticSnapshotTimeframe;
36
34
  private _isOpen;
37
- readonly onTimeframeReached: Event<Timeframe>;
35
+ private _lastTimeframeSaveTime;
36
+ private _lastSnapshotSaveTime;
38
37
  constructor(_params: DataPipelineParams);
39
38
  _itemManager: ItemManager;
40
- databaseBackend?: DatabaseBackendHost;
39
+ databaseBackend?: DatabaseHost;
41
40
  get isOpen(): boolean;
42
41
  get pipelineState(): import("../pipeline/pipeline").PipelineState | undefined;
43
42
  get snapshotTimeframe(): Timeframe | undefined;
44
43
  getStartTimeframe(): Timeframe;
45
44
  setTargetTimeframe(timeframe: Timeframe): void;
46
45
  open(spaceContext: PipelineFactory): Promise<void>;
47
- private _createPeriodicSnapshots;
48
- private _saveSnapshot;
49
- private _saveLatestTimeframe;
50
46
  close(): Promise<void>;
51
- createSnapshot(): SpaceSnapshot;
52
47
  private _consumePipeline;
48
+ private _createSnapshot;
49
+ private _saveSnapshot;
50
+ private _saveTargetTimeframe;
51
+ private _noteTargetStateIfNeeded;
53
52
  waitUntilTimeframe(timeframe: Timeframe): Promise<void>;
54
53
  }
55
54
  //# sourceMappingURL=data-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAA0C,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,oBAAY,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAsBF;;;;GAIG;AACH,qBACa,YAAY;IAYX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAXpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,SAAgB,kBAAkB,mBAA0B;gBAE/B,OAAO,EAAE,kBAAkB;IAEjD,YAAY,EAAG,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAE7C,IAAI,MAAM,YAET;IAED,IAAI,aAAa,6DAEhB;IAED,IAAI,iBAAiB,0BAEpB;IAED,iBAAiB,IAAI,SAAS;IAI9B,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMjC,IAAI,CAAC,YAAY,EAAE,eAAe;IAsCxC,OAAO,CAAC,wBAAwB;YA0BlB,aAAa;YAOb,oBAAoB;IAU5B,KAAK;IAoBX,cAAc,IAAI,aAAa;YASjB,gBAAgB;IA+BxB,kBAAkB,CAAC,SAAS,EAAE,SAAS;CAI9C"}
1
+ {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,oBAAY,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAsBF;;;;GAIG;AACH,qBACa,YAAY;IAaX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,qBAAqB,CAAK;gBAEL,OAAO,EAAE,kBAAkB;IAEjD,YAAY,EAAG,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,YAAY,CAAC;IAEtC,IAAI,MAAM,YAET;IAED,IAAI,aAAa,6DAEhB;IAED,IAAI,iBAAiB,0BAEpB;IAED,iBAAiB,IAAI,SAAS;IAI9B,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMjC,IAAI,CAAC,YAAY,EAAE,eAAe;IAqClC,KAAK;YA2BG,gBAAgB;IAiC9B,OAAO,CAAC,eAAe;YAST,aAAa;YAOb,oBAAoB;YAMpB,wBAAwB;IAoBhC,kBAAkB,CAAC,SAAS,EAAE,SAAS;CAI9C"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data-pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-pipeline.test.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.test.ts"],"names":[],"mappings":""}
@@ -33,6 +33,7 @@ export declare class SpaceManager {
33
33
  private readonly _feedStore;
34
34
  private readonly _networkManager;
35
35
  private readonly _instanceId;
36
+ _traceParent?: string;
36
37
  constructor({ feedStore, networkManager }: SpaceManagerParams);
37
38
  get spaces(): ComplexMap<PublicKey, Space>;
38
39
  open(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"space-manager.d.ts","sourceRoot":"","sources":["../../../../src/space/space-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,qBACa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,kBAAkB;IAO7D,IAAI,MAAM,iCAET;IAGK,IAAI;IAKJ,KAAK;IAKL,cAAc,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,oBAAoB;CAuB5F"}
1
+ {"version":3,"file":"space-manager.d.ts","sourceRoot":"","sources":["../../../../src/space/space-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAiB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,qBACa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEjB,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,kBAAkB;IAO7D,IAAI,MAAM,iCAET;IAGK,IAAI;IAKJ,KAAK;IAKL,cAAc,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,oBAAoB;CAuB5F"}
@@ -1,11 +1,11 @@
1
- import { DatabaseBackendProxy, ItemManager } from '@dxos/echo-db';
1
+ import { DatabaseProxy, ItemManager } from '@dxos/echo-db';
2
2
  import { PublicKey } from '@dxos/keys';
3
3
  import { ModelFactory } from '@dxos/model-factory';
4
4
  import { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
5
5
  import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
6
6
  import { Timeframe } from '@dxos/timeframe';
7
7
  import { ComplexMap } from '@dxos/util';
8
- import { DatabaseBackendHost } from '../dbhost';
8
+ import { DatabaseHost } from '../dbhost';
9
9
  export declare class DatabaseTestBuilder {
10
10
  readonly peers: ComplexMap<PublicKey, DatabaseTestPeer>;
11
11
  createPeer(): Promise<DatabaseTestPeer>;
@@ -14,8 +14,8 @@ export declare class DatabaseTestPeer {
14
14
  readonly rig: DatabaseTestBuilder;
15
15
  readonly modelFactory: ModelFactory;
16
16
  items: ItemManager;
17
- proxy: DatabaseBackendProxy;
18
- host: DatabaseBackendHost;
17
+ proxy: DatabaseProxy;
18
+ host: DatabaseHost;
19
19
  hostItems: ItemManager;
20
20
  readonly key: PublicKey;
21
21
  feedMessages: FeedMessage[];
@@ -1 +1 @@
1
- {"version":3,"file":"database-test-rig.d.ts","sourceRoot":"","sources":["../../../../src/testing/database-test-rig.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIhD,qBAAa,mBAAmB;IAC9B,SAAgB,KAAK,0CAA+D;IAE9E,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAM9C;AAED,qBAAa,gBAAgB;aA+BC,GAAG,EAAE,mBAAmB;IA9BpD,SAAgB,YAAY,eAA4E;IAEjG,KAAK,EAAG,WAAW,CAAC;IACpB,KAAK,EAAG,oBAAoB,CAAC;IAE7B,IAAI,EAAG,mBAAmB,CAAC;IAC3B,SAAS,EAAG,WAAW,CAAC;IAM/B,SAAgB,GAAG,YAAsB;IAElC,YAAY,EAAE,WAAW,EAAE,CAAM;IAExC;;OAEG;IACI,SAAS,SAAM;IAEtB;;OAEG;IACI,SAAS,YAAmB;IAE5B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;gBAEd,GAAG,EAAE,mBAAmB;IAE9C,IAAI;IA6BV;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM;IAOpB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS;IAUxB;;OAEG;IACG,MAAM;IAOZ;;OAEG;IACH,YAAY,IAAI,aAAa;IAS7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,gBAAgB;CAmCzB"}
1
+ {"version":3,"file":"database-test-rig.d.ts","sourceRoot":"","sources":["../../../../src/testing/database-test-rig.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,qBAAa,mBAAmB;IAC9B,SAAgB,KAAK,0CAA+D;IAE9E,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAM9C;AAED,qBAAa,gBAAgB;aA+BC,GAAG,EAAE,mBAAmB;IA9BpD,SAAgB,YAAY,eAA4E;IAEjG,KAAK,EAAG,WAAW,CAAC;IACpB,KAAK,EAAG,aAAa,CAAC;IAEtB,IAAI,EAAG,YAAY,CAAC;IACpB,SAAS,EAAG,WAAW,CAAC;IAM/B,SAAgB,GAAG,YAAsB;IAElC,YAAY,EAAE,WAAW,EAAE,CAAM;IAExC;;OAEG;IACI,SAAS,SAAM;IAEtB;;OAEG;IACI,SAAS,YAAmB;IAE5B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;gBAEd,GAAG,EAAE,mBAAmB;IAE9C,IAAI;IA6BV;;;OAGG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM;IAOpB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS;IAUxB;;OAEG;IACG,MAAM;IAOZ;;OAEG;IACH,YAAY,IAAI,aAAa;IAS7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,gBAAgB;CAmCzB"}
@@ -1,14 +1,14 @@
1
- import { DatabaseBackendProxy, ItemManager } from '@dxos/echo-db';
1
+ import { DatabaseProxy, ItemManager } from '@dxos/echo-db';
2
2
  import { ModelFactory } from '@dxos/model-factory';
3
- import { DatabaseBackendHost, DataServiceHost } from '../dbhost';
3
+ import { DatabaseHost, DataServiceHost } from '../dbhost';
4
4
  import { DataPipeline } from '../space';
5
5
  export declare const createMemoryDatabase: (modelFactory: ModelFactory) => Promise<{
6
- backend: DatabaseBackendHost;
6
+ backend: DatabaseHost;
7
7
  itemManager: ItemManager;
8
8
  }>;
9
9
  export declare const createRemoteDatabaseFromDataServiceHost: (modelFactory: ModelFactory, dataServiceHost: DataServiceHost) => Promise<{
10
10
  itemManager: ItemManager;
11
- backend: DatabaseBackendProxy;
11
+ backend: DatabaseProxy;
12
12
  }>;
13
13
  export declare const testLocalDatabase: (create: DataPipeline, check?: DataPipeline) => Promise<void>;
14
14
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAA6C,MAAM,WAAW,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,oBAAoB,iBAAwB,YAAY;;;EAqBpE,CAAC;AAEF,eAAO,MAAM,uCAAuC,iBACpC,YAAY,mBACT,eAAe;;;EAejC,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAkB,YAAY,UAAS,YAAY,kBAmBhF,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,eAAe,EAA6C,MAAM,WAAW,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,oBAAoB,iBAAwB,YAAY;;;EAqBpE,CAAC;AAEF,eAAO,MAAM,uCAAuC,iBACpC,YAAY,mBACT,eAAe;;;EAejC,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAkB,YAAY,UAAS,YAAY,kBAmBhF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.1.36-next.ef27157",
3
+ "version": "0.1.36",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -19,34 +19,36 @@
19
19
  "src"
20
20
  ],
21
21
  "dependencies": {
22
+ "crc-32": "^1.2.2",
22
23
  "debug": "^4.3.3",
23
- "@dxos/async": "0.1.36-next.ef27157",
24
- "@dxos/codec-protobuf": "0.1.36-next.ef27157",
25
- "@dxos/context": "0.1.36-next.ef27157",
26
- "@dxos/credentials": "0.1.36-next.ef27157",
27
- "@dxos/crypto": "0.1.36-next.ef27157",
28
- "@dxos/debug": "0.1.36-next.ef27157",
29
- "@dxos/document-model": "0.1.36-next.ef27157",
30
- "@dxos/echo-db": "0.1.36-next.ef27157",
31
- "@dxos/feed-store": "0.1.36-next.ef27157",
32
- "@dxos/hypercore": "0.1.36-next.ef27157",
33
- "@dxos/keyring": "0.1.36-next.ef27157",
34
- "@dxos/keys": "0.1.36-next.ef27157",
35
- "@dxos/log": "0.1.36-next.ef27157",
36
- "@dxos/messaging": "0.1.36-next.ef27157",
37
- "@dxos/model-factory": "0.1.36-next.ef27157",
38
- "@dxos/network-manager": "0.1.36-next.ef27157",
39
- "@dxos/node-std": "0.1.36-next.ef27157",
40
- "@dxos/protocols": "0.1.36-next.ef27157",
41
- "@dxos/random-access-storage": "0.1.36-next.ef27157",
42
- "@dxos/rpc": "0.1.36-next.ef27157",
43
- "@dxos/teleport": "0.1.36-next.ef27157",
44
- "@dxos/teleport-extension-gossip": "0.1.36-next.ef27157",
45
- "@dxos/teleport-extension-object-sync": "0.1.36-next.ef27157",
46
- "@dxos/teleport-extension-replicator": "0.1.36-next.ef27157",
47
- "@dxos/timeframe": "0.1.36-next.ef27157",
48
- "@dxos/typings": "0.1.36-next.ef27157",
49
- "@dxos/util": "0.1.36-next.ef27157"
24
+ "@dxos/async": "0.1.36",
25
+ "@dxos/codec-protobuf": "0.1.36",
26
+ "@dxos/context": "0.1.36",
27
+ "@dxos/credentials": "0.1.36",
28
+ "@dxos/crypto": "0.1.36",
29
+ "@dxos/debug": "0.1.36",
30
+ "@dxos/document-model": "0.1.36",
31
+ "@dxos/echo-db": "0.1.36",
32
+ "@dxos/errors": "0.1.36",
33
+ "@dxos/feed-store": "0.1.36",
34
+ "@dxos/hypercore": "0.1.36",
35
+ "@dxos/keyring": "0.1.36",
36
+ "@dxos/keys": "0.1.36",
37
+ "@dxos/log": "0.1.36",
38
+ "@dxos/messaging": "0.1.36",
39
+ "@dxos/model-factory": "0.1.36",
40
+ "@dxos/network-manager": "0.1.36",
41
+ "@dxos/node-std": "0.1.36",
42
+ "@dxos/protocols": "0.1.36",
43
+ "@dxos/random-access-storage": "0.1.36",
44
+ "@dxos/rpc": "0.1.36",
45
+ "@dxos/teleport": "0.1.36",
46
+ "@dxos/teleport-extension-gossip": "0.1.36",
47
+ "@dxos/teleport-extension-object-sync": "0.1.36",
48
+ "@dxos/teleport-extension-replicator": "0.1.36",
49
+ "@dxos/timeframe": "0.1.36",
50
+ "@dxos/typings": "0.1.36",
51
+ "@dxos/util": "0.1.36"
50
52
  },
51
53
  "devDependencies": {
52
54
  "@types/debug": "^4.1.7",
@@ -54,7 +56,7 @@
54
56
  "hypercore-protocol": "^8.0.7",
55
57
  "source-map-support": "^0.5.12",
56
58
  "wait-for-expect": "^3.0.2",
57
- "@dxos/text-model": "0.1.36-next.ef27157"
59
+ "@dxos/text-model": "0.1.36"
58
60
  },
59
61
  "publishConfig": {
60
62
  "access": "public"
@@ -18,6 +18,6 @@ export const createMappedFeedWriter = <Source extends {}, Target extends {}>(
18
18
  assert(writer);
19
19
 
20
20
  return {
21
- write: async (data: Source) => await writer.write(await mapper(data))
21
+ write: async (data: Source, options) => await writer.write(await mapper(data), options)
22
22
  };
23
23
  };
@@ -36,7 +36,6 @@ export class DataServiceHost {
36
36
  return new Stream(({ next, ctx }) => {
37
37
  // send current state
38
38
  const objects = Array.from(this._itemManager.entities.values()).map((entity) => entity.createSnapshot());
39
-
40
39
  next({
41
40
  batch: {
42
41
  objects
@@ -47,10 +46,10 @@ export class DataServiceHost {
47
46
 
48
47
  this._itemDemuxer.mutation.on(ctx, (message) => {
49
48
  const { batch, meta } = message;
50
- log('Object update', { batch, meta });
49
+ log('message', { batch, meta });
51
50
 
52
51
  const clientTag = this._clientTagMap.get([message.meta.feedKey, message.meta.seq]);
53
- // TODO(dmaretskyi): Memorąąy leak with _clientTagMap not getting cleared.
52
+ // TODO(dmaretskyi): Memory leak with _clientTagMap not getting cleared.
54
53
 
55
54
  // Assign feed metadata
56
55
  batch.objects?.forEach((object) => {
@@ -75,22 +74,30 @@ export class DataServiceHost {
75
74
  async write(request: WriteRequest): Promise<MutationReceipt> {
76
75
  assert(this._writeStream, 'Cannot write mutations in readonly mode');
77
76
 
77
+ log('write', { clientTag: request.clientTag, objectCount: request.batch.objects?.length ?? 0 });
78
+
78
79
  // Clear client metadata.
79
- const receipt = await this._writeStream.write({
80
+ const message: DataMessage = {
80
81
  batch: {
81
82
  objects: request.batch.objects?.map((object) => ({
82
83
  ...object,
83
- mutations: object.mutations?.map((m) => ({
84
- ...m,
84
+ mutations: object.mutations?.map((mutation) => ({
85
+ ...mutation,
85
86
  meta: undefined
86
87
  })),
87
88
  meta: undefined
88
89
  }))
89
90
  }
91
+ };
92
+ const receipt = await this._writeStream.write(message, {
93
+ afterWrite: async (receipt) => {
94
+ // Runs before the mutation is read from the pipeline.
95
+ if (request.clientTag) {
96
+ log('tag', { clientTag: request.clientTag, feedKey: receipt.feedKey, seq: receipt.seq });
97
+ this._clientTagMap.set([receipt.feedKey, receipt.seq], request.clientTag);
98
+ }
99
+ }
90
100
  });
91
- if (request.clientTag) {
92
- this._clientTagMap.set([receipt.feedKey, receipt.seq], request.clientTag);
93
- }
94
101
 
95
102
  return receipt;
96
103
  }
@@ -17,7 +17,7 @@ import { DataServiceHost } from './data-service-host';
17
17
  * Mutations are read from the incoming streams and applied to the ItemManager via ItemDemuxer.
18
18
  * Write operations result in mutations being written to the outgoing stream.
19
19
  */
20
- export class DatabaseBackendHost {
20
+ export class DatabaseHost {
21
21
  private _echoProcessor!: EchoProcessor;
22
22
  private _itemManager!: ItemManager;
23
23
  public _itemDemuxer!: ItemDemuxer;
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  export * from './data-service-host';
6
- export * from './database-backend';
6
+ export * from './database-host';
7
7
  export * from './snapshot-manager';
8
8
  export * from './snapshot-store';
9
9
  export * from './data-service';
@@ -2,9 +2,11 @@
2
2
  // Copyright 2021 DXOS.org
3
3
  //
4
4
 
5
+ import CRC32 from 'crc-32';
5
6
  import assert from 'node:assert';
6
7
 
7
8
  import { synchronized } from '@dxos/async';
9
+ import { DataCorruptionError } from '@dxos/errors';
8
10
  import { PublicKey } from '@dxos/keys';
9
11
  import { log } from '@dxos/log';
10
12
  import { schema } from '@dxos/protocols';
@@ -59,21 +61,25 @@ export class MetadataStore {
59
61
  const file = this._directory.getOrCreateFile('EchoMetadata');
60
62
  try {
61
63
  const { size: fileLength } = await file.stat();
62
- if (fileLength < 4) {
64
+ if (fileLength < 8) {
63
65
  return;
64
66
  }
65
67
  // Loading file size from first 4 bytes.
66
68
  const dataSize = fromBytesInt32(await file.read(0, 4));
67
- log('loaded', { size: dataSize });
69
+ const checksum = fromBytesInt32(await file.read(4, 4));
70
+ log('loaded', { size: dataSize, checksum });
68
71
 
69
- // Sanity check.
70
- {
71
- if (fileLength < dataSize + 4) {
72
- throw new Error('Metadata storage is corrupted');
73
- }
72
+ if (fileLength < dataSize + 8) {
73
+ throw new DataCorruptionError('Metadata size is smaller than expected.');
74
+ }
75
+
76
+ const data = await file.read(8, dataSize);
77
+
78
+ const calculatedChecksum = CRC32.buf(data);
79
+ if (calculatedChecksum !== checksum) {
80
+ throw new DataCorruptionError('Metadata checksum is invalid.');
74
81
  }
75
82
 
76
- const data = await file.read(4, dataSize);
77
83
  this._metadata = schema.getCodecForType('dxos.echo.metadata.EchoMetadata').decode(data);
78
84
  } catch (err: any) {
79
85
  log.error('failed to load metadata', { err });
@@ -96,13 +102,18 @@ export class MetadataStore {
96
102
 
97
103
  try {
98
104
  const encoded = Buffer.from(schema.getCodecForType('dxos.echo.metadata.EchoMetadata').encode(data));
105
+ const checksum = CRC32.buf(encoded);
106
+
107
+ const result = Buffer.alloc(8 + encoded.length);
99
108
 
100
- // Saving file size at first 4 bytes.
101
- await file.write(0, toBytesInt32(encoded.length));
102
- log('saved', { size: encoded.length });
109
+ result.writeInt32LE(encoded.length, 0);
110
+ result.writeInt32LE(checksum, 4);
111
+ encoded.copy(result, 8);
103
112
 
104
- // Saving data.
105
- await file.write(4, encoded);
113
+ // NOTE: This must be done in one write operation, otherwise the file can be corrupted.
114
+ await file.write(0, result);
115
+
116
+ log('saved', { size: encoded.length, checksum });
106
117
  } finally {
107
118
  await file.close();
108
119
  }
@@ -162,11 +173,4 @@ export class MetadataStore {
162
173
  await this._save();
163
174
  }
164
175
  }
165
-
166
- const toBytesInt32 = (num: number) => {
167
- const buf = Buffer.alloc(4);
168
- buf.writeInt32LE(num, 0);
169
- return buf;
170
- };
171
-
172
176
  const fromBytesInt32 = (buf: Buffer) => buf.readInt32LE(0);
@@ -70,6 +70,10 @@ export class PipelineState {
70
70
  return this._timeframeClock.timeframe;
71
71
  }
72
72
 
73
+ get pendingTimeframe() {
74
+ return this._timeframeClock.pendingTimeframe;
75
+ }
76
+
73
77
  get targetTimeframe() {
74
78
  return this._targetTimeframe ? this._targetTimeframe : new Timeframe();
75
79
  }
@@ -265,10 +269,11 @@ export class Pipeline implements PipelineAccessor {
265
269
 
266
270
  for await (const block of this._feedSetIterator) {
267
271
  this._processingTrigger.reset();
272
+ this._timeframeClock.updatePendingTimeframe(PublicKey.from(block.feedKey), block.seq);
268
273
  yield block;
269
274
  this._processingTrigger.wake();
270
275
 
271
- this._timeframeClock.updateTimeframe(PublicKey.from(block.feedKey), block.seq);
276
+ this._timeframeClock.updateTimeframe();
272
277
  }
273
278
 
274
279
  // TODO(burdon): Test re-entrant?
@@ -24,17 +24,36 @@ export const startAfter = (timeframe: Timeframe): FeedIndex[] =>
24
24
  export class TimeframeClock {
25
25
  readonly update = new Event<Timeframe>();
26
26
 
27
+ private _pendingTimeframe: Timeframe;
28
+
27
29
  // prettier-ignore
28
30
  constructor(
29
31
  private _timeframe = new Timeframe()
30
- ) {}
32
+ ) {
33
+ this._pendingTimeframe = _timeframe;
34
+ }
31
35
 
36
+ /**
37
+ * Timeframe that was processed by ECHO.
38
+ */
32
39
  get timeframe() {
33
40
  return this._timeframe;
34
41
  }
35
42
 
36
- updateTimeframe(key: PublicKey, seq: number) {
37
- this._timeframe = Timeframe.merge(this._timeframe, new Timeframe([[key, seq]]));
43
+ /**
44
+ * Timeframe that is currently being processed by ECHO.
45
+ * Will be equal to `timeframe` after the processing is complete.
46
+ */
47
+ get pendingTimeframe() {
48
+ return this._pendingTimeframe;
49
+ }
50
+
51
+ updatePendingTimeframe(key: PublicKey, seq: number) {
52
+ this._pendingTimeframe = Timeframe.merge(this._pendingTimeframe, new Timeframe([[key, seq]]));
53
+ }
54
+
55
+ updateTimeframe() {
56
+ this._timeframe = this._pendingTimeframe;
38
57
  this.update.emit(this._timeframe);
39
58
  }
40
59
 
@@ -0,0 +1,3 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //