@dxos/echo-pipeline 0.1.24-next.6b1f434

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 (134) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +22 -0
  3. package/dist/lib/browser/chunk-3GAE5CKD.mjs +1621 -0
  4. package/dist/lib/browser/chunk-3GAE5CKD.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +114 -0
  6. package/dist/lib/browser/index.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -0
  8. package/dist/lib/browser/testing/index.mjs +238 -0
  9. package/dist/lib/browser/testing/index.mjs.map +7 -0
  10. package/dist/lib/node/index.cjs +1747 -0
  11. package/dist/lib/node/index.cjs.map +7 -0
  12. package/dist/lib/node/meta.json +1 -0
  13. package/dist/lib/node/testing/index.cjs +1835 -0
  14. package/dist/lib/node/testing/index.cjs.map +7 -0
  15. package/dist/types/src/common/codec.d.ts +12 -0
  16. package/dist/types/src/common/codec.d.ts.map +1 -0
  17. package/dist/types/src/common/feeds.d.ts +7 -0
  18. package/dist/types/src/common/feeds.d.ts.map +1 -0
  19. package/dist/types/src/common/index.d.ts +3 -0
  20. package/dist/types/src/common/index.d.ts.map +1 -0
  21. package/dist/types/src/dbhost/data-service-host.d.ts +22 -0
  22. package/dist/types/src/dbhost/data-service-host.d.ts.map +1 -0
  23. package/dist/types/src/dbhost/data-service.d.ts +21 -0
  24. package/dist/types/src/dbhost/data-service.d.ts.map +1 -0
  25. package/dist/types/src/dbhost/database-backend.d.ts +28 -0
  26. package/dist/types/src/dbhost/database-backend.d.ts.map +1 -0
  27. package/dist/types/src/dbhost/index.d.ts +6 -0
  28. package/dist/types/src/dbhost/index.d.ts.map +1 -0
  29. package/dist/types/src/dbhost/snapshot-manager.d.ts +17 -0
  30. package/dist/types/src/dbhost/snapshot-manager.d.ts.map +1 -0
  31. package/dist/types/src/dbhost/snapshot-store.d.ts +9 -0
  32. package/dist/types/src/dbhost/snapshot-store.d.ts.map +1 -0
  33. package/dist/types/src/dbhost/snapshot-store.test.d.ts +2 -0
  34. package/dist/types/src/dbhost/snapshot-store.test.d.ts.map +1 -0
  35. package/dist/types/src/errors/errors.d.ts +26 -0
  36. package/dist/types/src/errors/errors.d.ts.map +1 -0
  37. package/dist/types/src/errors/index.d.ts +2 -0
  38. package/dist/types/src/errors/index.d.ts.map +1 -0
  39. package/dist/types/src/index.d.ts +7 -0
  40. package/dist/types/src/index.d.ts.map +1 -0
  41. package/dist/types/src/metadata/index.d.ts +2 -0
  42. package/dist/types/src/metadata/index.d.ts.map +1 -0
  43. package/dist/types/src/metadata/metadata-store.d.ts +42 -0
  44. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -0
  45. package/dist/types/src/pipeline/index.d.ts +3 -0
  46. package/dist/types/src/pipeline/index.d.ts.map +1 -0
  47. package/dist/types/src/pipeline/message-selector.d.ts +11 -0
  48. package/dist/types/src/pipeline/message-selector.d.ts.map +1 -0
  49. package/dist/types/src/pipeline/pipeline.d.ts +98 -0
  50. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -0
  51. package/dist/types/src/pipeline/pipeline.test.d.ts +2 -0
  52. package/dist/types/src/pipeline/pipeline.test.d.ts.map +1 -0
  53. package/dist/types/src/pipeline/timeframe-clock.d.ts +19 -0
  54. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -0
  55. package/dist/types/src/space/auth.d.ts +23 -0
  56. package/dist/types/src/space/auth.d.ts.map +1 -0
  57. package/dist/types/src/space/control-pipeline.d.ts +31 -0
  58. package/dist/types/src/space/control-pipeline.d.ts.map +1 -0
  59. package/dist/types/src/space/control-pipeline.test.d.ts +2 -0
  60. package/dist/types/src/space/control-pipeline.test.d.ts.map +1 -0
  61. package/dist/types/src/space/data-pipeline-controller.d.ts +63 -0
  62. package/dist/types/src/space/data-pipeline-controller.d.ts.map +1 -0
  63. package/dist/types/src/space/genesis.d.ts +5 -0
  64. package/dist/types/src/space/genesis.d.ts.map +1 -0
  65. package/dist/types/src/space/index.d.ts +7 -0
  66. package/dist/types/src/space/index.d.ts.map +1 -0
  67. package/dist/types/src/space/replication.browser.test.d.ts +2 -0
  68. package/dist/types/src/space/replication.browser.test.d.ts.map +1 -0
  69. package/dist/types/src/space/space-manager.browser.test.d.ts +2 -0
  70. package/dist/types/src/space/space-manager.browser.test.d.ts.map +1 -0
  71. package/dist/types/src/space/space-manager.d.ts +41 -0
  72. package/dist/types/src/space/space-manager.d.ts.map +1 -0
  73. package/dist/types/src/space/space-protocol.browser.test.d.ts +2 -0
  74. package/dist/types/src/space/space-protocol.browser.test.d.ts.map +1 -0
  75. package/dist/types/src/space/space-protocol.d.ts +76 -0
  76. package/dist/types/src/space/space-protocol.d.ts.map +1 -0
  77. package/dist/types/src/space/space-protocol.test.d.ts +2 -0
  78. package/dist/types/src/space/space-protocol.test.d.ts.map +1 -0
  79. package/dist/types/src/space/space.d.ts +59 -0
  80. package/dist/types/src/space/space.d.ts.map +1 -0
  81. package/dist/types/src/space/space.test.d.ts +2 -0
  82. package/dist/types/src/space/space.test.d.ts.map +1 -0
  83. package/dist/types/src/testing/index.d.ts +4 -0
  84. package/dist/types/src/testing/index.d.ts.map +1 -0
  85. package/dist/types/src/testing/test-agent-builder.d.ts +52 -0
  86. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -0
  87. package/dist/types/src/testing/test-feed-builder.d.ts +9 -0
  88. package/dist/types/src/testing/test-feed-builder.d.ts.map +1 -0
  89. package/dist/types/src/testing/util.d.ts +14 -0
  90. package/dist/types/src/testing/util.d.ts.map +1 -0
  91. package/dist/types/src/tests/database.test.d.ts +2 -0
  92. package/dist/types/src/tests/database.test.d.ts.map +1 -0
  93. package/package.json +60 -0
  94. package/src/common/codec.ts +18 -0
  95. package/src/common/feeds.ts +23 -0
  96. package/src/common/index.ts +6 -0
  97. package/src/dbhost/data-service-host.ts +103 -0
  98. package/src/dbhost/data-service.ts +66 -0
  99. package/src/dbhost/database-backend.ts +64 -0
  100. package/src/dbhost/index.ts +9 -0
  101. package/src/dbhost/snapshot-manager.ts +68 -0
  102. package/src/dbhost/snapshot-store.test.ts +30 -0
  103. package/src/dbhost/snapshot-store.ts +45 -0
  104. package/src/errors/errors.ts +52 -0
  105. package/src/errors/index.ts +5 -0
  106. package/src/index.ts +10 -0
  107. package/src/metadata/index.ts +5 -0
  108. package/src/metadata/metadata-store.ts +173 -0
  109. package/src/pipeline/index.ts +6 -0
  110. package/src/pipeline/message-selector.ts +38 -0
  111. package/src/pipeline/pipeline.test.ts +71 -0
  112. package/src/pipeline/pipeline.ts +249 -0
  113. package/src/pipeline/timeframe-clock.ts +56 -0
  114. package/src/space/auth.ts +88 -0
  115. package/src/space/control-pipeline.test.ts +162 -0
  116. package/src/space/control-pipeline.ts +103 -0
  117. package/src/space/data-pipeline-controller.ts +234 -0
  118. package/src/space/genesis.ts +29 -0
  119. package/src/space/index.ts +10 -0
  120. package/src/space/replication.browser.test.ts +64 -0
  121. package/src/space/space-manager.browser.test.ts +44 -0
  122. package/src/space/space-manager.ts +92 -0
  123. package/src/space/space-protocol.browser.test.ts +135 -0
  124. package/src/space/space-protocol.test.ts +136 -0
  125. package/src/space/space-protocol.ts +222 -0
  126. package/src/space/space.test.ts +144 -0
  127. package/src/space/space.ts +199 -0
  128. package/src/testing/index.ts +7 -0
  129. package/src/testing/test-agent-builder.ts +193 -0
  130. package/src/testing/test-feed-builder.ts +19 -0
  131. package/src/testing/util.ts +77 -0
  132. package/src/tests/database.test.ts +53 -0
  133. package/testing.d.ts +11 -0
  134. package/testing.js +5 -0
@@ -0,0 +1,11 @@
1
+ import { FeedBlockSelector } from '@dxos/feed-store';
2
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
3
+ import { TimeframeClock } from './timeframe-clock';
4
+ /**
5
+ * The MessageSelector makes sure that we read in a trusted order.
6
+ * The first message we wish to process is the SpaceGenesis, which will admit a Feed.
7
+ * As we encounter and process FeedAdmit messages those are added to the Space's trust,
8
+ * and we begin processing messages from them as well.
9
+ */
10
+ export declare const createMessageSelector: (timeframeClock: TimeframeClock) => FeedBlockSelector<FeedMessage>;
11
+ //# sourceMappingURL=message-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-selector.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/message-selector.ts"],"names":[],"mappings":"AAOA,OAAO,EAAa,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,mBAAoB,cAAc,KAAG,kBAAkB,WAAW,CAiBnG,CAAC"}
@@ -0,0 +1,98 @@
1
+ import { FeedSetIterator, FeedWrapper, FeedWriter } from '@dxos/feed-store';
2
+ import { FeedMessageBlock } from '@dxos/protocols';
3
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
4
+ import { Timeframe } from '@dxos/timeframe';
5
+ import { TimeframeClock } from './timeframe-clock';
6
+ export declare type WaitUntilReachedTargetParams = {
7
+ timeout?: number;
8
+ };
9
+ /**
10
+ * External state accessor.
11
+ */
12
+ export declare class PipelineState {
13
+ private _iterator;
14
+ private _timeframeClock;
15
+ readonly timeframeUpdate: import("@dxos/async").Event<Timeframe>;
16
+ /**
17
+ * Target timeframe we are waiting to reach.
18
+ */
19
+ private _targetTimeframe;
20
+ private _reachedTargetPromise;
21
+ constructor(_iterator: FeedSetIterator<any>, _timeframeClock: TimeframeClock);
22
+ /**
23
+ * Latest theoretical timeframe based on the last mutation in each feed.
24
+ * NOTE: This might never be reached if the mutation dependencies
25
+ */
26
+ get endTimeframe(): Timeframe;
27
+ get timeframe(): Timeframe;
28
+ get targetTimeframe(): Timeframe;
29
+ waitUntilTimeframe(target: Timeframe): Promise<void>;
30
+ setTargetTimeframe(target: Timeframe): void;
31
+ /**
32
+ * Wait until the pipeline processes all messages in the feed and reaches the target timeframe if that is set.
33
+ *
34
+ * This function will resolve immediately if the pipeline is stalled.
35
+ *
36
+ * @param timeout Timeout in milliseconds to specify the maximum wait time.
37
+ */
38
+ waitUntilReachedTargetTimeframe({ timeout }?: WaitUntilReachedTargetParams): Promise<void>;
39
+ }
40
+ export interface PipelineAccessor {
41
+ state: PipelineState;
42
+ writer: FeedWriter<FeedMessage.Payload>;
43
+ }
44
+ /**
45
+ * A multi-reader pipeline that operates on feeds.
46
+ * Might have a single writable feed.
47
+ * Has a timeframe clock to handle message ordering.
48
+ *
49
+ * NOTE:
50
+ * - Feeds passed in must have value encoding consistent with the type expected by the iterator/writer.
51
+ *
52
+ * # Usage examples
53
+ *
54
+ * ## Create a new space.
55
+ *
56
+ * 1. Generate space key, genesis feed key.
57
+ * 2. Create and open pipeline reading from {}.
58
+ * 3. Create and add the writable genesis feed.
59
+ * 4. Write the initial sequence of control and credential messages.
60
+ *
61
+ * ## Load an existing space from storage
62
+ *
63
+ * 1. Load space key, genesis feed key, get starting timeframe from saved snapshot.
64
+ * 2. Create and open pipeline reading from the initial timeframe.
65
+ * 3. Open and add the genesis feed.
66
+ * 4. Once the writable feed is added, the pipeline becomes writable.
67
+ *
68
+ * ## Join an existing space created by another agent/device.
69
+ *
70
+ * 1. Get the space key, genesis feed key from another agent.
71
+ * 2. (optionally) Download the snapshot from another agent.
72
+ * 3. Create and open pipeline.
73
+ * 4. Generate the writable feed key.
74
+ * 5. Wait for the writable feed to be added.
75
+ */
76
+ export declare class Pipeline implements PipelineAccessor {
77
+ private readonly _initialTimeframe;
78
+ private readonly _timeframeClock;
79
+ private readonly _feedSetIterator;
80
+ private readonly _state;
81
+ private readonly _processingTrigger;
82
+ private _writer;
83
+ private _isOpen;
84
+ constructor(_initialTimeframe?: Timeframe);
85
+ get state(): PipelineState;
86
+ get writer(): FeedWriter<FeedMessage.Payload>;
87
+ getFeeds(): FeedWrapper<FeedMessage>[];
88
+ addFeed(feed: FeedWrapper<FeedMessage>): Promise<void>;
89
+ setWriteFeed(feed: FeedWrapper<FeedMessage>): void;
90
+ start(): Promise<void>;
91
+ stop(): Promise<void>;
92
+ /**
93
+ * Starts to iterate over the ordered messages from the added feeds.
94
+ * Updates the timeframe clock after the message has bee processed.
95
+ */
96
+ consume(): AsyncIterable<FeedMessageBlock>;
97
+ }
98
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG5E,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,EAAwD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEzG,oBAAY,4BAA4B,GAAG;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,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;IACH,IAAI,YAAY,cASf;IAED,IAAI,SAAS,cAEZ;IAED,IAAI,eAAe,cAElB;IAEK,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAI1C,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAIpC;;;;;;OAMG;IACG,+BAA+B,CAAC,EAAE,OAAO,EAAE,GAAE,4BAAiC;CAsCrF;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;IAIhC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAI5C,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAarC,KAAK;IAML,IAAI;IAOV;;;OAGG;IACI,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC;CAelD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.test.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/pipeline.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { Event } from '@dxos/async';
2
+ import { FeedIndex } from '@dxos/feed-store';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import { Timeframe } from '@dxos/timeframe';
5
+ export declare const mapTimeframeToFeedIndexes: (timeframe: Timeframe) => FeedIndex[];
6
+ export declare const mapFeedIndexesToTimeframe: (indexes: FeedIndex[]) => Timeframe;
7
+ /**
8
+ * Keeps state of the last timeframe that was processed by ECHO.
9
+ */
10
+ export declare class TimeframeClock {
11
+ private _timeframe;
12
+ readonly update: Event<Timeframe>;
13
+ constructor(_timeframe?: Timeframe);
14
+ get timeframe(): Timeframe;
15
+ updateTimeframe(key: PublicKey, seq: number): void;
16
+ hasGaps(timeframe: Timeframe): boolean;
17
+ waitUntilReached(target: Timeframe): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=timeframe-clock.d.ts.map
@@ -0,0 +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;;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"}
@@ -0,0 +1,23 @@
1
+ import { AuthService } from '@dxos/protocols/proto/dxos/mesh/teleport/auth';
2
+ import { ExtensionContext, RpcExtension } from '@dxos/teleport';
3
+ export declare type AuthProvider = (nonce: Uint8Array) => Promise<Uint8Array | undefined>;
4
+ export declare type AuthVerifier = (nonce: Uint8Array, credential: Uint8Array) => Promise<boolean>;
5
+ export declare type AuthExtensionParams = {
6
+ provider: AuthProvider;
7
+ verifier: AuthVerifier;
8
+ onAuthSuccess: () => void;
9
+ onAuthFailure: () => void;
10
+ };
11
+ export declare class AuthExtension extends RpcExtension<Services, Services> {
12
+ private readonly _authParams;
13
+ private readonly _ctx;
14
+ constructor(_authParams: AuthExtensionParams);
15
+ protected getHandlers(): Promise<Services>;
16
+ onOpen(context: ExtensionContext): Promise<void>;
17
+ onClose(): Promise<void>;
18
+ }
19
+ declare type Services = {
20
+ AuthService: AuthService;
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/space/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,oBAAY,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAElF,oBAAY,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3F,oBAAY,mBAAmB,GAAG;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,qBAAa,aAAc,SAAQ,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAOrD,OAAO,CAAC,QAAQ,CAAC,WAAW;IANxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAIlB;gBAE0B,WAAW,EAAE,mBAAmB;cAY7C,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;IAmBjC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIxC;AAED,aAAK,QAAQ,GAAG;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { SpaceState, MemberInfo, FeedInfo } from '@dxos/credentials';
2
+ import { FeedWrapper } from '@dxos/feed-store';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
5
+ import { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
6
+ import { Timeframe } from '@dxos/timeframe';
7
+ import { AsyncCallback, Callback } from '@dxos/util';
8
+ import { PipelineAccessor } from '../pipeline';
9
+ export declare type ControlPipelineParams = {
10
+ spaceKey: PublicKey;
11
+ genesisFeed: FeedWrapper<FeedMessage>;
12
+ feedProvider: (feedKey: PublicKey) => Promise<FeedWrapper<FeedMessage>>;
13
+ initialTimeframe?: Timeframe;
14
+ };
15
+ /**
16
+ * Processes HALO credentials, which include genesis and invitations.
17
+ */
18
+ export declare class ControlPipeline {
19
+ private readonly _pipeline;
20
+ private readonly _spaceStateMachine;
21
+ readonly onFeedAdmitted: Callback<AsyncCallback<FeedInfo>>;
22
+ readonly onMemberAdmitted: Callback<AsyncCallback<MemberInfo>>;
23
+ readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
24
+ constructor({ spaceKey, genesisFeed, feedProvider, initialTimeframe }: ControlPipelineParams);
25
+ get spaceState(): SpaceState;
26
+ get pipeline(): PipelineAccessor;
27
+ setWriteFeed(feed: FeedWrapper<FeedMessage>): void;
28
+ start(): Promise<void>;
29
+ stop(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=control-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/control-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,UAAU,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAY,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,oBAAY,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IAEvD,SAAgB,cAAc,oCAA2C;IACzE,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,SAAgB,qBAAqB,EAAE,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;gBAE/D,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,qBAAqB;IA0B5F,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IAED,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAIrC,KAAK;IA0BL,IAAI;CAKX"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=control-pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-pipeline.test.d.ts","sourceRoot":"","sources":["../../../../src/space/control-pipeline.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ import { Event } from '@dxos/async';
2
+ import { FeedInfo } from '@dxos/credentials';
3
+ import { ItemManager } from '@dxos/echo-db';
4
+ import { PublicKey } from '@dxos/keys';
5
+ import { ModelFactory } from '@dxos/model-factory';
6
+ import { SpaceSnapshot } from '@dxos/protocols/proto/dxos/echo/snapshot';
7
+ import { Timeframe } from '@dxos/timeframe';
8
+ import { DatabaseBackendHost, SnapshotManager } from '../dbhost';
9
+ import { MetadataStore } from '../metadata';
10
+ import { Pipeline } from '../pipeline';
11
+ export declare type DataPipelineControllerContext = {
12
+ openPipeline: (start: Timeframe) => Promise<Pipeline>;
13
+ };
14
+ /**
15
+ * Controls data pipeline in the space.
16
+ * Consumes mutations from the feed and applies them to the database.
17
+ */
18
+ export interface DataPipelineController {
19
+ open(context: DataPipelineControllerContext): Promise<void>;
20
+ close(): Promise<void>;
21
+ }
22
+ export declare class NoopDataPipelineController implements DataPipelineController {
23
+ open(context: DataPipelineControllerContext): Promise<void>;
24
+ close(): Promise<void>;
25
+ }
26
+ export declare type DataPipelineControllerImplParams = {
27
+ modelFactory: ModelFactory;
28
+ snapshotManager: SnapshotManager;
29
+ metadataStore: MetadataStore;
30
+ memberKey: PublicKey;
31
+ spaceKey: PublicKey;
32
+ feedInfoProvider: (feedKey: PublicKey) => FeedInfo | undefined;
33
+ snapshotId: string | undefined;
34
+ };
35
+ /**
36
+ * Controls data pipeline in the space.
37
+ * Consumes the pipeline and updates the database.
38
+ * Reacts to new epochs to restart the pipeline.
39
+ */
40
+ export declare class DataPipelineControllerImpl implements DataPipelineController {
41
+ private readonly _params;
42
+ private _ctx;
43
+ private _spaceContext;
44
+ private _pipeline?;
45
+ private _snapshot?;
46
+ private _lastAutomaticSnapshotTimeframe;
47
+ readonly onTimeframeReached: Event<Timeframe>;
48
+ constructor(_params: DataPipelineControllerImplParams);
49
+ _itemManager: ItemManager;
50
+ databaseBackend?: DatabaseBackendHost;
51
+ get pipelineState(): import("../pipeline/pipeline").PipelineState | undefined;
52
+ get snapshotTimeframe(): Timeframe | undefined;
53
+ getStartTimeframe(): Timeframe;
54
+ open(spaceContext: DataPipelineControllerContext): Promise<void>;
55
+ private _createPeriodicSnapshots;
56
+ private _saveSnapshot;
57
+ private _saveLatestTimeframe;
58
+ close(): Promise<void>;
59
+ createSnapshot(): SpaceSnapshot;
60
+ private _consumePipeline;
61
+ waitUntilTimeframe(timeframe: Timeframe): Promise<void>;
62
+ }
63
+ //# sourceMappingURL=data-pipeline-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-pipeline-controller.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline-controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAA4B,MAAM,aAAa,CAAC;AAE9D,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,oBAAY,6BAA6B,GAAG;IAC1C,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,0BAA2B,YAAW,sBAAsB;IACjE,IAAI,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAE3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B;AAED,oBAAY,gCAAgC,GAAG;IAC7C,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;AAiBF;;;;GAIG;AACH,qBACa,0BAA2B,YAAW,sBAAsB;IAU3D,OAAO,CAAC,QAAQ,CAAC,OAAO;IATpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAgB;IAElC,OAAO,CAAC,+BAA+B,CAAmB;IAE1D,SAAgB,kBAAkB,mBAA0B;gBAE/B,OAAO,EAAE,gCAAgC;IAE/D,YAAY,EAAG,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAE7C,IAAI,aAAa,6DAEhB;IAED,IAAI,iBAAiB,0BAEpB;IAED,iBAAiB,IAAI,SAAS;IAIxB,IAAI,CAAC,YAAY,EAAE,6BAA6B;IA+BtD,OAAO,CAAC,wBAAwB;YAwBlB,aAAa;YAOb,oBAAoB;IAO5B,KAAK;IAcX,cAAc,IAAI,aAAa;YAQjB,gBAAgB;IA+BxB,kBAAkB,CAAC,SAAS,EAAE,SAAS;CAI9C"}
@@ -0,0 +1,5 @@
1
+ import { Keyring } from '@dxos/keyring';
2
+ import { Space } from './space';
3
+ import { SigningContext } from './space-manager';
4
+ export declare const spaceGenesis: (keyring: Keyring, signingContext: SigningContext, space: Space) => Promise<import("@dxos/protocols/proto/dxos/halo/credentials").Credential[]>;
5
+ //# sourceMappingURL=genesis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genesis.d.ts","sourceRoot":"","sources":["../../../../src/space/genesis.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,YAAY,YAAmB,OAAO,kBAAkB,cAAc,SAAS,KAAK,gFAgBhG,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './auth';
2
+ export * from './space';
3
+ export * from './space-manager';
4
+ export * from './space-protocol';
5
+ export * from './genesis';
6
+ export * from './data-pipeline-controller';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/space/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replication.browser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication.browser.test.d.ts","sourceRoot":"","sources":["../../../../src/space/replication.browser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=space-manager.browser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-manager.browser.test.d.ts","sourceRoot":"","sources":["../../../../src/space/space-manager.browser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { CredentialSigner } from '@dxos/credentials';
2
+ import { FeedStore } from '@dxos/feed-store';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import { NetworkManager } from '@dxos/network-manager';
5
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
6
+ import { SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';
7
+ import { Credential, ProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';
8
+ import { Teleport } from '@dxos/teleport';
9
+ import { ComplexMap } from '@dxos/util';
10
+ import { Space } from './space';
11
+ import { SwarmIdentity } from './space-protocol';
12
+ export interface SigningContext {
13
+ identityKey: PublicKey;
14
+ deviceKey: PublicKey;
15
+ credentialSigner: CredentialSigner;
16
+ recordCredential: (credential: Credential) => Promise<void>;
17
+ profile?: ProfileDocument;
18
+ }
19
+ export declare type SpaceManagerParams = {
20
+ feedStore: FeedStore<FeedMessage>;
21
+ networkManager: NetworkManager;
22
+ };
23
+ export declare type ConstructSpaceParams = {
24
+ metadata: SpaceMetadata;
25
+ swarmIdentity: SwarmIdentity;
26
+ onNetworkConnection: (session: Teleport) => void;
27
+ };
28
+ /**
29
+ * Manages a collection of ECHO (Data) Spaces.
30
+ */
31
+ export declare class SpaceManager {
32
+ private readonly _spaces;
33
+ private readonly _feedStore;
34
+ private readonly _networkManager;
35
+ constructor({ feedStore, networkManager }: SpaceManagerParams);
36
+ get spaces(): ComplexMap<PublicKey, Space>;
37
+ open(): Promise<void>;
38
+ close(): Promise<void>;
39
+ constructSpace({ metadata, swarmIdentity, onNetworkConnection }: ConstructSpaceParams): Promise<Space>;
40
+ }
41
+ //# sourceMappingURL=space-manager.d.ts.map
@@ -0,0 +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;AACvD,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;gBAErC,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,kBAAkB;IAO7D,IAAI,MAAM,iCAET;IAGK,IAAI;IAGJ,KAAK;IAIL,cAAc,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,oBAAoB;CAuB5F"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=space-protocol.browser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-protocol.browser.test.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.browser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ /// <reference types="node" />
2
+ import { FeedWrapper } from '@dxos/feed-store';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import { NetworkManager, WireProtocol, WireProtocolParams } from '@dxos/network-manager';
5
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
6
+ import { Teleport } from '@dxos/teleport';
7
+ import { ReplicatorExtension } from '@dxos/teleport-extension-replicator';
8
+ import { AuthProvider, AuthVerifier } from './auth';
9
+ export declare const MOCK_AUTH_PROVIDER: AuthProvider;
10
+ export declare const MOCK_AUTH_VERIFIER: AuthVerifier;
11
+ export interface SwarmIdentity {
12
+ peerKey: PublicKey;
13
+ credentialProvider: AuthProvider;
14
+ credentialAuthenticator: AuthVerifier;
15
+ }
16
+ export declare type SpaceProtocolOptions = {
17
+ topic: PublicKey;
18
+ swarmIdentity: SwarmIdentity;
19
+ networkManager: NetworkManager;
20
+ /**
21
+ * Called when new session is authenticated.
22
+ * Additional extensions can be added here.
23
+ */
24
+ onSessionAuth?: (session: Teleport) => void;
25
+ };
26
+ /**
27
+ * Manages Teleport protocol stream creation and joining swarms with replication and presence extensions.
28
+ */
29
+ export declare class SpaceProtocol {
30
+ private readonly _networkManager;
31
+ private readonly _swarmIdentity;
32
+ private readonly _onSessionAuth?;
33
+ private readonly _topic;
34
+ private readonly _feeds;
35
+ private readonly _sessions;
36
+ private _connection?;
37
+ get sessions(): ReadonlyMap<PublicKey, SpaceProtocolSession>;
38
+ get feeds(): ReadonlySet<FeedWrapper<FeedMessage>>;
39
+ private get _ownPeerKey();
40
+ constructor({ topic, swarmIdentity, networkManager, onSessionAuth }: SpaceProtocolOptions);
41
+ addFeed(feed: FeedWrapper<FeedMessage>): void;
42
+ start(): Promise<void>;
43
+ stop(): Promise<void>;
44
+ private _createProtocolProvider;
45
+ }
46
+ export declare type SpaceProtocolSessionParams = {
47
+ wireParams: WireProtocolParams;
48
+ swarmIdentity: SwarmIdentity;
49
+ /**
50
+ * Called when new session is authenticated.
51
+ * Additional extensions can be added here.
52
+ */
53
+ onSessionAuth?: (session: Teleport) => void;
54
+ };
55
+ export declare enum AuthStatus {
56
+ INITIAL = "INITIAL",
57
+ SUCCESS = "SUCCESS",
58
+ FAILURE = "FAILURE"
59
+ }
60
+ /**
61
+ * Represents a single connection to a remote peer
62
+ */
63
+ export declare class SpaceProtocolSession implements WireProtocol {
64
+ private readonly _wireParams;
65
+ private readonly _onSessionAuth?;
66
+ private readonly _swarmIdentity;
67
+ private readonly _teleport;
68
+ readonly replicator: ReplicatorExtension;
69
+ private _authStatus;
70
+ get authStatus(): AuthStatus;
71
+ constructor({ wireParams, swarmIdentity, onSessionAuth }: SpaceProtocolSessionParams);
72
+ get stream(): import("stream").Duplex;
73
+ initialize(): Promise<void>;
74
+ destroy(): Promise<void>;
75
+ }
76
+ //# sourceMappingURL=space-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-protocol.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAEL,cAAc,EAEd,YAAY,EACZ,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAiB,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEnE,eAAO,MAAM,kBAAkB,EAAE,YAA+D,CAAC;AACjG,eAAO,MAAM,kBAAkB,EAAE,YAAwE,CAAC;AAG1G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,SAAS,CAAC;IACnB,kBAAkB,EAAE,YAAY,CAAC;IACjC,uBAAuB,EAAE,YAAY,CAAC;CACvC;AAED,oBAAY,oBAAoB,GAAG;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAG9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmE;IAE7F,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,IAAI,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAE3D;IAED,IAAI,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAEjD;IAGD,OAAO,KAAK,WAAW,GAEtB;gBAEW,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,oBAAoB;IASzF,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAShC,KAAK;IA2BL,IAAI;IAQV,OAAO,CAAC,uBAAuB;CAgBhC;AAED,oBAAY,0BAA0B,GAAG;IACvC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC7C,CAAC;AAEF,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAGD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IAEvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA8B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAGrC,SAAgB,UAAU,sBAA0D;IAEpF,OAAO,CAAC,WAAW,CAAsB;IAEzC,IACI,UAAU,eAEb;gBAGW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,0BAA0B;IAQpF,IAAI,MAAM,4BAET;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=space-protocol.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space-protocol.test.d.ts","sourceRoot":"","sources":["../../../../src/space/space-protocol.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { Event } from '@dxos/async';
2
+ import { FeedInfo } from '@dxos/credentials';
3
+ import { FeedWrapper } from '@dxos/feed-store';
4
+ import { PublicKey } from '@dxos/keys';
5
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
6
+ import { Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
7
+ import { AsyncCallback, Callback } from '@dxos/util';
8
+ import { PipelineAccessor } from '../pipeline';
9
+ import { DataPipelineController } from './data-pipeline-controller';
10
+ import { SpaceProtocol } from './space-protocol';
11
+ declare type FeedProvider = (feedKey: PublicKey) => Promise<FeedWrapper<FeedMessage>>;
12
+ export declare type SpaceParams = {
13
+ spaceKey: PublicKey;
14
+ protocol: SpaceProtocol;
15
+ genesisFeed: FeedWrapper<FeedMessage>;
16
+ feedProvider: FeedProvider;
17
+ };
18
+ /**
19
+ * Spaces are globally addressable databases with access control.
20
+ */
21
+ export declare class Space {
22
+ readonly onCredentialProcessed: Callback<AsyncCallback<Credential>>;
23
+ readonly stateUpdate: Event<void>;
24
+ readonly protocol: SpaceProtocol;
25
+ private readonly _key;
26
+ private readonly _genesisFeedKey;
27
+ private readonly _feedProvider;
28
+ private readonly _controlPipeline;
29
+ private _isOpen;
30
+ private _controlFeed?;
31
+ private _dataFeed?;
32
+ private _dataPipeline?;
33
+ private _dataPipelineController?;
34
+ constructor({ spaceKey, protocol, genesisFeed, feedProvider }: SpaceParams);
35
+ get key(): PublicKey;
36
+ get isOpen(): boolean;
37
+ get genesisFeedKey(): PublicKey;
38
+ get controlFeedKey(): PublicKey | undefined;
39
+ get dataFeedKey(): PublicKey | undefined;
40
+ get spaceState(): import("@dxos/credentials").SpaceState;
41
+ /**
42
+ * @test-only
43
+ */
44
+ get controlPipeline(): PipelineAccessor;
45
+ setControlFeed(feed: FeedWrapper<FeedMessage>): this;
46
+ setDataFeed(feed: FeedWrapper<FeedMessage>): this;
47
+ /**
48
+ * Use for diagnostics.
49
+ */
50
+ getControlFeeds(): FeedInfo[];
51
+ /**
52
+ * Use for diagnostics.
53
+ */
54
+ open(): Promise<void>;
55
+ close(): Promise<void>;
56
+ initDataPipeline(controller: DataPipelineController): Promise<void>;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../../../src/space/space.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAA4B,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAgB,UAAU,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAY,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,aAAK,YAAY,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAE9E,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF;;GAEG;AAEH,qBACa,KAAK;IAChB,SAAgB,qBAAqB,sCAA6C;IAClF,SAAgB,WAAW,cAAe;IAC1C,SAAgB,QAAQ,EAAE,aAAa,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,aAAa,CAAC,CAAW;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAyB;gBAE7C,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,WAAW;IA+B1E,IACI,GAAG,cAEN;IAED,IAAI,MAAM,YAET;IAED,IAAI,cAAc,IAAI,SAAS,CAE9B;IAED,IAAI,cAAc,0BAEjB;IAED,IAAI,WAAW,0BAEd;IAED,IAAI,UAAU,2CAEb;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,gBAAgB,CAEtC;IAED,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAO7C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAO1C;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAI7B;;OAEG;IAMG,IAAI;IAeJ,KAAK;IAeL,gBAAgB,CAAC,UAAU,EAAE,sBAAsB;CAyB1D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=space.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space.test.d.ts","sourceRoot":"","sources":["../../../../src/space/space.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './test-agent-builder';
2
+ export * from './test-feed-builder';
3
+ export * from './util';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { FeedStore } from '@dxos/feed-store';
2
+ import { Keyring } from '@dxos/keyring';
3
+ import { PublicKey } from '@dxos/keys';
4
+ import { MemorySignalManagerContext } from '@dxos/messaging';
5
+ import { NetworkManager } from '@dxos/network-manager';
6
+ import type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';
7
+ import { Storage } from '@dxos/random-access-storage';
8
+ import { Presence } from '@dxos/teleport-extension-presence';
9
+ import { Space, SpaceManager, SpaceProtocol } from '../space';
10
+ import { DataPipelineControllerImpl } from '../space/data-pipeline-controller';
11
+ import { TestFeedBuilder } from './test-feed-builder';
12
+ export declare type NetworkManagerProvider = () => NetworkManager;
13
+ export declare const MemoryNetworkManagerProvider: (signalContext: MemorySignalManagerContext) => NetworkManagerProvider;
14
+ export declare const WebsocketNetworkManagerProvider: (signalUrl: string) => NetworkManagerProvider;
15
+ export declare type TestAgentBuilderOptions = {
16
+ storage?: Storage;
17
+ networkManagerProvider?: NetworkManagerProvider;
18
+ };
19
+ /**
20
+ * Factory for test agents.
21
+ */
22
+ export declare class TestAgentBuilder {
23
+ private readonly _agents;
24
+ private readonly _storage;
25
+ private readonly _networkManagerProvider;
26
+ constructor({ storage, networkManagerProvider }?: TestAgentBuilderOptions);
27
+ close(): Promise<void[][]>;
28
+ get agents(): TestAgent[];
29
+ getAgent(deviceKey: PublicKey): TestAgent | undefined;
30
+ createPeer(): Promise<TestAgent>;
31
+ }
32
+ /**
33
+ * Test agent that enables the creation and replication of multiple spaces.
34
+ */
35
+ export declare class TestAgent {
36
+ private readonly _networkManagerProvider;
37
+ private readonly _feedBuilder;
38
+ readonly identityKey: PublicKey;
39
+ readonly deviceKey: PublicKey;
40
+ private readonly _spaces;
41
+ readonly keyring: Keyring;
42
+ readonly feedStore: FeedStore<FeedMessage>;
43
+ constructor(_networkManagerProvider: NetworkManagerProvider, _feedBuilder: TestFeedBuilder, identityKey: PublicKey, deviceKey: PublicKey);
44
+ close(): Promise<void[]>;
45
+ get spaces(): Space[];
46
+ getSpace(spaceKey: PublicKey): Space | undefined;
47
+ createSpaceManager(): SpaceManager;
48
+ createSpace(identityKey?: PublicKey, spaceKey?: PublicKey, genesisKey?: PublicKey): Promise<[Space, DataPipelineControllerImpl]>;
49
+ createSpaceProtocol(topic: PublicKey, presence?: Presence): SpaceProtocol;
50
+ createPresence(): Presence;
51
+ }
52
+ //# sourceMappingURL=test-agent-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-agent-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-agent-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAuB,0BAA0B,EAA0B,MAAM,iBAAiB,CAAC;AAE1G,OAAO,EAAwD,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAiB,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAK7D,OAAO,EAA0C,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,oBAAY,sBAAsB,GAAG,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,4BAA4B,kBACvB,0BAA0B,KAAG,sBAKzC,CAAC;AAEP,eAAO,MAAM,+BAA+B,cAC9B,MAAM,KAAG,sBAKjB,CAAC;AAEP,oBAAY,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;IAOlB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY;aACb,WAAW,EAAE,SAAS;aACtB,SAAS,EAAE,SAAS;IATtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAE5E,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;gBAG/B,uBAAuB,EAAE,sBAAsB,EAC/C,YAAY,EAAE,eAAe,EAC9B,WAAW,EAAE,SAAS,EACtB,SAAS,EAAE,SAAS;IAMhC,KAAK;IAIX,IAAI,MAAM,YAET;IAED,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAI5B,kBAAkB;IAOZ,WAAW,CACf,WAAW,GAAE,SAA4B,EACzC,QAAQ,CAAC,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;IAuC/C,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAkBzD,cAAc;CAQf"}