@dxos/echo-pipeline 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (221) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/{browser/chunk-WJJXJTNS.mjs → neutral/chunk-46DCRDA7.mjs} +44 -13
  4. package/dist/lib/neutral/chunk-46DCRDA7.mjs.map +7 -0
  5. package/dist/lib/{browser/chunk-FR6GJ4S4.mjs → neutral/chunk-LR7UFVQX.mjs} +145 -618
  6. package/dist/lib/neutral/chunk-LR7UFVQX.mjs.map +7 -0
  7. package/dist/lib/{browser → neutral}/filter/index.mjs +1 -2
  8. package/dist/lib/neutral/index.mjs +7332 -0
  9. package/dist/lib/neutral/index.mjs.map +7 -0
  10. package/dist/lib/neutral/meta.json +1 -0
  11. package/dist/lib/{browser → neutral}/testing/index.mjs +49 -292
  12. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  13. package/dist/types/src/automerge/automerge-host-subduction.test.d.ts +2 -0
  14. package/dist/types/src/automerge/automerge-host-subduction.test.d.ts.map +1 -0
  15. package/dist/types/src/automerge/automerge-host.d.ts +105 -27
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts +2 -0
  18. package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts.map +1 -0
  19. package/dist/types/src/automerge/automerge-repo.test.d.ts +1 -1
  20. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -1
  21. package/dist/types/src/automerge/automerge-subduction.test.d.ts +2 -0
  22. package/dist/types/src/automerge/automerge-subduction.test.d.ts.map +1 -0
  23. package/dist/types/src/automerge/collection-synchronizer.d.ts +22 -2
  24. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
  25. package/dist/types/src/automerge/echo-data-monitor.d.ts.map +1 -1
  26. package/dist/types/src/automerge/echo-network-adapter.d.ts +17 -11
  27. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  28. package/dist/types/src/automerge/echo-replicator.d.ts +28 -16
  29. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  30. package/dist/types/src/automerge/errors.d.ts +35 -0
  31. package/dist/types/src/automerge/errors.d.ts.map +1 -0
  32. package/dist/types/src/automerge/handle-state.d.ts +52 -0
  33. package/dist/types/src/automerge/handle-state.d.ts.map +1 -0
  34. package/dist/types/src/automerge/heads-store.d.ts +9 -2
  35. package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
  36. package/dist/types/src/automerge/index.d.ts +2 -0
  37. package/dist/types/src/automerge/index.d.ts.map +1 -1
  38. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +10 -4
  39. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
  40. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +8 -8
  41. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  42. package/dist/types/src/automerge/mesh-echo-replicator.d.ts +6 -5
  43. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  44. package/dist/types/src/automerge/network-protocol.d.ts.map +1 -1
  45. package/dist/types/src/automerge/space-collection.d.ts.map +1 -1
  46. package/dist/types/src/common/feeds.d.ts.map +1 -1
  47. package/dist/types/src/common/space-id.d.ts.map +1 -1
  48. package/dist/types/src/db-host/automerge-data-source.d.ts +35 -0
  49. package/dist/types/src/db-host/automerge-data-source.d.ts.map +1 -0
  50. package/dist/types/src/db-host/automerge-data-source.test.d.ts +2 -0
  51. package/dist/types/src/db-host/automerge-data-source.test.d.ts.map +1 -0
  52. package/dist/types/src/db-host/automerge-metrics.d.ts.map +1 -1
  53. package/dist/types/src/db-host/data-service.d.ts +12 -6
  54. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  55. package/dist/types/src/db-host/database-root.d.ts +9 -3
  56. package/dist/types/src/db-host/database-root.d.ts.map +1 -1
  57. package/dist/types/src/db-host/documents-synchronizer.d.ts +30 -8
  58. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  59. package/dist/types/src/db-host/echo-host.d.ts +74 -28
  60. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  61. package/dist/types/src/db-host/index.d.ts +2 -0
  62. package/dist/types/src/db-host/index.d.ts.map +1 -1
  63. package/dist/types/src/db-host/invalidation-hint.d.ts +19 -0
  64. package/dist/types/src/db-host/invalidation-hint.d.ts.map +1 -0
  65. package/dist/types/src/db-host/local-queue-service.d.ts +19 -0
  66. package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
  67. package/dist/types/src/db-host/query-invalidation.test.d.ts +2 -0
  68. package/dist/types/src/db-host/query-invalidation.test.d.ts.map +1 -0
  69. package/dist/types/src/db-host/query-service.d.ts +18 -10
  70. package/dist/types/src/db-host/query-service.d.ts.map +1 -1
  71. package/dist/types/src/db-host/queue-data-source.d.ts +38 -0
  72. package/dist/types/src/db-host/queue-data-source.d.ts.map +1 -0
  73. package/dist/types/src/db-host/queue-service.test.d.ts +2 -0
  74. package/dist/types/src/db-host/queue-service.test.d.ts.map +1 -0
  75. package/dist/types/src/db-host/space-state-manager.d.ts +3 -2
  76. package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
  77. package/dist/types/src/db-host/stub.d.ts +11 -0
  78. package/dist/types/src/db-host/stub.d.ts.map +1 -0
  79. package/dist/types/src/edge/echo-edge-replicator.d.ts +7 -6
  80. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  81. package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts +39 -0
  82. package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts.map +1 -0
  83. package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts +2 -0
  84. package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts.map +1 -0
  85. package/dist/types/src/edge/index.d.ts +1 -0
  86. package/dist/types/src/edge/index.d.ts.map +1 -1
  87. package/dist/types/src/edge/inflight-request-limiter.d.ts.map +1 -1
  88. package/dist/types/src/filter/filter-match.d.ts +1 -1
  89. package/dist/types/src/filter/filter-match.d.ts.map +1 -1
  90. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  91. package/dist/types/src/pipeline/message-selector.d.ts.map +1 -1
  92. package/dist/types/src/pipeline/pipeline.d.ts +2 -2
  93. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  94. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -1
  95. package/dist/types/src/query/errors.d.ts +16 -20
  96. package/dist/types/src/query/errors.d.ts.map +1 -1
  97. package/dist/types/src/query/plan.d.ts +59 -8
  98. package/dist/types/src/query/plan.d.ts.map +1 -1
  99. package/dist/types/src/query/query-executor.d.ts +55 -12
  100. package/dist/types/src/query/query-executor.d.ts.map +1 -1
  101. package/dist/types/src/query/query-planner.d.ts +10 -1
  102. package/dist/types/src/query/query-planner.d.ts.map +1 -1
  103. package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -1
  104. package/dist/types/src/space/auth.d.ts +3 -3
  105. package/dist/types/src/space/auth.d.ts.map +1 -1
  106. package/dist/types/src/space/control-pipeline.d.ts +4 -3
  107. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  108. package/dist/types/src/space/space-manager.d.ts +7 -7
  109. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  110. package/dist/types/src/space/space-protocol.d.ts +9 -8
  111. package/dist/types/src/space/space-protocol.d.ts.map +1 -1
  112. package/dist/types/src/space/space.d.ts +5 -5
  113. package/dist/types/src/space/space.d.ts.map +1 -1
  114. package/dist/types/src/testing/change-metadata.d.ts.map +1 -1
  115. package/dist/types/src/testing/index.d.ts +0 -2
  116. package/dist/types/src/testing/index.d.ts.map +1 -1
  117. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  118. package/dist/types/src/testing/test-feed-builder.d.ts.map +1 -1
  119. package/dist/types/src/testing/test-network-adapter.d.ts +1 -1
  120. package/dist/types/src/testing/test-network-adapter.d.ts.map +1 -1
  121. package/dist/types/src/testing/test-replicator.d.ts +13 -13
  122. package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
  123. package/dist/types/src/util.d.ts.map +1 -1
  124. package/dist/types/tsconfig.tsbuildinfo +1 -1
  125. package/package.json +56 -54
  126. package/src/automerge/automerge-host-subduction.test.ts +263 -0
  127. package/src/automerge/automerge-host.test.ts +145 -32
  128. package/src/automerge/automerge-host.ts +442 -163
  129. package/src/automerge/automerge-repo-subduction.test.ts +1054 -0
  130. package/src/automerge/automerge-repo.test.ts +284 -77
  131. package/src/automerge/automerge-subduction.test.ts +330 -0
  132. package/src/automerge/collection-synchronizer.test.ts +96 -16
  133. package/src/automerge/collection-synchronizer.ts +125 -26
  134. package/src/automerge/echo-network-adapter.test.ts +2 -1
  135. package/src/automerge/echo-network-adapter.ts +44 -32
  136. package/src/automerge/echo-replicator.ts +30 -16
  137. package/src/automerge/errors.ts +10 -0
  138. package/src/automerge/handle-state.ts +62 -0
  139. package/src/automerge/heads-store.ts +42 -3
  140. package/src/automerge/index.ts +2 -0
  141. package/src/automerge/leveldb-storage-adapter.ts +70 -4
  142. package/src/automerge/mesh-echo-replicator-connection.ts +8 -8
  143. package/src/automerge/mesh-echo-replicator.ts +14 -11
  144. package/src/db-host/automerge-data-source.test.ts +299 -0
  145. package/src/db-host/automerge-data-source.ts +187 -0
  146. package/src/db-host/data-service.ts +27 -10
  147. package/src/db-host/database-root.ts +19 -7
  148. package/src/db-host/documents-synchronizer.test.ts +145 -14
  149. package/src/db-host/documents-synchronizer.ts +158 -59
  150. package/src/db-host/echo-host.ts +376 -90
  151. package/src/db-host/index.ts +2 -0
  152. package/src/db-host/invalidation-hint.ts +50 -0
  153. package/src/db-host/local-queue-service.ts +127 -0
  154. package/src/db-host/query-invalidation.test.ts +270 -0
  155. package/src/db-host/query-service.ts +108 -111
  156. package/src/db-host/queue-data-source.ts +160 -0
  157. package/src/db-host/queue-service.test.ts +145 -0
  158. package/src/db-host/space-state-manager.ts +11 -9
  159. package/src/db-host/stub.ts +33 -0
  160. package/src/edge/echo-edge-replicator.test.ts +9 -9
  161. package/src/edge/echo-edge-replicator.ts +50 -42
  162. package/src/edge/echo-edge-subduction-replicator.test.ts +158 -0
  163. package/src/edge/echo-edge-subduction-replicator.ts +377 -0
  164. package/src/edge/index.ts +1 -0
  165. package/src/filter/filter-match.test.ts +41 -25
  166. package/src/filter/filter-match.ts +75 -20
  167. package/src/metadata/metadata-store.ts +8 -5
  168. package/src/pipeline/pipeline-stress.test.ts +1 -3
  169. package/src/pipeline/pipeline.test.ts +0 -1
  170. package/src/pipeline/pipeline.ts +2 -3
  171. package/src/query/errors.ts +2 -2
  172. package/src/query/plan.ts +73 -9
  173. package/src/query/query-executor.ts +1064 -172
  174. package/src/query/query-planner.test.ts +854 -86
  175. package/src/query/query-planner.ts +444 -38
  176. package/src/space/admission-discovery-extension.ts +1 -1
  177. package/src/space/auth.ts +6 -6
  178. package/src/space/control-pipeline.test.ts +2 -2
  179. package/src/space/control-pipeline.ts +7 -7
  180. package/src/space/space-manager.ts +12 -17
  181. package/src/space/space-protocol.browser.test.ts +13 -12
  182. package/src/space/space-protocol.test.ts +13 -13
  183. package/src/space/space-protocol.ts +16 -15
  184. package/src/space/space.test.ts +2 -2
  185. package/src/space/space.ts +9 -10
  186. package/src/testing/index.ts +0 -2
  187. package/src/testing/test-agent-builder.ts +0 -1
  188. package/src/testing/test-network-adapter.ts +24 -3
  189. package/src/testing/test-replicator.ts +15 -20
  190. package/src/util.ts +7 -3
  191. package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
  192. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-FR6GJ4S4.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-WJJXJTNS.mjs.map +0 -7
  195. package/dist/lib/browser/index.mjs +0 -5492
  196. package/dist/lib/browser/index.mjs.map +0 -7
  197. package/dist/lib/browser/meta.json +0 -1
  198. package/dist/lib/browser/testing/index.mjs.map +0 -7
  199. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  200. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  201. package/dist/lib/node-esm/chunk-JQCCVDLT.mjs +0 -2144
  202. package/dist/lib/node-esm/chunk-JQCCVDLT.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-LEQ77KAT.mjs +0 -240
  204. package/dist/lib/node-esm/chunk-LEQ77KAT.mjs.map +0 -7
  205. package/dist/lib/node-esm/filter/index.mjs +0 -13
  206. package/dist/lib/node-esm/filter/index.mjs.map +0 -7
  207. package/dist/lib/node-esm/index.mjs +0 -5492
  208. package/dist/lib/node-esm/index.mjs.map +0 -7
  209. package/dist/lib/node-esm/meta.json +0 -1
  210. package/dist/lib/node-esm/testing/index.mjs +0 -764
  211. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  212. package/dist/types/src/db-host/documents-iterator.d.ts +0 -7
  213. package/dist/types/src/db-host/documents-iterator.d.ts.map +0 -1
  214. package/dist/types/src/testing/test-data.d.ts +0 -18
  215. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  216. package/dist/types/src/testing/test-schema.d.ts +0 -37
  217. package/dist/types/src/testing/test-schema.d.ts.map +0 -1
  218. package/src/db-host/documents-iterator.ts +0 -74
  219. package/src/testing/test-data.ts +0 -127
  220. package/src/testing/test-schema.ts +0 -53
  221. /package/dist/lib/{browser → neutral}/filter/index.mjs.map +0 -0
@@ -1,764 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- MOCK_AUTH_PROVIDER,
4
- MOCK_AUTH_VERIFIER,
5
- MetadataStore,
6
- SpaceManager,
7
- SpaceProtocol,
8
- valueEncoding
9
- } from "../chunk-JQCCVDLT.mjs";
10
- import {
11
- __export
12
- } from "../chunk-HSLMI22Q.mjs";
13
-
14
- // src/testing/change-metadata.ts
15
- import { log } from "@dxos/log";
16
- import { schema } from "@dxos/protocols/proto";
17
- var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/testing/change-metadata.ts";
18
- var EchoMetadata = schema.getCodecForType("dxos.echo.metadata.EchoMetadata");
19
- var changeStorageVersionInMetadata = async (storage, version) => {
20
- log("Changing storage version in metadata. USE ONLY FOR TESTING.", void 0, {
21
- F: __dxlog_file,
22
- L: 19,
23
- S: void 0,
24
- C: (f, a) => f(...a)
25
- });
26
- const metadata = new MetadataStore(storage.createDirectory("metadata"));
27
- await metadata.load();
28
- const echoMetadata = metadata.metadata;
29
- echoMetadata.version = version;
30
- const file = metadata._directory.getOrCreateFile("EchoMetadata");
31
- await metadata._writeFile(file, EchoMetadata, echoMetadata);
32
- await metadata._directory.flush();
33
- };
34
-
35
- // src/testing/test-agent-builder.ts
36
- import { Context } from "@dxos/context";
37
- import { CredentialGenerator } from "@dxos/credentials";
38
- import { PublicKey } from "@dxos/keys";
39
- import { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from "@dxos/messaging";
40
- import { MemoryTransportFactory, SwarmNetworkManager, createRtcTransportFactory } from "@dxos/network-manager";
41
- import { AdmittedFeed } from "@dxos/protocols/proto/dxos/halo/credentials";
42
- import { StorageType, createStorage } from "@dxos/random-access-storage";
43
- import { Gossip, Presence } from "@dxos/teleport-extension-gossip";
44
- import { BlobStore } from "@dxos/teleport-extension-object-sync";
45
- import { ComplexMap } from "@dxos/util";
46
-
47
- // src/testing/test-feed-builder.ts
48
- import { TestBuilder } from "@dxos/feed-store/testing";
49
- var TestFeedBuilder = class extends TestBuilder {
50
- constructor() {
51
- super({
52
- valueEncoding
53
- });
54
- }
55
- };
56
-
57
- // src/testing/test-agent-builder.ts
58
- var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts";
59
- var MemoryNetworkManagerProvider = (signalContext) => () => new SwarmNetworkManager({
60
- signalManager: new MemorySignalManager(signalContext),
61
- transportFactory: MemoryTransportFactory
62
- });
63
- var WebsocketNetworkManagerProvider = (signalUrl) => () => new SwarmNetworkManager({
64
- signalManager: new WebsocketSignalManager([
65
- {
66
- server: signalUrl
67
- }
68
- ]),
69
- transportFactory: createRtcTransportFactory()
70
- });
71
- var TestAgentBuilder = class {
72
- _agents = new ComplexMap(PublicKey.hash);
73
- _storage;
74
- _networkManagerProvider;
75
- constructor({ storage, networkManagerProvider } = {}) {
76
- this._storage = storage ?? createStorage({
77
- type: StorageType.RAM
78
- });
79
- this._networkManagerProvider = networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());
80
- }
81
- async close() {
82
- return Promise.all(this.agents.map((agent) => agent.close()));
83
- }
84
- get agents() {
85
- return Array.from(this._agents.values());
86
- }
87
- getAgent(deviceKey) {
88
- return this._agents.get(deviceKey);
89
- }
90
- async createPeer() {
91
- const feedBuilder = new TestFeedBuilder().setStorage(this._storage, `agent-${this._agents.size}`);
92
- const identityKey = await feedBuilder.keyring.createKey();
93
- const deviceKey = await feedBuilder.keyring.createKey();
94
- const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);
95
- this._agents.set(deviceKey, agent);
96
- return agent;
97
- }
98
- };
99
- var TestAgent = class {
100
- _networkManagerProvider;
101
- _feedBuilder;
102
- identityKey;
103
- deviceKey;
104
- _spaces = new ComplexMap(PublicKey.hash);
105
- storage;
106
- keyring;
107
- feedStore;
108
- _metadataStore;
109
- get metadataStore() {
110
- return this._metadataStore ??= new MetadataStore(this.storage.createDirectory("metadata"));
111
- }
112
- _blobStore;
113
- get blobStore() {
114
- return this._blobStore ??= new BlobStore(this.storage.createDirectory("blobs"));
115
- }
116
- constructor(_networkManagerProvider, _feedBuilder, identityKey, deviceKey) {
117
- this._networkManagerProvider = _networkManagerProvider;
118
- this._feedBuilder = _feedBuilder;
119
- this.identityKey = identityKey;
120
- this.deviceKey = deviceKey;
121
- this.storage = this._feedBuilder.storage;
122
- this.keyring = this._feedBuilder.keyring;
123
- this.feedStore = this._feedBuilder.createFeedStore();
124
- }
125
- async close() {
126
- return Promise.all([
127
- ...this.spaces.map((space) => space.close())
128
- ]);
129
- }
130
- get spaces() {
131
- return Array.from(this._spaces.values());
132
- }
133
- getSpace(spaceKey2) {
134
- return this._spaces.get(spaceKey2);
135
- }
136
- _networkManager;
137
- get networkManager() {
138
- if (this._networkManager) {
139
- return this._networkManager;
140
- }
141
- this._networkManager = this._networkManagerProvider();
142
- this._networkManager.setPeerInfo({
143
- peerKey: this.deviceKey.toHex(),
144
- identityKey: this.identityKey.toHex()
145
- });
146
- return this._networkManager;
147
- }
148
- _spaceManager;
149
- get spaceManager() {
150
- return this._spaceManager ??= new SpaceManager({
151
- feedStore: this.feedStore,
152
- networkManager: this.networkManager,
153
- metadataStore: this.metadataStore,
154
- blobStore: this.blobStore
155
- });
156
- }
157
- async createSpace(identityKey = this.identityKey, spaceKey2, genesisKey, dataKey, saveMetadata = false) {
158
- if (!spaceKey2) {
159
- saveMetadata = true;
160
- spaceKey2 = await this.keyring.createKey();
161
- }
162
- if (!genesisKey) {
163
- genesisKey = await this.keyring.createKey();
164
- }
165
- const controlFeed = await this.feedStore.openFeed(genesisKey, {
166
- writable: true
167
- });
168
- const dataFeed = await this.feedStore.openFeed(dataKey ?? await this.keyring.createKey(), {
169
- writable: true,
170
- sparse: true
171
- });
172
- const metadata = {
173
- key: spaceKey2,
174
- genesisFeedKey: genesisKey,
175
- controlFeedKey: controlFeed.key,
176
- dataFeedKey: dataFeed.key
177
- };
178
- if (saveMetadata) {
179
- await this.metadataStore.addSpace(metadata);
180
- }
181
- await this.spaceManager.open();
182
- const space = await this.spaceManager.constructSpace({
183
- metadata,
184
- swarmIdentity: {
185
- identityKey: this.identityKey,
186
- peerKey: this.deviceKey,
187
- credentialProvider: MOCK_AUTH_PROVIDER,
188
- credentialAuthenticator: MOCK_AUTH_VERIFIER
189
- },
190
- memberKey: identityKey,
191
- onAuthorizedConnection: (session) => {
192
- session.addExtension("dxos.mesh.teleport.gossip", this.createGossip().createExtension({
193
- remotePeerId: session.remotePeerId
194
- }));
195
- },
196
- onDelegatedInvitationStatusChange: async () => {
197
- },
198
- onMemberRolesChanged: async () => {
199
- }
200
- });
201
- await space.setControlFeed(controlFeed);
202
- await space.setDataFeed(dataFeed);
203
- await space.open(new Context(void 0, {
204
- F: __dxlog_file2,
205
- L: 206
206
- }));
207
- this._spaces.set(spaceKey2, space);
208
- return space;
209
- }
210
- createSpaceProtocol(topic, gossip) {
211
- return new SpaceProtocol({
212
- topic,
213
- swarmIdentity: {
214
- identityKey: this.identityKey,
215
- peerKey: this.deviceKey,
216
- credentialProvider: MOCK_AUTH_PROVIDER,
217
- credentialAuthenticator: MOCK_AUTH_VERIFIER
218
- },
219
- networkManager: this.networkManager,
220
- blobStore: this.blobStore,
221
- onSessionAuth: (session) => {
222
- session.addExtension("dxos.mesh.teleport.gossip", (gossip ?? this.createGossip()).createExtension({
223
- remotePeerId: session.remotePeerId
224
- }));
225
- }
226
- });
227
- }
228
- createGossip() {
229
- return new Gossip({
230
- localPeerId: this.deviceKey
231
- });
232
- }
233
- createPresence(gossip) {
234
- return new Presence({
235
- announceInterval: 30,
236
- offlineTimeout: 200,
237
- identityKey: this.identityKey,
238
- gossip: gossip ?? this.createGossip()
239
- });
240
- }
241
- async spaceGenesis(space) {
242
- const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);
243
- const credentials = [
244
- ...await generator.createSpaceGenesis(space.key, space.controlFeedKey),
245
- await generator.createFeedAdmission(space.key, space.dataFeedKey, AdmittedFeed.Designation.DATA),
246
- await generator.createEpochCredential(space.key)
247
- ];
248
- for (const credential of credentials) {
249
- await space.controlPipeline.writer.write({
250
- credential: {
251
- credential
252
- }
253
- });
254
- }
255
- }
256
- };
257
-
258
- // src/testing/test-network-adapter.ts
259
- import { NetworkAdapter } from "@automerge/automerge-repo";
260
- import { Trigger, sleep } from "@dxos/async";
261
- import { invariant } from "@dxos/invariant";
262
- import { log as log2 } from "@dxos/log";
263
- var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/testing/test-network-adapter.ts";
264
- var TestAdapter = class _TestAdapter extends NetworkAdapter {
265
- _params;
266
- static createPair(connectionStateProvider = () => "on") {
267
- const adapter1 = new _TestAdapter({
268
- send: (message) => connectionStateProvider() === "on" && sleep(10).then(() => adapter2.receive(message))
269
- });
270
- const adapter2 = new _TestAdapter({
271
- send: (message) => connectionStateProvider() === "on" && sleep(10).then(() => adapter1.receive(message))
272
- });
273
- return [
274
- adapter1,
275
- adapter2
276
- ];
277
- }
278
- onConnect = new Trigger();
279
- constructor(_params) {
280
- super(), this._params = _params;
281
- }
282
- isReady() {
283
- return true;
284
- }
285
- whenReady() {
286
- return Promise.resolve();
287
- }
288
- connect(peerId) {
289
- this.peerId = peerId;
290
- this.onConnect.wake();
291
- }
292
- peerCandidate(peerId) {
293
- invariant(peerId, "PeerId is required", {
294
- F: __dxlog_file3,
295
- L: 45,
296
- S: this,
297
- A: [
298
- "peerId",
299
- "'PeerId is required'"
300
- ]
301
- });
302
- this.emit("peer-candidate", {
303
- peerId,
304
- peerMetadata: {}
305
- });
306
- }
307
- peerDisconnected(peerId) {
308
- invariant(peerId, "PeerId is required", {
309
- F: __dxlog_file3,
310
- L: 50,
311
- S: this,
312
- A: [
313
- "peerId",
314
- "'PeerId is required'"
315
- ]
316
- });
317
- this.emit("peer-disconnected", {
318
- peerId
319
- });
320
- }
321
- send(message) {
322
- log2("send", {
323
- from: message.senderId,
324
- to: message.targetId,
325
- type: message.type
326
- }, {
327
- F: __dxlog_file3,
328
- L: 55,
329
- S: this,
330
- C: (f, a) => f(...a)
331
- });
332
- this._params.send(message);
333
- }
334
- disconnect() {
335
- this.peerId = void 0;
336
- }
337
- receive(message) {
338
- invariant(this.peerId, "Peer id is not set", {
339
- F: __dxlog_file3,
340
- L: 64,
341
- S: this,
342
- A: [
343
- "this.peerId",
344
- "'Peer id is not set'"
345
- ]
346
- });
347
- this.emit("message", message);
348
- }
349
- };
350
-
351
- // src/testing/test-replicator.ts
352
- import { sleep as sleep2, synchronized } from "@dxos/async";
353
- import { LifecycleState, Resource } from "@dxos/context";
354
- import { invariant as invariant2 } from "@dxos/invariant";
355
- import { log as log3 } from "@dxos/log";
356
- import { AutomergeReplicator } from "@dxos/teleport-extension-automerge-replicator";
357
- function _ts_decorate(decorators, target, key, desc) {
358
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
359
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
360
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
361
- return c > 3 && r && Object.defineProperty(target, key, r), r;
362
- }
363
- var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo-pipeline/src/testing/test-replicator.ts";
364
- var TestReplicationNetwork = class extends Resource {
365
- _replicators = /* @__PURE__ */ new Set();
366
- _latency = void 0;
367
- constructor(options = {}) {
368
- super();
369
- this._latency = options.latency;
370
- }
371
- async _close(ctx) {
372
- for (const replicator of this._replicators) {
373
- for (const connection of replicator.connections) {
374
- void connection.writable.abort();
375
- void connection.readable.cancel();
376
- }
377
- }
378
- }
379
- async createReplicator() {
380
- const replicator = new TestReplicator({
381
- onConnect: async () => {
382
- invariant2(this._lifecycleState === LifecycleState.OPEN, void 0, {
383
- F: __dxlog_file4,
384
- L: 45,
385
- S: this,
386
- A: [
387
- "this._lifecycleState === LifecycleState.OPEN",
388
- ""
389
- ]
390
- });
391
- await this._connectReplicator(replicator);
392
- },
393
- onDisconnect: async () => {
394
- invariant2(this._lifecycleState === LifecycleState.OPEN, void 0, {
395
- F: __dxlog_file4,
396
- L: 49,
397
- S: this,
398
- A: [
399
- "this._lifecycleState === LifecycleState.OPEN",
400
- ""
401
- ]
402
- });
403
- await this._disconnectReplicator(replicator);
404
- }
405
- });
406
- this._replicators.add(replicator);
407
- return replicator;
408
- }
409
- async _connectReplicator(replicator) {
410
- for (const otherReplicator of this._replicators.values()) {
411
- if (otherReplicator === replicator || !otherReplicator.connected) {
412
- continue;
413
- }
414
- log3("create connection", {
415
- from: replicator.context.peerId,
416
- to: otherReplicator.context.peerId
417
- }, {
418
- F: __dxlog_file4,
419
- L: 63,
420
- S: this,
421
- C: (f, a) => f(...a)
422
- });
423
- const [connection1, connection2] = this._createConnectionPair(replicator.context.peerId, otherReplicator.context.peerId);
424
- await replicator.context.onConnectionOpen(connection1);
425
- await otherReplicator.context.onConnectionOpen(connection2);
426
- }
427
- }
428
- async _disconnectReplicator(replicator) {
429
- for (const connection of replicator.connections) {
430
- await replicator.context.onConnectionClosed(connection);
431
- await connection.otherSide.owningReplicator.removeConnection(connection.otherSide);
432
- }
433
- }
434
- _createConnectionPair(peer1, peer2) {
435
- const LOG = false;
436
- const forward = new TransformStream({
437
- transform: async (message, controller) => {
438
- if (LOG) {
439
- log3("replicate", {
440
- from: peer1,
441
- to: peer2,
442
- message
443
- }, {
444
- F: __dxlog_file4,
445
- L: 86,
446
- S: this,
447
- C: (f, a) => f(...a)
448
- });
449
- }
450
- if (this._latency !== void 0) {
451
- await sleep2(this._latency);
452
- }
453
- controller.enqueue(message);
454
- }
455
- });
456
- const backwards = new TransformStream({
457
- transform: async (message, controller) => {
458
- if (LOG) {
459
- log3("replicate", {
460
- from: peer2,
461
- to: peer1,
462
- message
463
- }, {
464
- F: __dxlog_file4,
465
- L: 99,
466
- S: this,
467
- C: (f, a) => f(...a)
468
- });
469
- }
470
- if (this._latency !== void 0) {
471
- await sleep2(this._latency);
472
- }
473
- controller.enqueue(message);
474
- }
475
- });
476
- const connection1 = new TestReplicatorConnection(peer2, backwards.readable, forward.writable);
477
- const connection2 = new TestReplicatorConnection(peer1, forward.readable, backwards.writable);
478
- connection1.otherSide = connection2;
479
- connection2.otherSide = connection1;
480
- return [
481
- connection1,
482
- connection2
483
- ];
484
- }
485
- };
486
- _ts_decorate([
487
- synchronized
488
- ], TestReplicationNetwork.prototype, "_connectReplicator", null);
489
- var TestReplicator = class {
490
- _params;
491
- constructor(_params) {
492
- this._params = _params;
493
- }
494
- connected = false;
495
- context = void 0;
496
- connections = /* @__PURE__ */ new Set();
497
- async connect(context) {
498
- log3("connect", {
499
- peerId: context.peerId
500
- }, {
501
- F: __dxlog_file4,
502
- L: 131,
503
- S: this,
504
- C: (f, a) => f(...a)
505
- });
506
- this.context = context;
507
- this.connected = true;
508
- await this._params.onConnect();
509
- }
510
- async disconnect() {
511
- log3("disconnect", {
512
- peerId: this.context.peerId
513
- }, {
514
- F: __dxlog_file4,
515
- L: 138,
516
- S: this,
517
- C: (f, a) => f(...a)
518
- });
519
- this.connected = false;
520
- await this._params.onDisconnect();
521
- }
522
- async addConnection(connection) {
523
- connection.owningReplicator = this;
524
- this.connections.add(connection);
525
- this.context.onConnectionOpen(connection);
526
- }
527
- async removeConnection(connection) {
528
- connection.owningReplicator = void 0;
529
- this.context.onConnectionClosed(connection);
530
- this.connections.delete(connection);
531
- }
532
- };
533
- var TestReplicatorConnection = class {
534
- peerId;
535
- readable;
536
- writable;
537
- otherSide = void 0;
538
- owningReplicator = void 0;
539
- constructor(peerId, readable, writable) {
540
- this.peerId = peerId;
541
- this.readable = readable;
542
- this.writable = writable;
543
- }
544
- get bundleSyncEnabled() {
545
- return false;
546
- }
547
- async shouldAdvertise(params) {
548
- return true;
549
- }
550
- shouldSyncCollection(params) {
551
- return true;
552
- }
553
- };
554
- var testAutomergeReplicatorFactory = (params) => {
555
- return new AutomergeReplicator({
556
- ...params[0],
557
- sendSyncRetryPolicy: {
558
- retryBackoff: 20,
559
- retriesBeforeBackoff: 2,
560
- maxRetries: 3
561
- }
562
- }, params[1]);
563
- };
564
- var brokenAutomergeReplicatorFactory = (params) => {
565
- params[1].onSyncMessage = () => {
566
- throw new Error();
567
- };
568
- return testAutomergeReplicatorFactory(params);
569
- };
570
-
571
- // src/testing/test-schema.ts
572
- var test_schema_exports = {};
573
- __export(test_schema_exports, {
574
- Organization: () => Organization,
575
- Person: () => Person,
576
- Task: () => Task,
577
- WorksFor: () => WorksFor
578
- });
579
- import * as Schema from "effect/Schema";
580
- import { Type } from "@dxos/echo";
581
- var Person = Schema.Struct({
582
- name: Schema.String,
583
- email: Schema.optional(Schema.String),
584
- age: Schema.optional(Schema.Number)
585
- }).pipe(Type.Obj({
586
- typename: "dxos.org/type/Person",
587
- version: "0.1.0"
588
- }));
589
- var Organization = Schema.Struct({
590
- name: Schema.String
591
- }).pipe(Type.Obj({
592
- typename: "dxos.org/type/Organization",
593
- version: "0.1.0"
594
- }));
595
- var WorksFor = Schema.Struct({
596
- since: Schema.String
597
- }).pipe(Type.Relation({
598
- typename: "dxos.org/type/WorksFor",
599
- version: "0.1.0",
600
- source: Person,
601
- target: Organization
602
- }));
603
- var Task = Schema.Struct({
604
- title: Schema.String,
605
- createdAt: Schema.String,
606
- assignee: Type.Ref(Person)
607
- }).pipe(Type.Obj({
608
- typename: "dxos.org/type/Task",
609
- version: "0.1.0"
610
- }));
611
-
612
- // src/testing/test-data.ts
613
- var test_data_exports = {};
614
- __export(test_data_exports, {
615
- ORGS: () => ORGS,
616
- PEOPLE: () => PEOPLE,
617
- TASKS: () => TASKS,
618
- WORKS_FOR: () => WORKS_FOR
619
- });
620
- import { getSchemaDXN } from "@dxos/echo/internal";
621
- import { DatabaseDirectory, ObjectStructure } from "@dxos/echo-protocol";
622
- import { DXN, ObjectId, PublicKey as PublicKey2 } from "@dxos/keys";
623
- var spaceKey = PublicKey2.random();
624
- var PEOPLE = {
625
- fred: DatabaseDirectory.make({
626
- spaceKey: spaceKey.toHex(),
627
- objects: {
628
- [ObjectId.random()]: ObjectStructure.makeObject({
629
- type: getSchemaDXN(Person).toString(),
630
- data: {
631
- name: "Fred"
632
- }
633
- })
634
- }
635
- }),
636
- alice: DatabaseDirectory.make({
637
- spaceKey: spaceKey.toHex(),
638
- objects: {
639
- [ObjectId.random()]: ObjectStructure.makeObject({
640
- type: getSchemaDXN(Person).toString(),
641
- data: {
642
- name: "Alice"
643
- }
644
- })
645
- }
646
- })
647
- };
648
- var ORGS = {
649
- cyberdyne: DatabaseDirectory.make({
650
- spaceKey: spaceKey.toHex(),
651
- objects: {
652
- [ObjectId.random()]: ObjectStructure.makeObject({
653
- type: getSchemaDXN(Organization).toString(),
654
- data: {
655
- name: "Cyberdyne Systems",
656
- founded: "1984"
657
- }
658
- })
659
- }
660
- }),
661
- aperture: DatabaseDirectory.make({
662
- spaceKey: spaceKey.toHex(),
663
- objects: {
664
- [ObjectId.random()]: ObjectStructure.makeObject({
665
- type: getSchemaDXN(Organization).toString(),
666
- data: {
667
- name: "Aperture Science",
668
- founded: "1953"
669
- }
670
- })
671
- }
672
- })
673
- };
674
- var WORKS_FOR = {
675
- fredWorksForCyberdyne: DatabaseDirectory.make({
676
- spaceKey: spaceKey.toHex(),
677
- objects: {
678
- [ObjectId.random()]: ObjectStructure.makeRelation({
679
- type: getSchemaDXN(WorksFor).toString(),
680
- source: {
681
- "/": DXN.fromLocalObjectId(Object.keys(PEOPLE.fred.objects)[0]).toString()
682
- },
683
- target: {
684
- "/": DXN.fromLocalObjectId(Object.keys(ORGS.cyberdyne.objects)[0]).toString()
685
- },
686
- data: {
687
- since: "2020",
688
- position: "Engineer"
689
- }
690
- })
691
- }
692
- }),
693
- aliceWorksForAperture: DatabaseDirectory.make({
694
- spaceKey: spaceKey.toHex(),
695
- objects: {
696
- [ObjectId.random()]: ObjectStructure.makeRelation({
697
- type: getSchemaDXN(WorksFor).toString(),
698
- source: {
699
- "/": DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects)[0]).toString()
700
- },
701
- target: {
702
- "/": DXN.fromLocalObjectId(Object.keys(ORGS.aperture.objects)[0]).toString()
703
- },
704
- data: {
705
- since: "2018",
706
- position: "Research Scientist"
707
- }
708
- })
709
- }
710
- })
711
- };
712
- var TASKS = {
713
- task1: DatabaseDirectory.make({
714
- spaceKey: spaceKey.toHex(),
715
- objects: {
716
- [ObjectId.random()]: ObjectStructure.makeObject({
717
- type: getSchemaDXN(Task).toString(),
718
- data: {
719
- title: "Complete project documentation",
720
- description: "Write comprehensive documentation for the new system",
721
- status: "in-progress",
722
- dueDate: "2023-12-31",
723
- assignee: {
724
- "/": DXN.fromLocalObjectId(Object.keys(PEOPLE.fred.objects)[0]).toString()
725
- }
726
- }
727
- })
728
- }
729
- }),
730
- task2: DatabaseDirectory.make({
731
- spaceKey: spaceKey.toHex(),
732
- objects: {
733
- [ObjectId.random()]: ObjectStructure.makeObject({
734
- type: getSchemaDXN(Task).toString(),
735
- data: {
736
- title: "Run experiments",
737
- description: "Conduct series of experiments on the portal device",
738
- status: "pending",
739
- dueDate: "2023-11-15",
740
- assignee: {
741
- "/": DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects)[0]).toString()
742
- }
743
- }
744
- })
745
- }
746
- })
747
- };
748
- export {
749
- MemoryNetworkManagerProvider,
750
- TestAdapter,
751
- TestAgent,
752
- TestAgentBuilder,
753
- test_data_exports as TestData,
754
- TestFeedBuilder,
755
- TestReplicationNetwork,
756
- TestReplicator,
757
- TestReplicatorConnection,
758
- test_schema_exports as TestSchema,
759
- WebsocketNetworkManagerProvider,
760
- brokenAutomergeReplicatorFactory,
761
- changeStorageVersionInMetadata,
762
- testAutomergeReplicatorFactory
763
- };
764
- //# sourceMappingURL=index.mjs.map