@dxos/echo-pipeline 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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 (216) hide show
  1. package/dist/lib/{browser/chunk-I4JBIZSN.mjs → neutral/chunk-VIHYDCCC.mjs} +406 -965
  2. package/dist/lib/neutral/chunk-VIHYDCCC.mjs.map +7 -0
  3. package/dist/lib/{browser/chunk-MBMJB3V7.mjs → neutral/chunk-YBC6ONBZ.mjs} +78 -13
  4. package/dist/lib/neutral/chunk-YBC6ONBZ.mjs.map +7 -0
  5. package/dist/lib/{browser → neutral}/filter/index.mjs +1 -2
  6. package/dist/lib/neutral/index.mjs +7065 -0
  7. package/dist/lib/neutral/index.mjs.map +7 -0
  8. package/dist/lib/neutral/meta.json +1 -0
  9. package/dist/lib/{browser → neutral}/testing/index.mjs +111 -395
  10. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  11. package/dist/types/src/automerge/automerge-host-subduction.test.d.ts +2 -0
  12. package/dist/types/src/automerge/automerge-host-subduction.test.d.ts.map +1 -0
  13. package/dist/types/src/automerge/automerge-host.d.ts +85 -27
  14. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  15. package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts +2 -0
  16. package/dist/types/src/automerge/automerge-repo-subduction.test.d.ts.map +1 -0
  17. package/dist/types/src/automerge/automerge-repo.test.d.ts +1 -1
  18. package/dist/types/src/automerge/automerge-repo.test.d.ts.map +1 -1
  19. package/dist/types/src/automerge/automerge-subduction.test.d.ts +2 -0
  20. package/dist/types/src/automerge/automerge-subduction.test.d.ts.map +1 -0
  21. package/dist/types/src/automerge/collection-synchronizer.d.ts +24 -3
  22. package/dist/types/src/automerge/collection-synchronizer.d.ts.map +1 -1
  23. package/dist/types/src/automerge/echo-data-monitor.d.ts.map +1 -1
  24. package/dist/types/src/automerge/echo-network-adapter.d.ts +17 -11
  25. package/dist/types/src/automerge/echo-network-adapter.d.ts.map +1 -1
  26. package/dist/types/src/automerge/echo-replicator.d.ts +20 -16
  27. package/dist/types/src/automerge/echo-replicator.d.ts.map +1 -1
  28. package/dist/types/src/automerge/handle-state.d.ts +52 -0
  29. package/dist/types/src/automerge/handle-state.d.ts.map +1 -0
  30. package/dist/types/src/automerge/heads-store.d.ts +9 -2
  31. package/dist/types/src/automerge/heads-store.d.ts.map +1 -1
  32. package/dist/types/src/automerge/index.d.ts +1 -0
  33. package/dist/types/src/automerge/index.d.ts.map +1 -1
  34. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts +8 -4
  35. package/dist/types/src/automerge/leveldb-storage-adapter.d.ts.map +1 -1
  36. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts +8 -8
  37. package/dist/types/src/automerge/mesh-echo-replicator-connection.d.ts.map +1 -1
  38. package/dist/types/src/automerge/mesh-echo-replicator.d.ts +6 -5
  39. package/dist/types/src/automerge/mesh-echo-replicator.d.ts.map +1 -1
  40. package/dist/types/src/automerge/network-protocol.d.ts.map +1 -1
  41. package/dist/types/src/automerge/space-collection.d.ts.map +1 -1
  42. package/dist/types/src/common/feeds.d.ts.map +1 -1
  43. package/dist/types/src/common/space-id.d.ts.map +1 -1
  44. package/dist/types/src/db-host/automerge-data-source.d.ts +35 -0
  45. package/dist/types/src/db-host/automerge-data-source.d.ts.map +1 -0
  46. package/dist/types/src/db-host/automerge-data-source.test.d.ts +2 -0
  47. package/dist/types/src/db-host/automerge-data-source.test.d.ts.map +1 -0
  48. package/dist/types/src/db-host/automerge-metrics.d.ts.map +1 -1
  49. package/dist/types/src/db-host/data-service.d.ts +7 -6
  50. package/dist/types/src/db-host/data-service.d.ts.map +1 -1
  51. package/dist/types/src/db-host/database-root.d.ts +9 -3
  52. package/dist/types/src/db-host/database-root.d.ts.map +1 -1
  53. package/dist/types/src/db-host/documents-synchronizer.d.ts +9 -8
  54. package/dist/types/src/db-host/documents-synchronizer.d.ts.map +1 -1
  55. package/dist/types/src/db-host/echo-host.d.ts +62 -27
  56. package/dist/types/src/db-host/echo-host.d.ts.map +1 -1
  57. package/dist/types/src/db-host/index.d.ts +2 -0
  58. package/dist/types/src/db-host/index.d.ts.map +1 -1
  59. package/dist/types/src/db-host/invalidation-hint.d.ts +19 -0
  60. package/dist/types/src/db-host/invalidation-hint.d.ts.map +1 -0
  61. package/dist/types/src/db-host/local-queue-service.d.ts +19 -0
  62. package/dist/types/src/db-host/local-queue-service.d.ts.map +1 -0
  63. package/dist/types/src/db-host/query-invalidation.test.d.ts +2 -0
  64. package/dist/types/src/db-host/query-invalidation.test.d.ts.map +1 -0
  65. package/dist/types/src/db-host/query-service.d.ts +18 -10
  66. package/dist/types/src/db-host/query-service.d.ts.map +1 -1
  67. package/dist/types/src/db-host/queue-data-source.d.ts +38 -0
  68. package/dist/types/src/db-host/queue-data-source.d.ts.map +1 -0
  69. package/dist/types/src/db-host/queue-service.test.d.ts +2 -0
  70. package/dist/types/src/db-host/queue-service.test.d.ts.map +1 -0
  71. package/dist/types/src/db-host/space-state-manager.d.ts +3 -2
  72. package/dist/types/src/db-host/space-state-manager.d.ts.map +1 -1
  73. package/dist/types/src/db-host/stub.d.ts +11 -0
  74. package/dist/types/src/db-host/stub.d.ts.map +1 -0
  75. package/dist/types/src/edge/echo-edge-replicator.d.ts +7 -6
  76. package/dist/types/src/edge/echo-edge-replicator.d.ts.map +1 -1
  77. package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts +39 -0
  78. package/dist/types/src/edge/echo-edge-subduction-replicator.d.ts.map +1 -0
  79. package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts +2 -0
  80. package/dist/types/src/edge/echo-edge-subduction-replicator.test.d.ts.map +1 -0
  81. package/dist/types/src/edge/index.d.ts +1 -0
  82. package/dist/types/src/edge/index.d.ts.map +1 -1
  83. package/dist/types/src/edge/inflight-request-limiter.d.ts.map +1 -1
  84. package/dist/types/src/filter/filter-match.d.ts +2 -2
  85. package/dist/types/src/filter/filter-match.d.ts.map +1 -1
  86. package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
  87. package/dist/types/src/pipeline/message-selector.d.ts.map +1 -1
  88. package/dist/types/src/pipeline/pipeline.d.ts +2 -2
  89. package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
  90. package/dist/types/src/pipeline/timeframe-clock.d.ts.map +1 -1
  91. package/dist/types/src/query/errors.d.ts +20 -21
  92. package/dist/types/src/query/errors.d.ts.map +1 -1
  93. package/dist/types/src/query/plan.d.ts +59 -8
  94. package/dist/types/src/query/plan.d.ts.map +1 -1
  95. package/dist/types/src/query/query-executor.d.ts +62 -10
  96. package/dist/types/src/query/query-executor.d.ts.map +1 -1
  97. package/dist/types/src/query/query-planner.d.ts +10 -1
  98. package/dist/types/src/query/query-planner.d.ts.map +1 -1
  99. package/dist/types/src/space/admission-discovery-extension.d.ts.map +1 -1
  100. package/dist/types/src/space/auth.d.ts +3 -3
  101. package/dist/types/src/space/auth.d.ts.map +1 -1
  102. package/dist/types/src/space/control-pipeline.d.ts +4 -3
  103. package/dist/types/src/space/control-pipeline.d.ts.map +1 -1
  104. package/dist/types/src/space/space-manager.d.ts +7 -7
  105. package/dist/types/src/space/space-manager.d.ts.map +1 -1
  106. package/dist/types/src/space/space-protocol.d.ts +9 -8
  107. package/dist/types/src/space/space-protocol.d.ts.map +1 -1
  108. package/dist/types/src/space/space.d.ts +5 -5
  109. package/dist/types/src/space/space.d.ts.map +1 -1
  110. package/dist/types/src/testing/change-metadata.d.ts.map +1 -1
  111. package/dist/types/src/testing/index.d.ts +0 -2
  112. package/dist/types/src/testing/index.d.ts.map +1 -1
  113. package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
  114. package/dist/types/src/testing/test-feed-builder.d.ts.map +1 -1
  115. package/dist/types/src/testing/test-network-adapter.d.ts +1 -1
  116. package/dist/types/src/testing/test-network-adapter.d.ts.map +1 -1
  117. package/dist/types/src/testing/test-replicator.d.ts +13 -13
  118. package/dist/types/src/testing/test-replicator.d.ts.map +1 -1
  119. package/dist/types/src/util.d.ts.map +1 -1
  120. package/dist/types/tsconfig.tsbuildinfo +1 -1
  121. package/package.json +53 -55
  122. package/src/automerge/automerge-host-subduction.test.ts +247 -0
  123. package/src/automerge/automerge-host.test.ts +48 -32
  124. package/src/automerge/automerge-host.ts +367 -170
  125. package/src/automerge/automerge-repo-subduction.test.ts +1049 -0
  126. package/src/automerge/automerge-repo.test.ts +284 -77
  127. package/src/automerge/automerge-subduction.test.ts +330 -0
  128. package/src/automerge/collection-synchronizer.test.ts +52 -16
  129. package/src/automerge/collection-synchronizer.ts +117 -34
  130. package/src/automerge/echo-network-adapter.test.ts +2 -1
  131. package/src/automerge/echo-network-adapter.ts +40 -29
  132. package/src/automerge/echo-replicator.ts +21 -16
  133. package/src/automerge/handle-state.ts +62 -0
  134. package/src/automerge/heads-store.ts +42 -3
  135. package/src/automerge/index.ts +1 -0
  136. package/src/automerge/leveldb-storage-adapter.ts +33 -4
  137. package/src/automerge/mesh-echo-replicator-connection.ts +8 -8
  138. package/src/automerge/mesh-echo-replicator.ts +14 -11
  139. package/src/db-host/automerge-data-source.test.ts +299 -0
  140. package/src/db-host/automerge-data-source.ts +187 -0
  141. package/src/db-host/data-service.ts +17 -10
  142. package/src/db-host/database-root.ts +19 -7
  143. package/src/db-host/documents-synchronizer.test.ts +143 -14
  144. package/src/db-host/documents-synchronizer.ts +66 -62
  145. package/src/db-host/echo-host.ts +340 -87
  146. package/src/db-host/index.ts +2 -0
  147. package/src/db-host/invalidation-hint.ts +50 -0
  148. package/src/db-host/local-queue-service.ts +127 -0
  149. package/src/db-host/query-invalidation.test.ts +270 -0
  150. package/src/db-host/query-service.ts +110 -112
  151. package/src/db-host/queue-data-source.ts +160 -0
  152. package/src/db-host/queue-service.test.ts +145 -0
  153. package/src/db-host/space-state-manager.ts +11 -9
  154. package/src/db-host/stub.ts +33 -0
  155. package/src/edge/echo-edge-replicator.test.ts +9 -9
  156. package/src/edge/echo-edge-replicator.ts +76 -47
  157. package/src/edge/echo-edge-subduction-replicator.test.ts +158 -0
  158. package/src/edge/echo-edge-subduction-replicator.ts +377 -0
  159. package/src/edge/index.ts +1 -0
  160. package/src/filter/filter-match.test.ts +67 -31
  161. package/src/filter/filter-match.ts +114 -27
  162. package/src/metadata/metadata-store.ts +8 -5
  163. package/src/pipeline/pipeline-stress.test.ts +1 -3
  164. package/src/pipeline/pipeline.test.ts +0 -1
  165. package/src/pipeline/pipeline.ts +2 -3
  166. package/src/query/errors.ts +3 -1
  167. package/src/query/plan.ts +71 -8
  168. package/src/query/query-executor.ts +1178 -198
  169. package/src/query/query-planner.test.ts +854 -86
  170. package/src/query/query-planner.ts +440 -39
  171. package/src/space/admission-discovery-extension.ts +1 -1
  172. package/src/space/auth.ts +6 -6
  173. package/src/space/control-pipeline.test.ts +2 -2
  174. package/src/space/control-pipeline.ts +7 -7
  175. package/src/space/space-manager.ts +12 -17
  176. package/src/space/space-protocol.browser.test.ts +13 -12
  177. package/src/space/space-protocol.test.ts +13 -13
  178. package/src/space/space-protocol.ts +16 -15
  179. package/src/space/space.test.ts +2 -2
  180. package/src/space/space.ts +9 -10
  181. package/src/testing/index.ts +0 -2
  182. package/src/testing/test-agent-builder.ts +0 -1
  183. package/src/testing/test-network-adapter.ts +24 -3
  184. package/src/testing/test-replicator.ts +15 -20
  185. package/src/util.ts +7 -3
  186. package/dist/lib/browser/chunk-CGS2ULMK.mjs +0 -11
  187. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-I4JBIZSN.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-MBMJB3V7.mjs.map +0 -7
  190. package/dist/lib/browser/index.mjs +0 -5503
  191. package/dist/lib/browser/index.mjs.map +0 -7
  192. package/dist/lib/browser/meta.json +0 -1
  193. package/dist/lib/browser/testing/index.mjs.map +0 -7
  194. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  195. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +0 -7
  196. package/dist/lib/node-esm/chunk-XJZTCD4G.mjs +0 -182
  197. package/dist/lib/node-esm/chunk-XJZTCD4G.mjs.map +0 -7
  198. package/dist/lib/node-esm/chunk-YOL7JY5W.mjs +0 -2230
  199. package/dist/lib/node-esm/chunk-YOL7JY5W.mjs.map +0 -7
  200. package/dist/lib/node-esm/filter/index.mjs +0 -13
  201. package/dist/lib/node-esm/filter/index.mjs.map +0 -7
  202. package/dist/lib/node-esm/index.mjs +0 -5503
  203. package/dist/lib/node-esm/index.mjs.map +0 -7
  204. package/dist/lib/node-esm/meta.json +0 -1
  205. package/dist/lib/node-esm/testing/index.mjs +0 -805
  206. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  207. package/dist/types/src/db-host/documents-iterator.d.ts +0 -7
  208. package/dist/types/src/db-host/documents-iterator.d.ts.map +0 -1
  209. package/dist/types/src/testing/test-data.d.ts +0 -18
  210. package/dist/types/src/testing/test-data.d.ts.map +0 -1
  211. package/dist/types/src/testing/test-schema.d.ts +0 -37
  212. package/dist/types/src/testing/test-schema.d.ts.map +0 -1
  213. package/src/db-host/documents-iterator.ts +0 -74
  214. package/src/testing/test-data.ts +0 -127
  215. package/src/testing/test-schema.ts +0 -53
  216. /package/dist/lib/{browser → neutral}/filter/index.mjs.map +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/testing/change-metadata.ts", "../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/test-network-adapter.ts", "../../../../src/testing/test-replicator.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { log } from '@dxos/log';\nimport { schema } from '@dxos/protocols/proto';\nimport type { Storage } from '@dxos/random-access-storage';\n\nimport { MetadataStore } from '../metadata';\n\nconst EchoMetadata = schema.getCodecForType('dxos.echo.metadata.EchoMetadata');\n\n/**\n * This function will change the storage version in the metadata.\n * This will break your storage and make it unusable.\n * Use this only for testing purposes.\n */\nexport const changeStorageVersionInMetadata = async (storage: Storage, version: number) => {\n log('Changing storage version in metadata. USE ONLY FOR TESTING.');\n const metadata = new MetadataStore(storage.createDirectory('metadata'));\n await metadata.load();\n const echoMetadata = metadata.metadata;\n echoMetadata.version = version;\n const file = metadata._directory.getOrCreateFile('EchoMetadata');\n await metadata._writeFile(file, EchoMetadata, echoMetadata);\n await metadata._directory.flush();\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator } from '@dxos/credentials';\nimport { type FeedStore } from '@dxos/feed-store';\nimport { type Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, SwarmNetworkManager, createRtcTransportFactory } from '@dxos/network-manager';\nimport { type FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { type SpaceMetadata } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { AdmittedFeed } from '@dxos/protocols/proto/dxos/halo/credentials';\nimport { type Storage, StorageType, createStorage } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\nimport { ComplexMap } from '@dxos/util';\n\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, type Space, SpaceManager, SpaceProtocol } from '../space';\nimport { TestFeedBuilder } from './test-feed-builder';\n\nexport type NetworkManagerProvider = () => SwarmNetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new SwarmNetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory,\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new SwarmNetworkManager({\n signalManager: new WebsocketSignalManager([{ server: signalUrl }]),\n transportFactory: createRtcTransportFactory(),\n });\n\nexport type TestAgentBuilderOptions = {\n storage?: Storage;\n networkManagerProvider?: NetworkManagerProvider;\n};\n\n/**\n * Factory for test agents.\n */\nexport class TestAgentBuilder {\n private readonly _agents = new ComplexMap<PublicKey, TestAgent>(PublicKey.hash);\n private readonly _storage: Storage;\n private readonly _networkManagerProvider: NetworkManagerProvider;\n\n constructor({ storage, networkManagerProvider }: TestAgentBuilderOptions = {}) {\n this._storage = storage ?? createStorage({ type: StorageType.RAM });\n this._networkManagerProvider =\n networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());\n }\n\n async close() {\n return Promise.all(this.agents.map((agent) => agent.close()));\n }\n\n get agents() {\n return Array.from(this._agents.values());\n }\n\n getAgent(deviceKey: PublicKey): TestAgent | undefined {\n return this._agents.get(deviceKey);\n }\n\n async createPeer(): Promise<TestAgent> {\n // prettier-ignore\n const feedBuilder = new TestFeedBuilder()\n .setStorage(this._storage, `agent-${this._agents.size}`);\n\n const identityKey = await feedBuilder.keyring.createKey();\n const deviceKey = await feedBuilder.keyring.createKey();\n\n const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);\n this._agents.set(deviceKey, agent);\n return agent;\n }\n}\n\n/**\n * Test agent that enables the creation and replication of multiple spaces.\n */\nexport class TestAgent {\n private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);\n\n public readonly storage: Storage;\n public readonly keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\n\n private _metadataStore?: MetadataStore;\n get metadataStore() {\n return (this._metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n private _blobStore?: BlobStore;\n get blobStore() {\n return (this._blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n constructor(\n private readonly _networkManagerProvider: NetworkManagerProvider,\n private readonly _feedBuilder: TestFeedBuilder,\n public readonly identityKey: PublicKey,\n public readonly deviceKey: PublicKey,\n ) {\n this.storage = this._feedBuilder.storage;\n this.keyring = this._feedBuilder.keyring;\n this.feedStore = this._feedBuilder.createFeedStore();\n }\n\n async close() {\n return Promise.all([...this.spaces.map((space) => space.close())]);\n }\n\n get spaces() {\n return Array.from(this._spaces.values());\n }\n\n getSpace(spaceKey: PublicKey): Space | undefined {\n return this._spaces.get(spaceKey);\n }\n\n private _networkManager?: SwarmNetworkManager;\n get networkManager() {\n if (this._networkManager) {\n return this._networkManager;\n }\n\n this._networkManager = this._networkManagerProvider();\n this._networkManager.setPeerInfo({ peerKey: this.deviceKey.toHex(), identityKey: this.identityKey.toHex() });\n\n return this._networkManager;\n }\n\n private _spaceManager?: SpaceManager;\n get spaceManager() {\n return (this._spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager,\n metadataStore: this.metadataStore,\n blobStore: this.blobStore,\n }));\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey,\n dataKey?: PublicKey,\n saveMetadata = false,\n ): Promise<Space> {\n if (!spaceKey) {\n saveMetadata = true;\n spaceKey = await this.keyring.createKey();\n }\n if (!genesisKey) {\n genesisKey = await this.keyring.createKey();\n }\n\n const controlFeed = await this.feedStore.openFeed(genesisKey, { writable: true });\n const dataFeed = await this.feedStore.openFeed(dataKey ?? (await this.keyring.createKey()), {\n writable: true,\n sparse: true,\n });\n\n const metadata: SpaceMetadata = {\n key: spaceKey,\n genesisFeedKey: genesisKey,\n controlFeedKey: controlFeed.key,\n dataFeedKey: dataFeed.key,\n };\n if (saveMetadata) {\n await this.metadataStore.addSpace(metadata);\n }\n\n await this.spaceManager.open();\n const space = await this.spaceManager.constructSpace({\n metadata,\n swarmIdentity: {\n identityKey: this.identityKey,\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n memberKey: identityKey,\n onAuthorizedConnection: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n this.createGossip().createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n onDelegatedInvitationStatusChange: async () => {},\n onMemberRolesChanged: async () => {},\n });\n await space.setControlFeed(controlFeed);\n await space.setDataFeed(dataFeed);\n\n await space.open(new Context());\n\n this._spaces.set(spaceKey, space);\n return space;\n }\n\n createSpaceProtocol(topic: PublicKey, gossip?: Gossip): SpaceProtocol {\n return new SpaceProtocol({\n topic,\n swarmIdentity: {\n identityKey: this.identityKey,\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER,\n },\n networkManager: this.networkManager,\n blobStore: this.blobStore,\n onSessionAuth: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n (gossip ?? this.createGossip()).createExtension({ remotePeerId: session.remotePeerId }),\n );\n },\n });\n }\n\n createGossip(): Gossip {\n return new Gossip({\n localPeerId: this.deviceKey,\n });\n }\n\n createPresence(gossip?: Gossip): Presence {\n return new Presence({\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey,\n gossip: gossip ?? this.createGossip(),\n });\n }\n\n async spaceGenesis(space: Space): Promise<void> {\n const generator = new CredentialGenerator(this.keyring, this.identityKey, this.deviceKey);\n const credentials = [\n ...(await generator.createSpaceGenesis(space.key, space.controlFeedKey!)),\n await generator.createFeedAdmission(space.key, space.dataFeedKey!, AdmittedFeed.Designation.DATA),\n await generator.createEpochCredential(space.key),\n ];\n\n for (const credential of credentials) {\n await space.controlPipeline.writer.write({\n credential: { credential },\n });\n }\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { TestBuilder } from '@dxos/feed-store/testing';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\n\nimport { valueEncoding } from '../common';\n\n/**\n * Builder with default encoder and generator.\n */\nexport class TestFeedBuilder extends TestBuilder<FeedMessage> {\n constructor() {\n super({\n valueEncoding,\n });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Message, NetworkAdapter, type PeerId } from '@automerge/automerge-repo';\n\nimport { Trigger, sleep } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type TestConnectionStateProvider = () => 'on' | 'off';\n\nexport class TestAdapter extends NetworkAdapter {\n static createPair(\n connectionStateProvider: TestConnectionStateProvider = () => 'on',\n onMessage?: (message: Message) => void,\n ): TestAdapter[] {\n const adapter1: TestAdapter = new TestAdapter({\n send: (message: Message) => {\n onMessage?.(message);\n if (connectionStateProvider() === 'on') {\n void sleep(10).then(() => {\n if (connectionStateProvider() === 'on' && adapter2.peerId) {\n adapter2.receive(message);\n }\n });\n }\n },\n });\n const adapter2: TestAdapter = new TestAdapter({\n send: (message: Message) => {\n onMessage?.(message);\n if (connectionStateProvider() === 'on') {\n void sleep(10).then(() => {\n if (connectionStateProvider() === 'on' && adapter1.peerId) {\n adapter1.receive(message);\n }\n });\n }\n },\n });\n\n return [adapter1, adapter2];\n }\n\n public onConnect = new Trigger();\n\n constructor(private readonly _params: { send: (message: Message) => void }) {\n super();\n }\n\n override isReady(): boolean {\n return true;\n }\n\n override whenReady(): Promise<void> {\n return Promise.resolve();\n }\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this.onConnect.wake();\n }\n\n peerCandidate(peerId: PeerId): void {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-candidate', { peerId, peerMetadata: {} });\n }\n\n peerDisconnected(peerId: PeerId): void {\n invariant(peerId, 'PeerId is required');\n this.emit('peer-disconnected', { peerId });\n }\n\n override send(message: Message): void {\n log('send', { from: message.senderId, to: message.targetId, type: message.type });\n this._params.send(message);\n }\n\n override disconnect(): void {\n this.peerId = undefined;\n }\n\n receive(message: Message): void {\n invariant(this.peerId, 'Peer id is not set');\n this.emit('message', message);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { sleep, synchronized } from '@dxos/async';\nimport { type Context, LifecycleState, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport type { AutomergeProtocolMessage } from '@dxos/protocols';\nimport * as TeleportAutomergeReplicator from '@dxos/teleport-extension-automerge-replicator';\n\nimport type { AutomergeReplicator, AutomergeReplicatorConnection, AutomergeReplicatorContext } from '../automerge';\n\nexport type TestReplicatorNetworkOptions = {\n latency?: number;\n};\n\nexport class TestReplicationNetwork extends Resource {\n private readonly _replicators = new Set<TestReplicator>();\n private readonly _latency?: number = undefined;\n\n constructor(options: TestReplicatorNetworkOptions = {}) {\n super();\n this._latency = options.latency;\n }\n\n protected override async _close(_ctx: Context): Promise<void> {\n for (const replicator of this._replicators) {\n for (const connection of replicator.connections) {\n void connection.writable.abort();\n void connection.readable.cancel();\n }\n }\n }\n\n async createReplicator(): Promise<TestReplicator> {\n const replicator = new TestReplicator({\n onConnect: async () => {\n invariant(this._lifecycleState === LifecycleState.OPEN);\n await this._connectReplicator(replicator);\n },\n onDisconnect: async () => {\n invariant(this._lifecycleState === LifecycleState.OPEN);\n await this._disconnectReplicator(replicator);\n },\n });\n this._replicators.add(replicator);\n return replicator;\n }\n\n @synchronized\n private async _connectReplicator(replicator: TestReplicator): Promise<void> {\n for (const otherReplicator of this._replicators.values()) {\n if (otherReplicator === replicator || !otherReplicator.connected) {\n continue;\n }\n log('create connection', { from: replicator.context!.peerId, to: otherReplicator.context!.peerId });\n const [connection1, connection2] = this._createConnectionPair(\n replicator.context!.peerId,\n otherReplicator.context!.peerId,\n );\n await replicator.context!.onConnectionOpen(connection1);\n await otherReplicator.context!.onConnectionOpen(connection2);\n }\n }\n\n private async _disconnectReplicator(replicator: TestReplicator): Promise<void> {\n for (const connection of replicator.connections) {\n await replicator.context!.onConnectionClosed(connection);\n await connection.otherSide!.owningReplicator!.removeConnection(connection.otherSide!);\n }\n }\n\n private _createConnectionPair(peer1: string, peer2: string): [TestReplicatorConnection, TestReplicatorConnection] {\n const LOG = false;\n\n const forward = new TransformStream({\n transform: async (message, controller) => {\n if (LOG) {\n log('replicate', { from: peer1, to: peer2, message });\n }\n\n if (this._latency !== undefined) {\n await sleep(this._latency);\n }\n\n controller.enqueue(message);\n },\n });\n const backwards = new TransformStream({\n transform: async (message, controller) => {\n if (LOG) {\n log('replicate', { from: peer2, to: peer1, message });\n }\n\n if (this._latency !== undefined) {\n await sleep(this._latency);\n }\n\n controller.enqueue(message);\n },\n });\n\n const connection1 = new TestReplicatorConnection(peer2, backwards.readable, forward.writable);\n const connection2 = new TestReplicatorConnection(peer1, forward.readable, backwards.writable);\n connection1.otherSide = connection2;\n connection2.otherSide = connection1;\n return [connection1, connection2];\n }\n}\n\ntype TestReplicatorProps = {\n onConnect: () => Promise<void>;\n onDisconnect: () => Promise<void>;\n};\n\nexport class TestReplicator implements AutomergeReplicator {\n constructor(private readonly _params: TestReplicatorProps) {}\n\n public connected = false;\n public context: AutomergeReplicatorContext | undefined = undefined;\n public connections = new Set<TestReplicatorConnection>();\n\n async connect(_ctx: Context, context: AutomergeReplicatorContext): Promise<void> {\n log('connect', { peerId: context.peerId });\n this.context = context;\n this.connected = true;\n await this._params.onConnect();\n }\n\n async disconnect(): Promise<void> {\n log('disconnect', { peerId: this.context!.peerId });\n this.connected = false;\n await this._params.onDisconnect();\n }\n\n async addConnection(connection: TestReplicatorConnection): Promise<void> {\n connection.owningReplicator = this;\n this.connections.add(connection);\n this.context!.onConnectionOpen(connection);\n }\n\n async removeConnection(connection: TestReplicatorConnection): Promise<void> {\n connection.owningReplicator = undefined;\n this.context!.onConnectionClosed(connection);\n this.connections.delete(connection);\n }\n}\n\nexport class TestReplicatorConnection implements AutomergeReplicatorConnection {\n public otherSide: TestReplicatorConnection | undefined = undefined;\n public owningReplicator: TestReplicator | undefined = undefined;\n\n constructor(\n public readonly peerId: string,\n public readonly readable: ReadableStream<AutomergeProtocolMessage>,\n public readonly writable: WritableStream<AutomergeProtocolMessage>,\n ) {}\n\n get bundleSyncEnabled(): boolean {\n return false;\n }\n\n async shouldAdvertise(): Promise<boolean> {\n return true;\n }\n\n shouldSyncCollection(): boolean {\n return true;\n }\n}\n\nexport const testAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {\n return new TeleportAutomergeReplicator.AutomergeReplicator(\n {\n ...params[0],\n sendSyncRetryPolicy: {\n retryBackoff: 20,\n retriesBeforeBackoff: 2,\n maxRetries: 3,\n },\n },\n params[1],\n );\n};\n\nexport const brokenAutomergeReplicatorFactory: TeleportAutomergeReplicator.AutomergeReplicatorFactory = (params) => {\n params[1]!.onSyncMessage = () => {\n throw new Error();\n };\n\n return testAutomergeReplicatorFactory(params);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;AAIA,SAASA,WAAW;AACpB,SAASC,cAAc;AAKvB,IAAA,eAAMC;;AASEC,IAAAA,iCAAqCC,OAAAA,SAAgB,YAAA;AAC3D,MAAA,+DAAmB,QAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,OAAA,CAAA;AACnB,QAAMC,WAAAA,IAAeF,cAASA,QAAQ,gBAAA,UAAA,CAAA;AACtCE,QAAAA,SAAaC,KAAO;AACpB,QAAMC,eAAOJ,SAASK;AACtB,eAAML,UAASM;AACf,QAAMN,OAAAA,SAASK,WAAgB,gBAAA,cAAA;AAC/B,QAAA,SAAA,WAAA,MAAA,cAAA,YAAA;;;;;ACtBF,SAASE,eAAe;AACxB,SAASC,2BAA2B;AAGpC,SAASC,iBAAiB;AAC1B,SAASC,qBAAqBC,4BAA4BC,8BAA8B;AACxF,SAASC,wBAAwBC,qBAAqBC,iCAAiC;AAGvF,SAASC,oBAAoB;AAC7B,SAAuBC,aAAaC,qBAAqB;AACzD,SAASC,QAAQC,gBAAgB;AACjC,SAASC,iBAAiB;AAC1B,SAASC,kBAAkB;;;ACb3B,SAASC,mBAAmB;AAQrB,IAAMC,kBAAN,cAA8BC,YAAAA;EACnC,cAAc;AACZ,UAAM;MACJC;IACF,CAAA;EACF;AACF;;;ADOA,IAAAC,gBAAaC;IAKPC,+BAAkBC,CAAAA,kBAAAA,MAAAA,IAAAA,oBAAAA;EACjB,eAAA,IAAA,oBAAA,aAAA;EAEA,kBAAMC;;sCAIoC,CAAA,cAAA,MAAA,IAAA,oBAAA;iBAAEC,IAAQC,uBAAAA;IAAU;MAAE,QAAA;IACjEJ;EACC,CAAA;EAOP,kBAAA,0BAAA;;AAKmBK,IAAkB,mBAAlBA,MAAkB;EAClBC,UAAAA,IAAAA,WAAgD,UAAA,IAAA;EAEjE;;cAC6CC,EAAMC,SAAAA,uBAAe,IAAA,CAAA,GAAA;AAAC,SAAA,WAAA,WAAA,cAAA;MAC7D,MAACF,YAAAA;IAEP,CAAA;AAEA,SAAMG,0BAAQ,0BAAA,6BAAA,IAAA,2BAAA,CAAA;;EAEd,MAAA,QAAA;AAEIC,WAAAA,QAAS,IAAA,KAAA,OAAA,IAAA,CAAA,UAAA,MAAA,MAAA,CAAA,CAAA;;EAEb,IAAA,SAAA;AAEAC,WAASC,MAAAA,KAA6C,KAAA,QAAA,OAAA,CAAA;;EAEtD,SAAA,WAAA;AAEA,WAAMC,KAAAA,QAAiC,IAAA,SAAA;;QAErC,aAAMC;AAIN,UAAMF,cAAY,IAAME,gBAAYC,EAAAA,WAAiB,KAAA,UAAA,SAAA,KAAA,QAAA,IAAA,EAAA;AAErD,UAAMC,cAAYC,MAAAA,YAAeX,QAAAA,UAAuB;AACxD,UAAKY,YAAYN,MAAAA,YAAWI,QAAAA,UAAAA;AAC5B,UAAA,QAAOA,IAAAA,UAAAA,KAAAA,yBAAAA,aAAAA,aAAAA,SAAAA;AACT,SAAA,QAAA,IAAA,WAAA,KAAA;AACF,WAAA;EAEA;;;;;EAImBG;EAEDC;EACAL,UAAiB,IAAA,WAAA,UAAA,IAAA;EACjBM;EAERC;EACR;;EAEA,IAAA,gBAAA;AAEQC,WAAuB,KAAA,mBAAA,IAAA,cAAA,KAAA,QAAA,gBAAA,UAAA,CAAA;EAC/B;;EAEA,IAAA,YAAA;AAEA,WAAA,KACmBjB,eAAAA,IAA+C,UAC/CkB,KAA6B,QAC9BC,gBAEhB,OAAA,CAAA;;cAHiBD,yBAAAA,cAAAA,aAAAA,WAAAA;SACDC,0BAAAA;SACAb,eAAAA;AAEhB,SAAKQ,cAAc;AACnB,SAAKL,YAAU;AACf,SAAKM,UAAS,KAAG,aAAKG;AACxB,SAAA,UAAA,KAAA,aAAA;AAEA,SAAMf,YAAQ,KAAA,aAAA,gBAAA;;gBACW;WAA0C,QAAA,IAAA;MACnE,GAAA,KAAA,OAAA,IAAA,CAAA,UAAA,MAAA,MAAA,CAAA;IAEIiB,CAAAA;;EAEJ,IAAA,SAAA;AAEAC,WAASC,MAAmB,KAAqB,KAAA,QAAA,OAAA,CAAA;;EAEjD,SAAA,UAAA;AAEQC,WAAAA,KAAsC,QAAA,IAAA,QAAA;EAC9C;;uBAEgBA;AACd,QAAA,KAAA,iBAAA;AAEI,aAACA,KAAAA;IACL;SAAmCC,kBAAclB,KAAUmB,wBAAK;SAAIN,gBAAiB,YAAY;MAAS,SAAA,KAAA,UAAA,MAAA;MAE1G,aAAYI,KAAAA,YAAe,MAAA;IAC7B,CAAA;AAEQG,WAAAA,KAA6B;EACrC;;qBAEe;WACXC,KAAAA,kBAAqBA,IAAAA,aAAc;MACnCC,WAAAA,KAAe;MACfC,gBAAgBA,KAAAA;MAClB,eAAA,KAAA;MACF,WAAA,KAAA;IAEA,CAAA;;oBAQIC,cAAe,KAAA,aAAA,UAAA,YAAA,SAAA,eAAA,OAAA;QACfR,CAAAA,UAAW;AACb,qBAAA;AACI,iBAACS,MAAY,KAAA,QAAA,UAAA;;AAEjB,QAAA,CAAA,YAAA;AAEA,mBAAMC,MAAc,KAAM,QAAKjB,UAAUkB;;AAAsC,UAAA,cAAA,MAAA,KAAA,UAAA,SAAA,YAAA;MAC/E,UAAMC;;UAEJC,WAAQ,MAAA,KAAA,UAAA,SAAA,WAAA,MAAA,KAAA,QAAA,UAAA,GAAA;MACV,UAAA;MAEA,QAAMC;;UAEJC,WAAAA;MACAC,KAAAA;MACAC,gBAAaL;MACf,gBAAA,YAAA;MACIJ,aAAAA,SAAc;;AAElB,QAAA,cAAA;AAEA,YAAU,KAACU,cAAiB,SAAA,QAAA;IAC5B;UACEJ,KAAAA,aAAAA,KAAAA;UACAK,QAAAA,MAAe,KAAA,aAAA,eAAA;;qBAEJ;QACTC,aAAAA,KAAAA;QACAC,SAAAA,KAAAA;QACF,oBAAA;QACAC,yBAAWzB;MACX0B;iBACEC;8BAEsDA,CAAAA,YAAQC;AAAa,gBAAA,aAAA,6BAAA,KAAA,aAAA,EAAA,gBAAA;UAE7E,cAAA,QAAA;QACAC,CAAAA,CAAAA;MACAC;MACF,mCAAA,YAAA;MAAA;MACA,sBAA0B,YAACjB;MAAAA;IAC3B,CAAA;AAEA,UAAMkB,MAAMC,eAASC,WAAAA;AAErB,UAAKvC,MAAO,YAAKS,QAAU4B;AAC3B,UAAA,MAAOA,KAAAA,IAAAA,QAAAA,QAAAA,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,CAAAA,CAAAA;AACT,SAAA,QAAA,IAAA,UAAA,KAAA;AAEAG,WAAAA;;sBAEIC,OAAAA,QAAAA;WACAb,IAAAA,cAAe;;qBAEJ;QACTC,aAAAA,KAAAA;QACAC,SAAAA,KAAAA;QACF,oBAAA;QACAhB,yBAAqBA;MACrBE;MACA0B,gBAAgBT,KAAAA;iBACdA,KAAQU;qBAE4CT,CAAAA,YAAcD;AAAqB,gBAAA,aAAA,8BAAA,UAAA,KAAA,aAAA,GAAA,gBAAA;UAEzF,cAAA,QAAA;QACF,CAAA,CAAA;MACF;IAEAW,CAAAA;;iBAEIC;AACF,WAAA,IAAA,OAAA;MACF,aAAA,KAAA;IAEAC,CAAAA;;iBAEIC,QAAAA;WACAC,IAAAA,SAAgB;MAChB1C,kBAAkBA;MAClB2C,gBAAQA;MACV,aAAA,KAAA;MACF,QAAA,UAAA,KAAA,aAAA;IAEA,CAAA;;QAEE,aAAMC,OAAc;sBACRC,IAAAA,oBAA6Bd,KAAAA,SAAWA,KAAMZ,aAAc,KAAA,SAAA;UACtE,cAAgB2B;MAChB,GAAA,MAAMD,UAAUE,mBAAsBhB,MAAMiB,KAAG,MAAA,cAAA;MAChD,MAAA,UAAA,oBAAA,MAAA,KAAA,MAAA,aAAA,aAAA,YAAA,IAAA;MAED,MAAK,UAAMC,sBAA2B,MAAA,GAAA;;eAElCA,cAAY,aAAA;kBAAEA,gBAAAA,OAAAA,MAAAA;QAAW,YAAA;UAC3B;QACF;MACF,CAAA;IACF;;;;;AE/PA,SAAuBC,sBAAmC;AAE1D,SAASC,SAASC,aAAa;AAC/B,SAASC,iBAAiB;AAC1B,SAASC,OAAAA,YAAW;AAIpB,IAAAC,gBAAaC;AACX,IAAOC,cAAP,MAAOA,qBACLC,eAAuD;;oBAI9CC,0BAAAA,MAAAA,MAAAA,WAAAA;qBACLC,IAAYD,aAAAA;YACZ,CAAA,YAAID;oBACGN,OAAUS;oCACTH,MAAAA,MAAAA;qBACFI,EAAAA,EAAAA,KAASC,MAAO;AAClB,gBAAA,wBAAA,MAAA,QAAA,SAAA,QAAA;AACF,uBAAA,QAAA,OAAA;YACF;UACF,CAAA;QACF;MACA;;qBAEIH,IAAYD,aAAAA;YACZ,CAAA,YAAID;oBACGN,OAAUS;oCACTH,MAAAA,MAAAA;qBACFM,EAAAA,EAAAA,KAASD,MAAO;AAClB,gBAAA,wBAAA,MAAA,QAAA,SAAA,QAAA;AACF,uBAAA,QAAA,OAAA;YACF;UACF,CAAA;QACF;MAEA;;WAAkBD;MAAS;MAC7B;IAEOG;EAEP;cACO,IAAA,QADsBC;EAE7B,YAAA,SAAA;AAESC,UAAmB,GAAA,KAAA,UAAA;;EAE5B,UAAA;AAESC,WAAAA;;EAET,YAAA;AAESC,WAAQC,QAAsB,QAAA;;UAEjC,QAACL;AACP,SAAA,SAAA;AAEAM,SAAAA,UAAcD,KAAsB;;gBAExB,QAAA;cAAoBA,QAAAA,sBAAAA,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,UAAAA,sBAAAA,EAAAA,CAAAA;SAAQE,KAAAA,kBAAe;MAAE;MACzD,cAAA,CAAA;IAEAC,CAAAA;;mBAEY,QAAA;cAAuBH,QAAAA,sBAAAA,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,UAAAA,sBAAAA,EAAAA,CAAAA;AAAO,SAAA,KAAA,qBAAA;MAC1C;IAESI,CAAKf;;gBACQA;SAAkBgB,QAAIhB;MAAkBiB,MAAMjB,QAAQiB;MAAK,IAAA,QAAA;MAC3E,MAACV,QAAaP;IACpB,GAAA,EAAA,YAAA,YAAA,GAAAJ,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;AAESsB,SAAAA,QAAmB,KAAA,OAAA;;EAE5B,aAAA;AAEAd,SAAQJ,SAAwB;;UAE1B,SAAM;AACZ,cAAA,KAAA,QAAA,sBAAA,EAAA,YAAA,YAAA,GAAAJ,eAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,eAAA,sBAAA,EAAA,CAAA;AACF,SAAA,KAAA,WAAA,OAAA;;;;;AClFA,SAAuBuB,SAAAA,QAAAA,oBAAwB;AAC/C,SAASC,gBAAS,gBAAQ;AAC1B,SAASC,aAAAA,kBAAW;AAEpB,SAAA,OAAAA,YAAYC;AAQZ,YAAO,iCAAqCC;AAjB5C,IAAEC,gBAAA;;;;;;AAIF;AAcmBC,IAAAA,yBAAAA,cAAyC,SAAA;EACzCC,eAAoBC,oBAAAA,IAAU;EAE/C,WAAA;cACO,UAAA,CAAA,GAAA;AACL,UAAKD;AACP,SAAA,WAAA,QAAA;EAEA;QACE,OAAK,MAAME;eACJ,cAAMC,KAAcD,cAAWE;iBAC7BD,cAAWE,WAAc,aAAA;AAC9B,aAAKF,WAAWG,SAASC,MAAM;AACjC,aAAA,WAAA,SAAA,OAAA;MACF;IACF;EAEA;QACE,mBAAmB;UACjBC,aAAW,IAAA,eAAA;iBACTd,YAAee;AACf,QAAAf,WAAU,KAACgB,oBAAmBR,eAAAA,MAAAA,QAAAA,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,gDAAAA,EAAAA,EAAAA,CAAAA;AAChC,cAAA,KAAA,mBAAA,UAAA;MACAS;oBACY,YAAKF;AACf,QAAAf,WAAU,KAACkB,oBAAsBV,eAAAA,MAAAA,QAAAA,EAAAA,YAAAA,YAAAA,GAAAA,eAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,gDAAAA,EAAAA,EAAAA,CAAAA;AACnC,cAAA,KAAA,sBAAA,UAAA;MACF;IACA,CAAA;AACA,SAAA,aAAOA,IAAAA,UAAAA;AACT,WAAA;EAEA;QAEE,mBAAWW,YAAmB;eACxBA,mBAAoBX,KAAAA,aAAeW,OAAAA,GAAAA;UACrC,oBAAA,cAAA,CAAA,gBAAA,WAAA;AACF;MACAlB;WAA2BmB,qBAAiBC;QAAiBC,MAAIH,WAAAA,QAAgBE;QAAgB,IAAA,gBAAA,QAAA;MACjG,GAAA,EAAA,YAAOE,YAAaC,GAAAA,eAAoBC,GAAAA,IAAAA,GAAAA,KAAAA,CAAAA;AAIxC,YAAMjB,CAAAA,aAAWa,WAASK,IAAAA,KAAAA,sBAAiBH,WAAAA,QAAAA,QAAAA,gBAAAA,QAAAA,MAAAA;AAC3C,YAAMJ,WAAAA,QAAgBE,iBAASK,WAAiBF;AAClD,YAAA,gBAAA,QAAA,iBAAA,WAAA;IACF;EAEA;QACE,sBAAWf,YAAyBC;eAC5BF,cAAWa,WAASM,aAAmBlB;AAC7C,YAAMA,WAAWmB,QAAAA,mBAA6BC,UAAAA;AAChD,YAAA,WAAA,UAAA,iBAAA,iBAAA,WAAA,SAAA;IACF;EAEQJ;wBACM,OAAA,OAAA;AAEZ,UAAMK,MAAAA;UACJC,UAAW,IAAA,gBAAgBC;iBACrBC,OAAK,SAAA,eAAA;YACPhC,KAAI;eAAemB,aAAMc;YAAOZ,MAAIa;YAAOC,IAAAA;YAAQ;UACrD,GAAA,EAAA,YAAA,YAAA,GAAAhC,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;QAEA;YACE,KAAA,aAAiBE,QAAQ;AAC3B,gBAAA+B,OAAA,KAAA,QAAA;QAEAL;AACF,mBAAA,QAAA,OAAA;MACF;IACA,CAAA;UACED,YAAW,IAAOK,gBAASJ;iBACrBC,OAAK,SAAA,eAAA;YACPhC,KAAI;eAAemB,aAAMe;YAAOb,MAAIY;YAAOE,IAAAA;YAAQ;UACrD,GAAA,EAAA,YAAA,YAAA,GAAAhC,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;QAEA;YACE,KAAA,aAAiBE,QAAQ;AAC3B,gBAAA+B,OAAA,KAAA,QAAA;QAEAL;AACF,mBAAA,QAAA,OAAA;MACF;IAEA,CAAA;AACA,UAAMR,cAAc,IAAIc,yBAAyBJ,OAAOJ,UAAQlB,UAAU2B,QAAU5B,QAAQ;AAC5FY,UAAAA,cAAYK,IAAYJ,yBAAAA,OAAAA,QAAAA,UAAAA,UAAAA,QAAAA;AACxBA,gBAAYI,YAAYL;AACxB,gBAAO,YAAA;WAACA;MAAaC;MAAY;IACnC;EACF;;;;AAOA,GAAA,uBAAagB,WAAAA,sBAAAA,IAAAA;;EACX;cAA6BC,SAAAA;AAA+B,SAAA,UAAA;EAErDC;EACArB,YAAkDd;EAClDG,UAAAA;EAEP,cAAciC,oBAAa,IAAEtB;QAC3BpB,QAAI,MAAW,SAAA;SAAE2C,WAAQvB;MAAe,QAAA,QAAA;IACxC,GAAA,EAAA,YAAY,YAAGA,GAAAA,eAAAA,GAAAA,KAAAA,GAAAA,KAAAA,CAAAA;AACf,SAAKqB,UAAS;AACd,SAAA,YAAWD;AACb,UAAA,KAAA,QAAA,UAAA;EAEA;QACExC,aAAI;SAAgB2C,cAAavB;MAAgB,QAAA,KAAA,QAAA;IACjD,GAAA,EAAA,YAAc,YAAG,GAAAjB,eAAA,GAAA,KAAA,GAAA,KAAA,CAAA;AACjB,SAAA,YAAWqC;AACb,UAAA,KAAA,QAAA,aAAA;EAEA;QACEhC,cAAWoC,YAAgB;AAC3B,eAAKnC,mBAAgBD;AACrB,SAAKY,YAASK,IAAAA,UAAiBjB;AACjC,SAAA,QAAA,iBAAA,UAAA;EAEA;QACEA,iBAAWoC,YAAmBtC;AAC9B,eAAKc,mBAASM;AACd,SAAKjB,QAAAA,mBAAmBD,UAAAA;AAC1B,SAAA,YAAA,OAAA,UAAA;EACF;AAEA;;;;EACSmB;EACAiB,YAAAA;EAEP,mBACgC;cAAdD,QAAAA,UAAAA,UAAAA;SACAhC,SAAAA;SACAD,WAAAA;AACf,SAAA,WAAA;EAEH;MACE,oBAAO;AACT,WAAA;EAEA;QACE,kBAAO;AACT,WAAA;EAEAmC;yBACS;AACT,WAAA;EACF;AAEA;AACE,IAAO,iCAAgCC,CAAAA,WAAAA;SAEhCC,IAAS,gDAAA;IACZC,GAAAA,OAAAA,CAAAA;yBACgB;MACdC,cAAAA;MACAC,sBAAY;MACd,YAAA;IAEFH;EAEF,GAAA,OAAA,CAAA,CAAA;AAEF;AACEA,IAAS,mCAAkB,CAAA,WAAA;SACzB,CAAA,EAAM,gBAAII,MAAAA;AACZ,UAAA,IAAA,MAAA;EAEA;AACA,SAAA,+BAAA,MAAA;;",
6
+ "names": ["log", "schema", "EchoMetadata", "metadata", "createDirectory", "echoMetadata", "version", "file", "_directory", "_writeFile", "Context", "CredentialGenerator", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "MemoryTransportFactory", "SwarmNetworkManager", "createRtcTransportFactory", "AdmittedFeed", "StorageType", "createStorage", "Gossip", "Presence", "BlobStore", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "valueEncoding", "__dxlog_file", "MemoryNetworkManagerProvider", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "server", "signalUrl", "_storage", "_networkManagerProvider", "type", "StorageType", "close", "agents", "getAgent", "deviceKey", "createPeer", "feedBuilder", "keyring", "agent", "TestAgent", "_agents", "_spaces", "storage", "feedStore", "_metadataStore", "_blobStore", "_feedBuilder", "identityKey", "spaces", "getSpace", "spaceKey", "_networkManager", "peerKey", "toHex", "_spaceManager", "networkManager", "metadataStore", "blobStore", "saveMetadata", "genesisKey", "controlFeed", "openFeed", "dataFeed", "sparse", "metadata", "genesisFeedKey", "controlFeedKey", "dataFeedKey", "spaceManager", "swarmIdentity", "credentialProvider", "credentialAuthenticator", "memberKey", "onAuthorizedConnection", "session", "remotePeerId", "onDelegatedInvitationStatusChange", "onMemberRolesChanged", "space", "open", "Context", "createSpaceProtocol", "topic", "onSessionAuth", "addExtension", "createGossip", "localPeerId", "createPresence", "announceInterval", "offlineTimeout", "gossip", "credentials", "generator", "createFeedAdmission", "createEpochCredential", "key", "credential", "NetworkAdapter", "Trigger", "sleep", "invariant", "log", "__dxlog_file", "TestAdapter", "createPair", "connectionStateProvider", "message", "onMessage", "then", "adapter2", "receive", "adapter1", "onConnect", "_params", "isReady", "whenReady", "connect", "peerId", "peerCandidate", "peerMetadata", "peerDisconnected", "send", "to", "type", "disconnect", "LifecycleState", "invariant", "log", "TeleportAutomergeReplicator", "Resource", "__dxlog_file", "_replicators", "_latency", "undefined", "replicator", "connection", "connections", "writable", "readable", "cancel", "onConnect", "_lifecycleState", "_connectReplicator", "onDisconnect", "_disconnectReplicator", "otherReplicator", "from", "context", "to", "connection1", "connection2", "_createConnectionPair", "onConnectionOpen", "onConnectionClosed", "otherSide", "removeConnection", "forward", "transform", "controller", "LOG", "peer1", "peer2", "message", "sleep", "TestReplicatorConnection", "backwards", "TestReplicator", "_params", "connected", "_ctx", "peerId", "owningReplicator", "shouldSyncCollection", "AutomergeReplicator", "params", "sendSyncRetryPolicy", "retriesBeforeBackoff", "maxRetries", "Error"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=automerge-host-subduction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automerge-host-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host-subduction.test.ts"],"names":[],"mappings":""}
@@ -1,46 +1,61 @@
1
1
  import { type Doc, type Heads } from '@automerge/automerge';
2
- import { type AnyDocumentId, type DocHandle, type DocumentId, type PeerId, Repo } from '@automerge/automerge-repo';
2
+ import { type AnyDocumentId, type DocHandle, type DocumentId, type DocumentQuery, type PeerId } from '@automerge/automerge-repo';
3
3
  import { Event } from '@dxos/async';
4
4
  import { Context, Resource } from '@dxos/context';
5
5
  import { type CollectionId } from '@dxos/echo-protocol';
6
- import { type IndexMetadataStore } from '@dxos/indexing';
7
6
  import { PublicKey } from '@dxos/keys';
8
7
  import { type LevelDB } from '@dxos/kv-store';
9
8
  import { type SpaceSyncState } from '@dxos/protocols/proto/dxos/echo/service';
10
9
  import { type DocHeadsList, type FlushRequest } from '@dxos/protocols/proto/dxos/echo/service';
11
10
  import { type CollectionState } from './collection-synchronizer';
12
11
  import { type EchoDataMonitor } from './echo-data-monitor';
13
- import { type EchoReplicator } from './echo-replicator';
12
+ import { type AutomergeReplicator } from './echo-replicator';
14
13
  export type PeerIdProvider = () => string | undefined;
15
14
  export type RootDocumentSpaceKeyProvider = (documentId: string) => PublicKey | undefined;
16
- export type AutomergeHostParams = {
15
+ export type AutomergeHostProps = {
17
16
  db: LevelDB;
18
- indexMetadataStore: IndexMetadataStore;
19
17
  dataMonitor?: EchoDataMonitor;
20
18
  /**
21
19
  * Used for creating stable ids. A random key is generated on open, if no value is provided.
22
20
  */
23
21
  peerIdProvider?: PeerIdProvider;
24
22
  getSpaceKeyByRootDocumentId?: RootDocumentSpaceKeyProvider;
23
+ /**
24
+ * Enable Subduction sedimentree transport.
25
+ *
26
+ * When `false` (default), the host wires {@link EchoNetworkAdapter} as a classical
27
+ * automerge-repo network adapter and skips all Subduction-specific initialization
28
+ * (WASM init, signer generation, subduction policy / adapters). When `true`, the
29
+ * host runs Subduction as the document byte transport.
30
+ */
31
+ useSubduction?: boolean;
25
32
  };
26
33
  export type LoadDocOptions = {
27
34
  timeout?: number;
35
+ /**
36
+ * If true, the document will be fetched from the network if it is not found in the local storage.
37
+ * Setting this to false does not guarantee that the document will not be fetched from the network.
38
+ */
39
+ fetchFromNetwork?: boolean;
28
40
  };
29
41
  export type CreateDocOptions = {
30
42
  /**
31
43
  * Import the document together with its history.
32
44
  */
33
45
  preserveHistory?: boolean;
34
- };
35
- export declare const FIND_PARAMS: {
36
- allowableStates: ("requesting" | "ready")[];
46
+ documentId?: DocumentId;
37
47
  };
38
48
  /**
39
49
  * Abstracts over the AutomergeRepo.
50
+ *
51
+ * Runs Subduction as the document byte transport ({@link Repo.subductionAdapters}), while
52
+ * the DXOS-specific {@link CollectionSynchronizer} rides on the same {@link EchoNetworkAdapter}
53
+ * via `sync-request` / `sync-state` control messages that are intercepted at the adapter
54
+ * level and never reach the Subduction sedimentree layer. Bundle sync remains available
55
+ * for replicators that opt in.
40
56
  */
41
57
  export declare class AutomergeHost extends Resource {
42
58
  private readonly _db;
43
- private readonly _indexMetadataStore;
44
59
  private readonly _echoNetworkAdapter;
45
60
  private readonly _collectionSynchronizer;
46
61
  private _repo;
@@ -63,43 +78,86 @@ export declare class AutomergeHost extends Resource {
63
78
  readonly documentsSaved: Event<void>;
64
79
  private readonly _headsUpdates;
65
80
  private _onHeadsChangedTask?;
66
- constructor({ db, indexMetadataStore, dataMonitor, peerIdProvider, getSpaceKeyByRootDocumentId, }: AutomergeHostParams);
67
- protected _open(): Promise<void>;
68
- protected _close(): Promise<void>;
69
81
  /**
70
- * @deprecated To be abstracted away.
82
+ * Documents created in this session.
83
+ */
84
+ private _createdDocuments;
85
+ /**
86
+ * Documents that need to be synced based on the result of collection-sync.
87
+ */
88
+ private _documentsToSync;
89
+ /**
90
+ * Documents that are not available locally that should be requested.
71
91
  */
72
- get repo(): Repo;
92
+ private _documentsToRequest;
93
+ /**
94
+ * Documents requested by remote peers.
95
+ */
96
+ private _documentsRequested;
97
+ private _sharePolicyChangedTask?;
98
+ private _signer;
99
+ private readonly _useSubduction;
100
+ constructor({ db, dataMonitor, peerIdProvider, getSpaceKeyByRootDocumentId, useSubduction }: AutomergeHostProps);
101
+ protected _open(ctx: Context): Promise<void>;
102
+ protected _close(ctx: Context): Promise<void>;
73
103
  get peerId(): PeerId;
74
104
  get loadedDocsCount(): number;
75
- addReplicator(replicator: EchoReplicator): Promise<void>;
76
- removeReplicator(replicator: EchoReplicator): Promise<void>;
105
+ get handles(): Readonly<Record<DocumentId, DocHandle<any>>>;
106
+ addReplicator(ctx: Context, replicator: AutomergeReplicator): Promise<void>;
107
+ removeReplicator(replicator: AutomergeReplicator): Promise<void>;
108
+ loadDoc<T>(ctx: Context, documentId: AnyDocumentId, opts?: LoadDocOptions): Promise<DocHandle<T>>;
77
109
  /**
78
- * Loads the document handle from the repo and waits for it to be ready.
110
+ * Returns the live {@link DocumentQuery} for a document exposes the
111
+ * always-attached `DocHandle` and the actual readiness state
112
+ * (`'loading' | 'ready' | 'unavailable' | 'failed'`) via `peek()` /
113
+ * `subscribe()` / `whenReady()`. Use this to observe sync state without
114
+ * forcing a wait. See {@link getHandleState} for why callers must read
115
+ * liveness off the query rather than the `DocHandle` itself.
79
116
  */
80
- loadDoc<T>(ctx: Context, documentId: AnyDocumentId, opts?: LoadDocOptions): Promise<DocHandle<T>>;
81
- exportDoc(ctx: Context, id: AnyDocumentId): Promise<Uint8Array>;
117
+ findWithProgress<T>(documentId: AnyDocumentId): DocumentQuery<T>;
118
+ exportDoc(id: AnyDocumentId): Promise<Uint8Array>;
82
119
  /**
83
120
  * Create new persisted document.
84
121
  */
85
- createDoc<T>(initialValue?: T | Doc<T> | Uint8Array, opts?: CreateDocOptions): DocHandle<T>;
86
- waitUntilHeadsReplicated(heads: DocHeadsList): Promise<void>;
122
+ createDoc<T>(initialValue?: T | Doc<T> | Uint8Array, opts?: CreateDocOptions): Promise<DocHandle<T>>;
123
+ waitUntilHeadsReplicated(ctx: Context, heads: DocHeadsList): Promise<void>;
87
124
  reIndexHeads(documentIds: DocumentId[]): Promise<void>;
88
- private _sharePolicy;
89
- private _beforeSave;
90
- private _shouldSyncCollection;
91
125
  /**
92
- * Called by AutomergeStorageAdapter after levelDB batch commit.
126
+ * Share policy for the Repo's classical automerge-repo sync path (CollectionSynchronizer /
127
+ * DocSynchronizer — see `src/synchronizer/DocSynchronizer.ts#resolveSharePolicy`).
128
+ *
129
+ * NOTE: Subduction replication does NOT consult `shareConfig`.
130
+ * {@link AutomergeReplicator}s via {@link EchoNetworkAdapter}.
93
131
  */
132
+ private readonly _shareConfig;
133
+ /**
134
+ * Authorization policy consulted by the Subduction sedimentree protocol.
135
+ */
136
+ private readonly _subductionPolicy;
137
+ private _beforeSave;
138
+ private _shouldSyncCollection;
94
139
  private _afterSave;
95
- private _automergePeers;
96
140
  private _isDocumentInRemoteCollection;
97
141
  private _getContainingSpaceForDocument;
98
142
  /**
99
143
  * Flush documents to disk.
100
144
  */
101
- flush({ documentIds }?: FlushRequest): Promise<void>;
145
+ flush(ctx: Context, { documentIds }?: FlushRequest): Promise<void>;
146
+ /**
147
+ * Returns current heads of each requested document.
148
+ *
149
+ * Loaded handles are read directly; unloaded documents fall back to the {@link HeadsStore},
150
+ * then to reconstruction from the automerge storage chunks (for docs persisted before
151
+ * the HeadsStore was populated).
152
+ */
102
153
  getHeads(documentIds: DocumentId[]): Promise<(Heads | undefined)[]>;
154
+ /**
155
+ * Iterate over all document heads stored on disk.
156
+ */
157
+ listDocumentHeads(): AsyncGenerator<{
158
+ documentId: DocumentId;
159
+ heads: Heads;
160
+ }>;
103
161
  getLocalCollectionState(collectionId: string): CollectionState | undefined;
104
162
  getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
105
163
  refreshCollection(collectionId: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automerge-host.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const createTmpPath: () => string;
2
+ //# sourceMappingURL=automerge-repo-subduction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automerge-repo-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo-subduction.test.ts"],"names":[],"mappings":"AAshCA,eAAO,MAAM,aAAa,QAAO,MAEhC,CAAC"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export declare const createTmpPath: () => string;
2
2
  //# sourceMappingURL=automerge-repo.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"automerge-repo.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo.test.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"automerge-repo.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-repo.test.ts"],"names":[],"mappings":"AAijCA,eAAO,MAAM,aAAa,QAAO,MAEhC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=automerge-subduction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automerge-subduction.test.d.ts","sourceRoot":"","sources":["../../../../src/automerge/automerge-subduction.test.ts"],"names":[],"mappings":""}
@@ -1,7 +1,8 @@
1
+ import { type Heads } from '@automerge/automerge';
1
2
  import type { DocumentId, PeerId } from '@automerge/automerge-repo';
2
3
  import { Event } from '@dxos/async';
3
4
  import { type Context, Resource } from '@dxos/context';
4
- export type CollectionSynchronizerParams = {
5
+ export type CollectionSynchronizerProps = {
5
6
  sendCollectionState: (collectionId: string, peerId: PeerId, state: CollectionState) => void;
6
7
  queryCollectionState: (collectionId: string, peerId: PeerId) => void;
7
8
  shouldSyncCollection: (collectionId: string, peerId: PeerId) => boolean;
@@ -24,11 +25,19 @@ export declare class CollectionSynchronizer extends Resource {
24
25
  peerId: PeerId;
25
26
  newDocsAppeared: boolean;
26
27
  }>;
27
- constructor(params: CollectionSynchronizerParams);
28
+ constructor(params: CollectionSynchronizerProps);
28
29
  protected _open(ctx: Context): Promise<void>;
29
30
  getRegisteredCollectionIds(): string[];
30
31
  getLocalCollectionState(collectionId: string): CollectionState | undefined;
31
32
  setLocalCollectionState(collectionId: string, state: CollectionState): void;
33
+ /**
34
+ * Coalesce bursts of `setLocalCollectionState` (e.g. from `_onHeadsChanged` during an
35
+ * import) into one broadcast microtask per collection. If another call arrives while
36
+ * the microtask is pending, we just flag the collection dirty — the in-flight run
37
+ * already reads the latest `localState`. If it arrives during the run itself, we
38
+ * schedule exactly one follow-up.
39
+ */
40
+ private _scheduleBroadcast;
32
41
  clearLocalCollectionState(collectionId: string): void;
33
42
  getRemoteCollectionStates(collectionId: string): ReadonlyMap<PeerId, CollectionState>;
34
43
  refreshCollection(collectionId: string): void;
@@ -42,20 +51,32 @@ export declare class CollectionSynchronizer extends Resource {
42
51
  onConnectionClosed(peerId: PeerId): void;
43
52
  /**
44
53
  * Callback when a peer queries the state of a collection.
54
+ *
55
+ * If we have no local state yet we silently drop the query; the peer will receive our
56
+ * state via {@link _broadcastLocalState} once `setLocalCollectionState` is called.
45
57
  */
46
58
  onCollectionStateQueried(collectionId: string, peerId: PeerId): void;
47
59
  /**
48
60
  * Callback when a peer sends the state of a collection.
49
61
  */
50
62
  onRemoteStateReceived(collectionId: string, peerId: PeerId, state: CollectionState): void;
63
+ private _diffCollectionState;
51
64
  private _getOrCreatePerCollectionState;
65
+ /**
66
+ * Push local state to interested peers whose last-known remote state differs from local
67
+ * (or is unknown), then pull from peers via {@link refreshCollection}.
68
+ *
69
+ * Diff-gating avoids spamming peers that are already in sync; this matters because
70
+ * {@link setLocalCollectionState} is called on every local heads change.
71
+ */
72
+ private _broadcastLocalState;
52
73
  private _refreshInterestedPeers;
53
74
  }
54
75
  export type CollectionState = {
55
76
  /**
56
77
  * DocumentId -> Heads.
57
78
  */
58
- documents: Record<string, string[]>;
79
+ documents: Record<DocumentId, Heads>;
59
80
  };
60
81
  export type CollectionStateDiff = {
61
82
  missingOnRemote: DocumentId[];
@@ -1 +1 @@
1
- {"version":3,"file":"collection-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/automerge/collection-synchronizer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAmD,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASvD,MAAM,MAAM,4BAA4B,GAAG;IACzC,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5F,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACzE,CAAC;AAEF;;GAEG;AACH,qBACa,sBAAuB,SAAQ,QAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsD;IAC3F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuD;IAC7F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuD;IAE7F;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyC;IAC9E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAErD,SAAgB,kBAAkB;sBAA6B,MAAM;gBAAU,MAAM;yBAAmB,OAAO;OAAM;gBAEzG,MAAM,EAAE,4BAA4B;cAOvB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D,0BAA0B,IAAI,MAAM,EAAE;IAItC,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI1E,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAc3E,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAMrD,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;IAIrF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAmB7C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA0BtC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQpE;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAyBzF,OAAO,CAAC,8BAA8B;IAStC,OAAO,CAAC,uBAAuB;CAShC;AASD,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,eAAe,EAAE,QAAQ,eAAe,KAAG,mBAqBrF,CAAC"}
1
+ {"version":3,"file":"collection-synchronizer.d.ts","sourceRoot":"","sources":["../../../../src/automerge/collection-synchronizer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIpE,OAAO,EAAE,KAAK,EAAmD,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AASvD,MAAM,MAAM,2BAA2B,GAAG;IACxC,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5F,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACzE,CAAC;AAEF;;GAEG;AACH,qBACa,sBAAuB,SAAQ,QAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqD;IAC1F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsD;IAC5F,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsD;IAE5F;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyC;IAC9E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAErD,SAAgB,kBAAkB;sBAA6B,MAAM;gBAAU,MAAM;yBAAmB,OAAO;OAAM;IAErH,YAAY,MAAM,EAAE,2BAA2B,EAK9C;IAED,UAAyB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1D;IAED,0BAA0B,IAAI,MAAM,EAAE,CAErC;IAED,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEzE;IAED,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAY1E;IAED;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAS1B,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAIpD;IAED,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAEpF;IAED,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiB5C;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA4BrC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQvC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMnE;IAED;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAMxF;IAED,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,8BAA8B;IAUtC;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,uBAAuB;CAShC;AAUD,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,eAAe,UAAU,eAAe,KAAG,mBAwBrF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"echo-data-monitor.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-data-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"echo-data-monitor.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-data-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { type DocumentId, type Heads, type Message, NetworkAdapter, type PeerId, type PeerMetadata } from '@automerge/automerge-repo';
2
+ import { Event } from '@dxos/async';
3
+ import { type Context } from '@dxos/context';
2
4
  import { type PublicKey } from '@dxos/keys';
3
- import { type EchoReplicator, type RemoteDocumentExistenceCheckParams, type ShouldAdvertiseParams, type ShouldSyncCollectionParams } from './echo-replicator';
5
+ import { type AutomergeReplicator, type RemoteDocumentExistenceCheckProps, type ShouldAdvertiseProps, type ShouldSyncCollectionProps } from './echo-replicator';
4
6
  export interface NetworkDataMonitor {
5
7
  recordPeerConnected(peerId: string): void;
6
8
  recordPeerDisconnected(peerId: string): void;
@@ -8,15 +10,15 @@ export interface NetworkDataMonitor {
8
10
  recordMessageReceived(message: Message): void;
9
11
  recordMessageSendingFailed(message: Message): void;
10
12
  }
11
- export type EchoNetworkAdapterParams = {
13
+ export type EchoNetworkAdapterProps = {
12
14
  getContainingSpaceForDocument: (documentId: string) => Promise<PublicKey | null>;
13
- isDocumentInRemoteCollection: (params: RemoteDocumentExistenceCheckParams) => Promise<boolean>;
15
+ isDocumentInRemoteCollection: (params: RemoteDocumentExistenceCheckProps) => Promise<boolean>;
14
16
  onCollectionStateQueried: (collectionId: string, peerId: PeerId) => void;
15
17
  onCollectionStateReceived: (collectionId: string, peerId: PeerId, state: unknown) => void;
16
18
  monitor?: NetworkDataMonitor;
17
19
  };
18
20
  /**
19
- * Manages a set of {@link EchoReplicator} instances.
21
+ * Manages a set of {@link AutomergeReplicator} instances.
20
22
  */
21
23
  export declare class EchoNetworkAdapter extends NetworkAdapter {
22
24
  private readonly _params;
@@ -28,7 +30,11 @@ export declare class EchoNetworkAdapter extends NetworkAdapter {
28
30
  private _lifecycleState;
29
31
  private readonly _connected;
30
32
  private readonly _ready;
31
- constructor(_params: EchoNetworkAdapterParams);
33
+ readonly documentRequested: Event<{
34
+ documentId: DocumentId;
35
+ peerId: PeerId;
36
+ }>;
37
+ constructor(_params: EchoNetworkAdapterProps);
32
38
  isReady(): boolean;
33
39
  whenReady(): Promise<void>;
34
40
  connect(peerId: PeerId, peerMetadata?: PeerMetadata | undefined): void;
@@ -38,20 +44,20 @@ export declare class EchoNetworkAdapter extends NetworkAdapter {
38
44
  close(): Promise<this | undefined>;
39
45
  whenConnected(): Promise<void>;
40
46
  onConnectionAuthScopeChanged(peer: PeerId): void;
41
- addReplicator(replicator: EchoReplicator): Promise<void>;
42
- removeReplicator(replicator: EchoReplicator): Promise<void>;
43
- shouldAdvertise(peerId: PeerId, params: ShouldAdvertiseParams): Promise<boolean>;
44
- shouldSyncCollection(peerId: PeerId, params: ShouldSyncCollectionParams): boolean;
47
+ addReplicator(ctx: Context, replicator: AutomergeReplicator): Promise<void>;
48
+ removeReplicator(replicator: AutomergeReplicator): Promise<void>;
49
+ shouldAdvertise(peerId: PeerId, params: ShouldAdvertiseProps): Promise<boolean>;
50
+ shouldSyncCollection(peerId: PeerId, params: ShouldSyncCollectionProps): boolean;
45
51
  queryCollectionState(collectionId: string, targetId: PeerId): void;
46
52
  sendCollectionState(collectionId: string, targetId: PeerId, state: unknown): void;
47
53
  getPeersInterestedInCollection(collectionId: string): PeerId[];
48
54
  bundleSyncEnabledForPeer(peerId: PeerId): boolean;
49
- pushBundle(peerId: PeerId, bundle: {
55
+ pushBundle(ctx: Context, peerId: PeerId, bundle: {
50
56
  documentId: DocumentId;
51
57
  data: Uint8Array;
52
58
  heads: Heads;
53
59
  }[]): Promise<void>;
54
- pullBundle(peerId: PeerId, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array<ArrayBufferLike>>>;
60
+ pullBundle(ctx: Context, peerId: PeerId, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array<ArrayBufferLike>>>;
55
61
  private _send;
56
62
  private _onConnectionOpen;
57
63
  private _onMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"echo-network-adapter.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-network-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,19 @@
1
1
  import { type Heads } from '@automerge/automerge';
2
2
  import { type DocumentId } from '@automerge/automerge-repo';
3
+ import { type Context } from '@dxos/context';
3
4
  import { type PublicKey, type SpaceId } from '@dxos/keys';
4
5
  import { type AutomergeProtocolMessage } from '@dxos/protocols';
5
- export interface EchoReplicator {
6
+ export interface AutomergeReplicator {
6
7
  /**
7
8
  * Called on when replicator is added to EchoHost.
8
9
  */
9
- connect(context: EchoReplicatorContext): Promise<void>;
10
+ connect(ctx: Context, context: AutomergeReplicatorContext): Promise<void>;
10
11
  /**
11
12
  * Called on when replicator is removed from EchoHost.
12
13
  */
13
14
  disconnect(): Promise<void>;
14
15
  }
15
- export interface EchoReplicatorContext {
16
+ export interface AutomergeReplicatorContext {
16
17
  /**
17
18
  * Our own peer id.
18
19
  */
@@ -22,12 +23,15 @@ export interface EchoReplicatorContext {
22
23
  */
23
24
  getContainingSpaceForDocument(documentId: string): Promise<PublicKey | null>;
24
25
  getContainingSpaceIdForDocument(documentId: string): Promise<SpaceId | null>;
25
- isDocumentInRemoteCollection(params: RemoteDocumentExistenceCheckParams): Promise<boolean>;
26
- onConnectionOpen(connection: ReplicatorConnection): void;
27
- onConnectionClosed(connection: ReplicatorConnection): void;
28
- onConnectionAuthScopeChanged(connection: ReplicatorConnection): void;
26
+ /**
27
+ * Returns false if collection sync hasn't happened yet.
28
+ */
29
+ isDocumentInRemoteCollection(params: RemoteDocumentExistenceCheckProps): Promise<boolean>;
30
+ onConnectionOpen(connection: AutomergeReplicatorConnection): void;
31
+ onConnectionClosed(connection: AutomergeReplicatorConnection): void;
32
+ onConnectionAuthScopeChanged(connection: AutomergeReplicatorConnection): void;
29
33
  }
30
- export interface ReplicatorConnection {
34
+ export interface AutomergeReplicatorConnection {
31
35
  /**
32
36
  * Remote peer id.
33
37
  */
@@ -44,20 +48,20 @@ export interface ReplicatorConnection {
44
48
  * @returns true if the document should be advertised to this peer.
45
49
  * The remote peer can still request the document by its id bypassing this check.
46
50
  */
47
- shouldAdvertise(params: ShouldAdvertiseParams): Promise<boolean>;
51
+ shouldAdvertise(params: ShouldAdvertiseProps): Promise<boolean>;
48
52
  /**
49
53
  * @returns true if the collection should be synced to this peer.
50
54
  */
51
- shouldSyncCollection(params: ShouldSyncCollectionParams): boolean;
55
+ shouldSyncCollection(params: ShouldSyncCollectionProps): boolean;
52
56
  /**
53
- * Batch syncing considered enabled if ReplicatorConnection implements `pushBatch` and `pullBatch` methods.
57
+ * Batch syncing considered enabled if AutomergeReplicatorConnection implements `pushBatch` and `pullBatch` methods.
54
58
  * @returns true if the batch syncing is enabled.
55
59
  */
56
60
  get bundleSyncEnabled(): boolean;
57
61
  /**
58
62
  * Pushes the batch of documents to the remote peer.
59
63
  */
60
- pushBundle?(bundle: {
64
+ pushBundle?(ctx: Context, bundle: {
61
65
  documentId: DocumentId;
62
66
  data: Uint8Array;
63
67
  heads: Heads;
@@ -65,15 +69,15 @@ export interface ReplicatorConnection {
65
69
  /**
66
70
  * Pulls the batch of documents from the remote peer.
67
71
  */
68
- pullBundle?(docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array>>;
72
+ pullBundle?(ctx: Context, docHeads: Record<DocumentId, Heads>): Promise<Record<DocumentId, Uint8Array>>;
69
73
  }
70
- export type ShouldAdvertiseParams = {
74
+ export type ShouldAdvertiseProps = {
71
75
  documentId: string;
72
76
  };
73
- export type ShouldSyncCollectionParams = {
77
+ export type ShouldSyncCollectionProps = {
74
78
  collectionId: string;
75
79
  };
76
- export type RemoteDocumentExistenceCheckParams = {
80
+ export type RemoteDocumentExistenceCheckProps = {
77
81
  peerId: string;
78
82
  documentId: string;
79
83
  };
@@ -1 +1 @@
1
- {"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC7E,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7E,4BAA4B,CAAC,MAAM,EAAE,kCAAkC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3F,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzD,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3D,4BAA4B,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC;IAElE;;;OAGG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjG;;OAEG;IAEH,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;CAC3F;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"echo-replicator.d.ts","sourceRoot":"","sources":["../../../../src/automerge/echo-replicator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC7E,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE7E;;OAEG;IACH,4BAA4B,CAAC,MAAM,EAAE,iCAAiC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1F,gBAAgB,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAClE,kBAAkB,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpE,4BAA4B,CAAC,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/E;AAED,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IAEnD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC;IAEjE;;;OAGG;IACH,IAAI,iBAAiB,IAAI,OAAO,CAAC;IAEjC;;OAEG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/G;;OAEG;IAEH,UAAU,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;CACzG;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}