@dxos/echo-pipeline 0.4.10-main.c32f430 → 0.4.10-main.c42bfdb

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 (36) hide show
  1. package/dist/lib/browser/{chunk-RTEEJ723.mjs → chunk-RA6MLCZM.mjs} +14 -27
  2. package/dist/lib/browser/chunk-RA6MLCZM.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +50 -26
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +1 -1
  7. package/dist/lib/node/{chunk-7VZVCCNF.cjs → chunk-KGIYLJBT.cjs} +20 -33
  8. package/dist/lib/node/chunk-KGIYLJBT.cjs.map +7 -0
  9. package/dist/lib/node/index.cjs +72 -46
  10. package/dist/lib/node/index.cjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/testing/index.cjs +11 -11
  13. package/dist/types/src/automerge/automerge-doc-loader.d.ts +2 -0
  14. package/dist/types/src/automerge/automerge-doc-loader.d.ts.map +1 -1
  15. package/dist/types/src/automerge/automerge-host.d.ts +2 -1
  16. package/dist/types/src/automerge/automerge-host.d.ts.map +1 -1
  17. package/dist/types/src/automerge/index.d.ts +1 -0
  18. package/dist/types/src/automerge/index.d.ts.map +1 -1
  19. package/dist/types/src/automerge/reference.d.ts +15 -0
  20. package/dist/types/src/automerge/reference.d.ts.map +1 -0
  21. package/dist/types/src/automerge/types.d.ts +2 -2
  22. package/dist/types/src/automerge/types.d.ts.map +1 -1
  23. package/dist/types/src/space/space.d.ts +4 -8
  24. package/dist/types/src/space/space.d.ts.map +1 -1
  25. package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
  26. package/package.json +30 -30
  27. package/src/automerge/automerge-doc-loader.ts +6 -0
  28. package/src/automerge/automerge-host.ts +15 -6
  29. package/src/automerge/index.ts +1 -0
  30. package/src/automerge/reference.ts +31 -0
  31. package/src/automerge/types.ts +2 -2
  32. package/src/db-host/data-service.ts +1 -1
  33. package/src/space/space.test.ts +7 -7
  34. package/src/space/space.ts +6 -21
  35. package/dist/lib/browser/chunk-RTEEJ723.mjs.map +0 -7
  36. package/dist/lib/node/chunk-7VZVCCNF.cjs.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/automerge/automerge-host.ts", "../../../src/automerge/automerge-storage-adapter.ts", "../../../src/automerge/automerge-storage\u2013wrapper.ts", "../../../src/automerge/local-host-network-adapter.ts", "../../../src/automerge/mesh-network-adapter.ts", "../../../src/automerge/automerge-doc-loader.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { next as automerge, getHeads } from '@dxos/automerge/automerge';\nimport {\n Repo,\n type PeerId,\n type DocumentId,\n type StorageKey,\n type DocHandle,\n type DocHandleChangePayload,\n} from '@dxos/automerge/automerge-repo';\nimport { IndexedDBStorageAdapter } from '@dxos/automerge/automerge-repo-storage-indexeddb';\nimport { type Stream } from '@dxos/codec-protobuf';\nimport { Context } from '@dxos/context';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { idCodec } from '@dxos/protocols';\nimport { type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';\nimport { StorageType, type Directory } from '@dxos/random-access-storage';\nimport { type AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';\nimport { trace } from '@dxos/tracing';\nimport { ComplexMap, ComplexSet, defaultMap, mapValues } from '@dxos/util';\n\nimport { AutomergeStorageAdapter } from './automerge-storage-adapter';\nimport { AutomergeStorageWrapper } from './automerge-storage–wrapper';\nimport { LocalHostNetworkAdapter } from './local-host-network-adapter';\nimport { MeshNetworkAdapter } from './mesh-network-adapter';\n\nexport type { DocumentId };\n\nexport interface MetadataMethods {\n markDirty(idToLastHash: Map<string, string>): Promise<void>;\n}\n\nexport type AutomergeHostParams = {\n directory: Directory;\n metadata?: MetadataMethods;\n};\n\n@trace.resource()\nexport class AutomergeHost {\n private readonly _ctx = new Context();\n private readonly _repo: Repo;\n private readonly _meshNetwork: MeshNetworkAdapter;\n private readonly _clientNetwork: LocalHostNetworkAdapter;\n private readonly _storage: AutomergeStorageWrapper;\n\n @trace.info()\n private readonly _peerId: string;\n\n /**\n * spaceKey -> deviceKey[]\n */\n private readonly _authorizedDevices = new ComplexMap<PublicKey, ComplexSet<PublicKey>>(PublicKey.hash);\n\n private readonly _updatingMetadata = new Map<string, Promise<void>>();\n private readonly _metadata?: MetadataMethods;\n\n public _requestedDocs = new Set<string>();\n\n constructor({ directory, metadata }: AutomergeHostParams) {\n this._metadata = metadata;\n this._meshNetwork = new MeshNetworkAdapter();\n this._clientNetwork = new LocalHostNetworkAdapter();\n\n this._storage = new AutomergeStorageWrapper({\n storage:\n // TODO(mykola): Delete specific handling of IDB storage.\n directory.type === StorageType.IDB\n ? new IndexedDBStorageAdapter(directory.path, 'data')\n : new AutomergeStorageAdapter(directory),\n callbacks: { beforeSave: (params) => this._beforeSave(params) },\n });\n this._peerId = `host-${PublicKey.random().toHex()}` as PeerId;\n this._repo = new Repo({\n peerId: this._peerId as PeerId,\n network: [this._clientNetwork, this._meshNetwork],\n storage: this._storage,\n\n // TODO(dmaretskyi): Share based on HALO permissions and space affinity.\n // Hosts, running in the worker, don't share documents unless requested by other peers.\n sharePolicy: async (peerId /* device key */, documentId /* space key */) => {\n if (peerId.startsWith('client-')) {\n return false; // Only send docs to clients if they are requested.\n }\n\n if (!documentId) {\n return false;\n }\n\n const doc = this._repo.handles[documentId]?.docSync();\n if (!doc) {\n const isRequested = this._requestedDocs.has(`automerge:${documentId}`);\n log('doc share policy check', { peerId, documentId, isRequested });\n return isRequested;\n }\n\n try {\n const spaceKey = getSpaceKeyFromDoc(doc);\n if (!spaceKey) {\n log('space key not found for share policy check', { peerId, documentId });\n return false;\n }\n\n const authorizedDevices = this._authorizedDevices.get(PublicKey.from(spaceKey));\n\n // TODO(mykola): Hack, stop abusing `peerMetadata` field.\n const deviceKeyHex = (this.repo.peerMetadataByPeerId[peerId] as any)?.dxos_deviceKey;\n if (!deviceKeyHex) {\n log('device key not found for share policy check', { peerId, documentId });\n return false;\n }\n const deviceKey = PublicKey.from(deviceKeyHex);\n\n const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;\n log('share policy check', {\n localPeer: this._peerId,\n remotePeer: peerId,\n documentId,\n deviceKey,\n spaceKey,\n isAuthorized,\n });\n return isAuthorized;\n } catch (err) {\n log.catch(err);\n return false;\n }\n },\n });\n this._clientNetwork.ready();\n this._meshNetwork.ready();\n\n {\n const listener = ({ handle }: { handle: DocHandle<any> }) => this._onDocument(handle);\n this._repo.on('document', listener);\n this._ctx.onDispose(() => {\n this._repo.off('document', listener);\n });\n }\n }\n\n get repo(): Repo {\n return this._repo;\n }\n\n private async _beforeSave(path: StorageKey) {\n const id = path[0];\n if (this._updatingMetadata.has(id)) {\n return this._updatingMetadata.get(id);\n }\n }\n\n private _onDocument(handle: DocHandle<any>) {\n const listener = (event: DocHandleChangePayload<any>) => this._onUpdate(event);\n handle.on('change', listener);\n this._ctx.onDispose(() => {\n handle.off('change', listener);\n });\n }\n\n private _onUpdate(event: DocHandleChangePayload<any>) {\n if (this._metadata == null) {\n return;\n }\n\n const objectIds = getInlineChanges(event);\n if (objectIds.length === 0) {\n return;\n }\n\n const heads = getHeads(event.doc);\n const lastAvailableHash = heads.join('');\n if (!lastAvailableHash) {\n return;\n }\n\n const encodedIds = objectIds.map((objectId) => idCodec.encode({ documentId: event.handle.documentId, objectId }));\n const idToLastHash = new Map(encodedIds.map((id) => [id, lastAvailableHash]));\n const markingDirtyPromise = this._metadata\n .markDirty(idToLastHash)\n .then(() => {\n this._updatingMetadata.delete(event.handle.documentId);\n })\n .catch((err: Error) => {\n this._ctx.disposed && log.catch(err);\n });\n this._updatingMetadata.set(event.handle.documentId, markingDirtyPromise);\n }\n\n @trace.info({ depth: null })\n private _automergeDocs() {\n return mapValues(this._repo.handles, (handle) => ({\n state: handle.state,\n hasDoc: !!handle.docSync(),\n heads: handle.docSync() ? automerge.getHeads(handle.docSync()) : null,\n data:\n handle.docSync()?.doc &&\n mapValues(handle.docSync()?.doc, (value, key) => {\n try {\n switch (key) {\n case 'access':\n case 'links':\n return value;\n case 'objects':\n return Object.keys(value as any);\n default:\n return `${value}`;\n }\n } catch (err) {\n return `${err}`;\n }\n }),\n }));\n }\n\n @trace.info({ depth: null })\n private _automergePeers() {\n return this._repo.peers;\n }\n\n async close() {\n await this._storage.close();\n await this._clientNetwork.close();\n await this._ctx.dispose();\n }\n\n //\n // Methods for client-services.\n //\n\n syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse> {\n return this._clientNetwork.syncRepo(request);\n }\n\n sendSyncMessage(request: SyncRepoRequest): Promise<void> {\n return this._clientNetwork.sendSyncMessage(request);\n }\n\n async getHostInfo(): Promise<HostInfo> {\n return this._clientNetwork.getHostInfo();\n }\n\n //\n // Mesh replication.\n //\n\n createExtension(): AutomergeReplicator {\n return this._meshNetwork.createExtension();\n }\n\n authorizeDevice(spaceKey: PublicKey, deviceKey: PublicKey) {\n log('authorizeDevice', { spaceKey, deviceKey });\n defaultMap(this._authorizedDevices, spaceKey, () => new ComplexSet(PublicKey.hash)).add(deviceKey);\n }\n}\n\n// TODO(mykola): Reconcile with `getInlineAndLinkChanges` in AutomergeDB.\nconst getInlineChanges = (event: DocHandleChangePayload<any>) => {\n const inlineChangedObjectIds = new Set<string>();\n for (const { path } of event.patches) {\n if (path.length < 2) {\n continue;\n }\n switch (path[0]) {\n case 'objects':\n if (path.length >= 2) {\n inlineChangedObjectIds.add(path[1]);\n }\n break;\n }\n }\n return [...inlineChangedObjectIds];\n};\n\nexport const getSpaceKeyFromDoc = (doc: any): string | null => {\n // experimental_spaceKey is set on old documents, new ones are created with doc.access.spaceKey\n const rawSpaceKey = doc.access?.spaceKey ?? doc.experimental_spaceKey;\n if (rawSpaceKey == null) {\n return null;\n }\n\n return String(rawSpaceKey);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Chunk, type StorageKey, type StorageAdapterInterface } from '@dxos/automerge/automerge-repo';\nimport { type Directory } from '@dxos/random-access-storage';\nimport { arrayToBuffer, bufferToArray } from '@dxos/util';\n\nexport class AutomergeStorageAdapter implements StorageAdapterInterface {\n // TODO(mykola): Hack for restricting automerge Repo to access storage if Host is `closed`.\n // Automerge Repo do not have any lifetime management.\n private _state: 'opened' | 'closed' = 'opened';\n\n constructor(private readonly _directory: Directory) {}\n\n async load(key: StorageKey): Promise<Uint8Array | undefined> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n if (!size || size === 0) {\n return undefined;\n }\n const buffer = await file.read(0, size);\n return bufferToArray(buffer);\n }\n\n async save(key: StorageKey, data: Uint8Array): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n await file.write(0, arrayToBuffer(data));\n await file.truncate?.(data.length);\n\n await file.flush?.();\n }\n\n async remove(key: StorageKey): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n // TODO(dmaretskyi): Better deletion.\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n await file.destroy();\n }\n\n async loadRange(keyPrefix: StorageKey): Promise<Chunk[]> {\n if (this._state !== 'opened') {\n return [];\n }\n const filename = this._getFilename(keyPrefix);\n const entries = await this._directory.list();\n return Promise.all(\n entries\n .filter((entry) => entry.startsWith(filename))\n .map(async (entry): Promise<Chunk> => {\n const file = this._directory.getOrCreateFile(entry);\n const { size } = await file.stat();\n const buffer = await file.read(0, size);\n return {\n key: this._getKeyFromFilename(entry),\n data: bufferToArray(buffer),\n };\n }),\n );\n }\n\n async removeRange(keyPrefix: StorageKey): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(keyPrefix);\n const entries = await this._directory.list();\n await Promise.all(\n entries\n .filter((entry) => entry.startsWith(filename))\n .map(async (entry): Promise<void> => {\n const file = this._directory.getOrCreateFile(entry);\n await file.destroy();\n }),\n );\n }\n\n async close(): Promise<void> {\n this._state = 'closed';\n }\n\n private _getFilename(key: StorageKey): string {\n return key.map((k) => k.replaceAll('%', '%25').replaceAll('-', '%2D')).join('-');\n }\n\n private _getKeyFromFilename(filename: string): StorageKey {\n return filename.split('-').map((k) => k.replaceAll('%2D', '-').replaceAll('%25', '%'));\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type StorageKey, type Chunk, type StorageAdapterInterface } from '@dxos/automerge/automerge-repo';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { AutomergeStorageAdapter } from './automerge-storage-adapter';\n\nexport type StorageCallbacks = {\n beforeSave?: (path: string[]) => MaybePromise<void>;\n afterSave?: (path: string[]) => MaybePromise<void>;\n};\n\nexport type AutomergeStorageWrapperParams = {\n storage: StorageAdapterInterface;\n callbacks: StorageCallbacks;\n};\n\n/**\n * Wrapper for automerge storage that adds callback on save.\n */\nexport class AutomergeStorageWrapper implements StorageAdapterInterface {\n private readonly _storage: StorageAdapterInterface;\n private readonly _callbacks: StorageCallbacks;\n\n constructor({ storage, callbacks }: AutomergeStorageWrapperParams) {\n this._storage = storage;\n this._callbacks = callbacks;\n }\n\n async load(key: StorageKey): Promise<Uint8Array | undefined> {\n return this._storage.load(key);\n }\n\n async save(key: StorageKey, value: Uint8Array): Promise<void> {\n await this._callbacks.beforeSave?.(key);\n await this._storage.save(key, value);\n await this._callbacks.afterSave?.(key);\n }\n\n async remove(key: StorageKey): Promise<void> {\n return this._storage.remove(key);\n }\n\n async loadRange(keyPrefix: StorageKey): Promise<Chunk[]> {\n return this._storage.loadRange(keyPrefix);\n }\n\n async removeRange(keyPrefix: StorageKey): Promise<void> {\n return this._storage.removeRange(keyPrefix);\n }\n\n async close() {\n if (this._storage instanceof AutomergeStorageAdapter) {\n return this._storage.close();\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { NetworkAdapter, type Message, type PeerId, cbor } from '@dxos/automerge/automerge-repo';\nimport { Stream } from '@dxos/codec-protobuf';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';\n\ntype ClientSyncState = {\n connected: boolean;\n send: (message: Message) => void;\n disconnect: () => void;\n};\n\n/**\n * Used to replicate with apps running on the same device.\n */\nexport class LocalHostNetworkAdapter extends NetworkAdapter {\n private readonly _peers: Map<PeerId, ClientSyncState> = new Map();\n\n /**\n * Emits `ready` event. That signals to `Repo` that it can start using the adapter.\n */\n ready() {\n // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n this.emit('ready', {\n network: this,\n });\n }\n\n private _connected = new Trigger();\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this._connected.wake();\n // No-op. Client always connects first\n }\n\n override send(message: Message): void {\n const peer = this._peers.get(message.targetId);\n invariant(peer, 'Peer not found.');\n peer.send(message);\n }\n\n async close() {\n this._peers.forEach((peer) => peer.disconnect());\n this.emit('close');\n }\n\n override disconnect(): void {\n // TODO(mykola): `disconnect` is not used anywhere in `Repo` from `@automerge/automerge-repo`. Should we remove it?\n // No-op\n }\n\n syncRepo({ id, syncMessage }: SyncRepoRequest): Stream<SyncRepoResponse> {\n const peerId = this._getPeerId(id);\n\n return new Stream(({ next, close }) => {\n invariant(!this._peers.has(peerId), 'Peer already connected.');\n this._peers.set(peerId, {\n connected: true,\n send: (message) => {\n next({\n syncMessage: cbor.encode(message),\n });\n },\n disconnect: () => {\n this._peers.delete(peerId);\n close();\n this.emit('peer-disconnected', {\n peerId,\n });\n },\n });\n\n this._connected\n .wait({ timeout: 1_000 })\n .then(() => {\n this.emit('peer-candidate', {\n peerMetadata: {},\n peerId,\n });\n })\n .catch((err) => log.catch(err));\n });\n }\n\n async sendSyncMessage({ id, syncMessage }: SyncRepoRequest): Promise<void> {\n await this._connected.wait({ timeout: 1_000 });\n const message = cbor.decode(syncMessage!) as Message;\n this.emit('message', message);\n }\n\n async getHostInfo(): Promise<HostInfo> {\n await this._connected.wait({ timeout: 1_000 });\n invariant(this.peerId, 'Peer id not set.');\n return {\n peerId: this.peerId,\n };\n }\n\n private _getPeerId(id: string): PeerId {\n return id as PeerId;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { NetworkAdapter, type Message, type PeerId, cbor } from '@dxos/automerge/automerge-repo';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type PeerInfo } from '@dxos/protocols/proto/dxos/mesh/teleport/automerge';\nimport { AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';\n\n/**\n * Used to replicate with other peers over the network.\n */\nexport class MeshNetworkAdapter extends NetworkAdapter {\n private readonly _extensions: Map<string, AutomergeReplicator> = new Map();\n private _connected = new Trigger();\n\n /**\n * Emits `ready` event. That signals to `Repo` that it can start using the adapter.\n */\n ready() {\n // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n this.emit('ready', {\n network: this,\n });\n }\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this._connected.wake();\n }\n\n override send(message: Message): void {\n const receiverId = message.targetId;\n const extension = this._extensions.get(receiverId);\n invariant(extension, 'Extension not found.');\n extension.sendSyncMessage({ payload: cbor.encode(message) }).catch((err) => log.catch(err));\n }\n\n override disconnect(): void {\n // No-op\n }\n\n createExtension(): AutomergeReplicator {\n invariant(this.peerId, 'Peer id not set.');\n\n let peerInfo: PeerInfo;\n const extension = new AutomergeReplicator(\n {\n peerId: this.peerId,\n },\n {\n onStartReplication: async (info, remotePeerId /** Teleport ID */) => {\n await this._connected.wait();\n\n // Note: We store only one extension per peer.\n // There can be a case where two connected peers have more than one teleport connection between them\n // and each of them uses different teleport connections to send messages.\n // It works because we receive messages from all teleport connections and Automerge Repo dedup them.\n // TODO(mykola): Use only one teleport connection per peer.\n\n // TODO(dmaretskyi): Critical bug.\n // - two peers get connected via swarm 1\n // - they get connected via swarm 2\n // - swarm 1 gets disconnected\n // - automerge repo thinks that peer 2 got disconnected even though swarm 2 is still active\n\n log('onStartReplication', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });\n if (!this._extensions.has(info.id)) {\n peerInfo = info;\n // TODO(mykola): Fix race condition?\n this._extensions.set(info.id, extension);\n\n log('peer-candidate', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });\n this.emit('peer-candidate', {\n // TODO(mykola): Hack, stop abusing `peerMetadata` field.\n peerMetadata: {\n dxos_deviceKey: remotePeerId.toHex(),\n } as any,\n peerId: info.id as PeerId,\n });\n }\n },\n onSyncMessage: async ({ payload }) => {\n if (!peerInfo) {\n return;\n }\n const message = cbor.decode(payload) as Message;\n // Note: automerge Repo dedup messages.\n this.emit('message', message);\n },\n onClose: async () => {\n if (!peerInfo) {\n return;\n }\n this.emit('peer-disconnected', {\n peerId: peerInfo.id as PeerId,\n });\n this._extensions.delete(peerInfo.id);\n },\n },\n );\n return extension;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { type DocHandle, type AutomergeUrl, type DocumentId, type Repo } from '@dxos/automerge/automerge-repo';\nimport { cancelWithContext, type Context } from '@dxos/context';\nimport { warnAfterTimeout } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { type SpaceState, type SpaceDoc } from './types';\n\ntype SpaceDocumentLinks = SpaceDoc['links'];\n\nexport interface AutomergeDocumentLoader {\n onObjectDocumentLoaded: Event<ObjectDocumentLoaded>;\n\n loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void>;\n loadObjectDocument(objectId: string): void;\n getSpaceRootDocHandle(): DocHandle<SpaceDoc>;\n createDocumentForObject(objectId: string): DocHandle<SpaceDoc>;\n onObjectLinksUpdated(links: SpaceDocumentLinks): void;\n onObjectBoundToDocument(handle: DocHandle<SpaceDoc>, objectId: string): void;\n\n /**\n * @returns objectIds for which we had document handles or were loading one.\n */\n clearHandleReferences(): string[];\n}\n\n/**\n * Manages object <-> docHandle binding and automerge document loading.\n */\nexport class AutomergeDocumentLoaderImpl implements AutomergeDocumentLoader {\n private _spaceRootDocHandle: DocHandle<SpaceDoc> | null = null;\n /**\n * An object id pointer to a handle of the document where the object is stored inline.\n */\n private readonly _objectDocumentHandles = new Map<string, DocHandle<SpaceDoc>>();\n /**\n * If object was requested via loadObjectDocument but root document links weren't updated yet\n * loading will be triggered in onObjectLinksUpdated callback.\n */\n private readonly _objectsPendingDocumentLoad = new Set<string>();\n\n public readonly onObjectDocumentLoaded = new Event<ObjectDocumentLoaded>();\n\n constructor(\n private readonly _spaceKey: PublicKey,\n private readonly _repo: Repo,\n ) {}\n\n public async loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void> {\n if (this._spaceRootDocHandle != null) {\n return;\n }\n if (!spaceState.rootUrl) {\n log.error('Database opened with no rootUrl', { spaceKey: this._spaceKey });\n this._createContextBoundSpaceRootDocument(ctx);\n } else {\n const existingDocHandle = await this._initDocHandle(ctx, spaceState.rootUrl);\n const doc = existingDocHandle.docSync();\n invariant(doc);\n if (doc.access == null) {\n this._initDocAccess(existingDocHandle);\n }\n this._spaceRootDocHandle = existingDocHandle;\n }\n }\n\n public loadObjectDocument(objectId: string) {\n invariant(this._spaceRootDocHandle);\n if (this._objectDocumentHandles.has(objectId) || this._objectsPendingDocumentLoad.has(objectId)) {\n return;\n }\n const spaceRootDoc = this._spaceRootDocHandle.docSync();\n invariant(spaceRootDoc);\n const documentUrl = (spaceRootDoc.links ?? {})[objectId];\n if (documentUrl == null) {\n this._objectsPendingDocumentLoad.add(objectId);\n log.info('loading delayed until object links are initialized', { objectId });\n return;\n }\n this._loadLinkedObjects({ [objectId]: documentUrl });\n }\n\n public onObjectLinksUpdated(links: SpaceDocumentLinks) {\n if (!links) {\n return;\n }\n const linksAwaitingLoad = Object.entries(links).filter(([objectId]) =>\n this._objectsPendingDocumentLoad.has(objectId),\n );\n this._loadLinkedObjects(Object.fromEntries(linksAwaitingLoad));\n linksAwaitingLoad.forEach(([objectId]) => this._objectsPendingDocumentLoad.delete(objectId));\n }\n\n public getSpaceRootDocHandle(): DocHandle<SpaceDoc> {\n invariant(this._spaceRootDocHandle);\n return this._spaceRootDocHandle;\n }\n\n public createDocumentForObject(objectId: string): DocHandle<SpaceDoc> {\n invariant(this._spaceRootDocHandle);\n const spaceDocHandle = this._repo.create<SpaceDoc>();\n this._initDocAccess(spaceDocHandle);\n this.onObjectBoundToDocument(spaceDocHandle, objectId);\n this._spaceRootDocHandle.change((newDoc: SpaceDoc) => {\n newDoc.links ??= {};\n newDoc.links[objectId] = spaceDocHandle.url;\n });\n return spaceDocHandle;\n }\n\n public onObjectBoundToDocument(handle: DocHandle<SpaceDoc>, objectId: string) {\n this._objectDocumentHandles.set(objectId, handle);\n }\n\n public clearHandleReferences(): string[] {\n const objectsWithHandles = [...this._objectDocumentHandles.keys()];\n this._objectDocumentHandles.clear();\n this._spaceRootDocHandle = null;\n return objectsWithHandles;\n }\n\n private _loadLinkedObjects(links: SpaceDocumentLinks) {\n if (!links) {\n return;\n }\n for (const [objectId, automergeUrl] of Object.entries(links)) {\n const logMeta = { objectId, automergeUrl };\n const objectDocumentHandle = this._objectDocumentHandles.get(objectId);\n if (objectDocumentHandle != null && objectDocumentHandle.url !== automergeUrl) {\n log.warn('object already inlined in a different document, ignoring the link', {\n ...logMeta,\n actualDocumentUrl: objectDocumentHandle.url,\n });\n continue;\n }\n if (objectDocumentHandle?.url === automergeUrl) {\n log.warn('object document was already loaded', logMeta);\n continue;\n }\n const handle = this._repo.find<SpaceDoc>(automergeUrl as DocumentId);\n log.debug('document loading triggered', logMeta);\n this._objectDocumentHandles.set(objectId, handle);\n void this._createObjectOnDocumentLoad(handle, objectId);\n }\n }\n\n private async _initDocHandle(ctx: Context, url: string) {\n const docHandle = this._repo.find<SpaceDoc>(url as DocumentId);\n while (true) {\n try {\n await warnAfterTimeout(5_000, 'Automerge root doc load timeout (AutomergeDb)', async () => {\n await cancelWithContext(ctx, docHandle.whenReady()); // TODO(dmaretskyi): Temporary 5s timeout for debugging.\n });\n break;\n } catch (err) {\n if (`${err}`.includes('Timeout')) {\n log.info('wraparound', { id: docHandle.documentId, state: docHandle.state });\n continue;\n }\n\n throw err;\n }\n }\n\n if (docHandle.state === 'unavailable') {\n throw new Error('Automerge document is unavailable');\n }\n\n return docHandle;\n }\n\n private _createContextBoundSpaceRootDocument(ctx: Context) {\n const docHandle = this._repo.create<SpaceDoc>();\n this._spaceRootDocHandle = docHandle;\n ctx.onDispose(() => {\n docHandle.delete();\n this._spaceRootDocHandle = null;\n });\n }\n\n private _initDocAccess(handle: DocHandle<SpaceDoc>) {\n handle.change((newDoc: SpaceDoc) => {\n newDoc.access ??= { spaceKey: this._spaceKey.toHex() };\n newDoc.access.spaceKey = this._spaceKey.toHex();\n });\n }\n\n private async _createObjectOnDocumentLoad(handle: DocHandle<SpaceDoc>, objectId: string) {\n try {\n await handle.doc(['ready']);\n const logMeta = { objectId, docUrl: handle.url };\n if (this.onObjectDocumentLoaded.listenerCount() === 0) {\n log.info('document loaded after all listeners were removed', logMeta);\n return;\n }\n const objectDocHandle = this._objectDocumentHandles.get(objectId);\n if (objectDocHandle?.url !== handle.url) {\n log.warn('object was rebound while a document was loading, discarding handle', logMeta);\n return;\n }\n this.onObjectDocumentLoaded.emit({ handle, objectId });\n } catch (err) {\n const shouldRetryLoading = this.onObjectDocumentLoaded.listenerCount() > 0;\n log.warn('failed to load a document', {\n objectId,\n automergeUrl: handle.url,\n retryLoading: shouldRetryLoading,\n err,\n });\n if (shouldRetryLoading) {\n await this._createObjectOnDocumentLoad(handle, objectId);\n }\n }\n }\n}\n\nexport interface ObjectDocumentLoaded {\n handle: DocHandle<SpaceDoc>;\n objectId: string;\n}\n\nexport interface DocumentChanges {\n createdObjectIds: string[];\n updatedObjectIds: string[];\n objectsToRebind: string[];\n linkedDocuments: {\n [echoId: string]: AutomergeUrl;\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_util", "import_automerge_repo", "import_log", "import_async", "import_invariant", "import_context", "AutomergeStorageAdapter", "constructor", "_directory", "_state", "load", "key", "undefined", "filename", "_getFilename", "file", "getOrCreateFile", "size", "stat", "buffer", "read", "bufferToArray", "save", "data", "write", "arrayToBuffer", "truncate", "length", "flush", "remove", "destroy", "loadRange", "keyPrefix", "entries", "list", "Promise", "all", "filter", "entry", "startsWith", "map", "_getKeyFromFilename", "removeRange", "close", "k", "replaceAll", "join", "split", "AutomergeStorageWrapper", "storage", "callbacks", "_storage", "_callbacks", "value", "beforeSave", "afterSave", "LocalHostNetworkAdapter", "NetworkAdapter", "_peers", "Map", "_connected", "Trigger", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "peer", "get", "targetId", "invariant", "forEach", "disconnect", "syncRepo", "id", "syncMessage", "_getPeerId", "Stream", "next", "has", "set", "connected", "cbor", "encode", "delete", "wait", "timeout", "then", "peerMetadata", "catch", "err", "log", "sendSyncMessage", "decode", "getHostInfo", "MeshNetworkAdapter", "_extensions", "receiverId", "extension", "payload", "createExtension", "peerInfo", "AutomergeReplicator", "onStartReplication", "info", "remotePeerId", "thisPeerId", "toHex", "dxos_deviceKey", "onSyncMessage", "onClose", "AutomergeHost", "directory", "metadata", "_ctx", "Context", "ComplexMap", "PublicKey", "hash", "_updatingMetadata", "_requestedDocs", "Set", "_metadata", "_meshNetwork", "_clientNetwork", "type", "StorageType", "IDB", "IndexedDBStorageAdapter", "path", "params", "_beforeSave", "_peerId", "random", "_repo", "Repo", "sharePolicy", "documentId", "doc", "handles", "docSync", "isRequested", "spaceKey", "getSpaceKeyFromDoc", "authorizedDevices", "_authorizedDevices", "from", "deviceKeyHex", "repo", "peerMetadataByPeerId", "deviceKey", "isAuthorized", "localPeer", "remotePeer", "listener", "handle", "_onDocument", "on", "onDispose", "off", "event", "_onUpdate", "objectIds", "getInlineChanges", "heads", "getHeads", "lastAvailableHash", "encodedIds", "objectId", "idCodec", "idToLastHash", "markingDirtyPromise", "markDirty", "disposed", "_automergeDocs", "mapValues", "state", "hasDoc", "automerge", "Object", "keys", "_automergePeers", "peers", "dispose", "request", "authorizeDevice", "defaultMap", "ComplexSet", "add", "trace", "depth", "resource", "inlineChangedObjectIds", "patches", "rawSpaceKey", "access", "experimental_spaceKey", "String", "AutomergeDocumentLoaderImpl", "_spaceKey", "_spaceRootDocHandle", "_objectDocumentHandles", "_objectsPendingDocumentLoad", "onObjectDocumentLoaded", "Event", "loadSpaceRootDocHandle", "ctx", "spaceState", "rootUrl", "error", "_createContextBoundSpaceRootDocument", "existingDocHandle", "_initDocHandle", "_initDocAccess", "loadObjectDocument", "spaceRootDoc", "documentUrl", "links", "_loadLinkedObjects", "onObjectLinksUpdated", "linksAwaitingLoad", "fromEntries", "getSpaceRootDocHandle", "createDocumentForObject", "spaceDocHandle", "create", "onObjectBoundToDocument", "change", "newDoc", "url", "clearHandleReferences", "objectsWithHandles", "clear", "automergeUrl", "logMeta", "objectDocumentHandle", "warn", "actualDocumentUrl", "find", "debug", "_createObjectOnDocumentLoad", "docHandle", "warnAfterTimeout", "cancelWithContext", "whenReady", "includes", "Error", "docUrl", "listenerCount", "objectDocHandle", "shouldRetryLoading", "retryLoading"]
3
+ "sources": ["../../../src/automerge/automerge-host.ts", "../../../src/automerge/automerge-storage-adapter.ts", "../../../src/automerge/automerge-storage\u2013wrapper.ts", "../../../src/automerge/local-host-network-adapter.ts", "../../../src/automerge/mesh-network-adapter.ts", "../../../src/automerge/automerge-doc-loader.ts", "../../../src/automerge/reference.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { next as automerge, getHeads } from '@dxos/automerge/automerge';\nimport {\n Repo,\n type PeerId,\n type DocumentId,\n type StorageKey,\n type DocHandle,\n type DocHandleChangePayload,\n} from '@dxos/automerge/automerge-repo';\nimport { IndexedDBStorageAdapter } from '@dxos/automerge/automerge-repo-storage-indexeddb';\nimport { type Stream } from '@dxos/codec-protobuf';\nimport { Context } from '@dxos/context';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { idCodec } from '@dxos/protocols';\nimport {\n type FlushRequest,\n type HostInfo,\n type SyncRepoRequest,\n type SyncRepoResponse,\n} from '@dxos/protocols/proto/dxos/echo/service';\nimport { StorageType, type Directory } from '@dxos/random-access-storage';\nimport { type AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';\nimport { trace } from '@dxos/tracing';\nimport { ComplexMap, ComplexSet, defaultMap, mapValues } from '@dxos/util';\n\nimport { AutomergeStorageAdapter } from './automerge-storage-adapter';\nimport { AutomergeStorageWrapper } from './automerge-storage–wrapper';\nimport { LocalHostNetworkAdapter } from './local-host-network-adapter';\nimport { MeshNetworkAdapter } from './mesh-network-adapter';\n\nexport type { DocumentId };\n\nexport interface MetadataMethods {\n markDirty(idToLastHash: Map<string, string>): Promise<void>;\n}\n\nexport type AutomergeHostParams = {\n directory: Directory;\n metadata?: MetadataMethods;\n};\n\n@trace.resource()\nexport class AutomergeHost {\n private readonly _ctx = new Context();\n private readonly _repo: Repo;\n private readonly _meshNetwork: MeshNetworkAdapter;\n private readonly _clientNetwork: LocalHostNetworkAdapter;\n private readonly _storage: AutomergeStorageWrapper;\n\n @trace.info()\n private readonly _peerId: string;\n\n /**\n * spaceKey -> deviceKey[]\n */\n private readonly _authorizedDevices = new ComplexMap<PublicKey, ComplexSet<PublicKey>>(PublicKey.hash);\n\n private readonly _updatingMetadata = new Map<string, Promise<void>>();\n private readonly _metadata?: MetadataMethods;\n\n public _requestedDocs = new Set<string>();\n\n constructor({ directory, metadata }: AutomergeHostParams) {\n this._metadata = metadata;\n this._meshNetwork = new MeshNetworkAdapter();\n this._clientNetwork = new LocalHostNetworkAdapter();\n\n this._storage = new AutomergeStorageWrapper({\n storage:\n // TODO(mykola): Delete specific handling of IDB storage.\n directory.type === StorageType.IDB\n ? new IndexedDBStorageAdapter(directory.path, 'data')\n : new AutomergeStorageAdapter(directory),\n callbacks: { beforeSave: (params) => this._beforeSave(params) },\n });\n this._peerId = `host-${PublicKey.random().toHex()}` as PeerId;\n this._repo = new Repo({\n peerId: this._peerId as PeerId,\n network: [this._clientNetwork, this._meshNetwork],\n storage: this._storage,\n\n // TODO(dmaretskyi): Share based on HALO permissions and space affinity.\n // Hosts, running in the worker, don't share documents unless requested by other peers.\n sharePolicy: async (peerId /* device key */, documentId /* space key */) => {\n if (peerId.startsWith('client-')) {\n return false; // Only send docs to clients if they are requested.\n }\n\n if (!documentId) {\n return false;\n }\n\n const doc = this._repo.handles[documentId]?.docSync();\n if (!doc) {\n const isRequested = this._requestedDocs.has(`automerge:${documentId}`);\n log('doc share policy check', { peerId, documentId, isRequested });\n return isRequested;\n }\n\n try {\n const spaceKey = getSpaceKeyFromDoc(doc);\n if (!spaceKey) {\n log('space key not found for share policy check', { peerId, documentId });\n return false;\n }\n\n const authorizedDevices = this._authorizedDevices.get(PublicKey.from(spaceKey));\n\n // TODO(mykola): Hack, stop abusing `peerMetadata` field.\n const deviceKeyHex = (this.repo.peerMetadataByPeerId[peerId] as any)?.dxos_deviceKey;\n if (!deviceKeyHex) {\n log('device key not found for share policy check', { peerId, documentId });\n return false;\n }\n const deviceKey = PublicKey.from(deviceKeyHex);\n\n const isAuthorized = authorizedDevices?.has(deviceKey) ?? false;\n log('share policy check', {\n localPeer: this._peerId,\n remotePeer: peerId,\n documentId,\n deviceKey,\n spaceKey,\n isAuthorized,\n });\n return isAuthorized;\n } catch (err) {\n log.catch(err);\n return false;\n }\n },\n });\n this._clientNetwork.ready();\n this._meshNetwork.ready();\n\n {\n const listener = ({ handle }: { handle: DocHandle<any> }) => this._onDocument(handle);\n this._repo.on('document', listener);\n this._ctx.onDispose(() => {\n this._repo.off('document', listener);\n Object.values(this._repo.handles).forEach((handle) => handle.off('change'));\n });\n }\n }\n\n get repo(): Repo {\n return this._repo;\n }\n\n private async _beforeSave(path: StorageKey) {\n const id = path[0];\n if (this._updatingMetadata.has(id)) {\n return this._updatingMetadata.get(id);\n }\n }\n\n private _onDocument(handle: DocHandle<any>) {\n const listener = (event: DocHandleChangePayload<any>) => this._onUpdate(event);\n handle.on('change', listener);\n }\n\n private _onUpdate(event: DocHandleChangePayload<any>) {\n if (this._metadata == null) {\n return;\n }\n\n const objectIds = getInlineChanges(event);\n if (objectIds.length === 0) {\n return;\n }\n\n const heads = getHeads(event.doc);\n const lastAvailableHash = heads.join('');\n if (!lastAvailableHash) {\n return;\n }\n\n const encodedIds = objectIds.map((objectId) => idCodec.encode({ documentId: event.handle.documentId, objectId }));\n const idToLastHash = new Map(encodedIds.map((id) => [id, lastAvailableHash]));\n const markingDirtyPromise = this._metadata\n .markDirty(idToLastHash)\n .then(() => {\n this._updatingMetadata.delete(event.handle.documentId);\n })\n .catch((err: Error) => {\n this._ctx.disposed && log.catch(err);\n });\n this._updatingMetadata.set(event.handle.documentId, markingDirtyPromise);\n }\n\n @trace.info({ depth: null })\n private _automergeDocs() {\n return mapValues(this._repo.handles, (handle) => ({\n state: handle.state,\n hasDoc: !!handle.docSync(),\n heads: handle.docSync() ? automerge.getHeads(handle.docSync()) : null,\n data:\n handle.docSync() &&\n mapValues(handle.docSync(), (value, key) => {\n try {\n switch (key) {\n case 'access':\n case 'links':\n return value;\n case 'objects':\n return Object.keys(value as any);\n default:\n return `${value}`;\n }\n } catch (err) {\n return `${err}`;\n }\n }),\n }));\n }\n\n @trace.info({ depth: null })\n private _automergePeers() {\n return this._repo.peers;\n }\n\n async close() {\n await this._storage.close();\n await this._clientNetwork.close();\n await this._ctx.dispose();\n }\n\n //\n // Methods for client-services.\n //\n\n async flush({ documentIds }: FlushRequest): Promise<void> {\n // Note: Wait for all requested documents to be loaded/synced from thin-client.\n await Promise.all(documentIds?.map((id) => this._repo.find(id as DocumentId).whenReady()) ?? []);\n await this._repo.flush(documentIds as DocumentId[]);\n }\n\n syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse> {\n return this._clientNetwork.syncRepo(request);\n }\n\n sendSyncMessage(request: SyncRepoRequest): Promise<void> {\n return this._clientNetwork.sendSyncMessage(request);\n }\n\n async getHostInfo(): Promise<HostInfo> {\n return this._clientNetwork.getHostInfo();\n }\n\n //\n // Mesh replication.\n //\n\n createExtension(): AutomergeReplicator {\n return this._meshNetwork.createExtension();\n }\n\n authorizeDevice(spaceKey: PublicKey, deviceKey: PublicKey) {\n log('authorizeDevice', { spaceKey, deviceKey });\n defaultMap(this._authorizedDevices, spaceKey, () => new ComplexSet(PublicKey.hash)).add(deviceKey);\n }\n}\n\n// TODO(mykola): Reconcile with `getInlineAndLinkChanges` in AutomergeDB.\nconst getInlineChanges = (event: DocHandleChangePayload<any>) => {\n const inlineChangedObjectIds = new Set<string>();\n for (const { path } of event.patches) {\n if (path.length < 2) {\n continue;\n }\n switch (path[0]) {\n case 'objects':\n if (path.length >= 2) {\n inlineChangedObjectIds.add(path[1]);\n }\n break;\n }\n }\n return [...inlineChangedObjectIds];\n};\n\nexport const getSpaceKeyFromDoc = (doc: any): string | null => {\n // experimental_spaceKey is set on old documents, new ones are created with doc.access.spaceKey\n const rawSpaceKey = doc.access?.spaceKey ?? doc.experimental_spaceKey;\n if (rawSpaceKey == null) {\n return null;\n }\n\n return String(rawSpaceKey);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Chunk, type StorageKey, type StorageAdapterInterface } from '@dxos/automerge/automerge-repo';\nimport { type Directory } from '@dxos/random-access-storage';\nimport { arrayToBuffer, bufferToArray } from '@dxos/util';\n\nexport class AutomergeStorageAdapter implements StorageAdapterInterface {\n // TODO(mykola): Hack for restricting automerge Repo to access storage if Host is `closed`.\n // Automerge Repo do not have any lifetime management.\n private _state: 'opened' | 'closed' = 'opened';\n\n constructor(private readonly _directory: Directory) {}\n\n async load(key: StorageKey): Promise<Uint8Array | undefined> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n const { size } = await file.stat();\n if (!size || size === 0) {\n return undefined;\n }\n const buffer = await file.read(0, size);\n return bufferToArray(buffer);\n }\n\n async save(key: StorageKey, data: Uint8Array): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n await file.write(0, arrayToBuffer(data));\n await file.truncate?.(data.length);\n\n await file.flush?.();\n }\n\n async remove(key: StorageKey): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n // TODO(dmaretskyi): Better deletion.\n const filename = this._getFilename(key);\n const file = this._directory.getOrCreateFile(filename);\n await file.destroy();\n }\n\n async loadRange(keyPrefix: StorageKey): Promise<Chunk[]> {\n if (this._state !== 'opened') {\n return [];\n }\n const filename = this._getFilename(keyPrefix);\n const entries = await this._directory.list();\n return Promise.all(\n entries\n .filter((entry) => entry.startsWith(filename))\n .map(async (entry): Promise<Chunk> => {\n const file = this._directory.getOrCreateFile(entry);\n const { size } = await file.stat();\n const buffer = await file.read(0, size);\n return {\n key: this._getKeyFromFilename(entry),\n data: bufferToArray(buffer),\n };\n }),\n );\n }\n\n async removeRange(keyPrefix: StorageKey): Promise<void> {\n if (this._state !== 'opened') {\n return undefined;\n }\n const filename = this._getFilename(keyPrefix);\n const entries = await this._directory.list();\n await Promise.all(\n entries\n .filter((entry) => entry.startsWith(filename))\n .map(async (entry): Promise<void> => {\n const file = this._directory.getOrCreateFile(entry);\n await file.destroy();\n }),\n );\n }\n\n async close(): Promise<void> {\n this._state = 'closed';\n }\n\n private _getFilename(key: StorageKey): string {\n return key.map((k) => k.replaceAll('%', '%25').replaceAll('-', '%2D')).join('-');\n }\n\n private _getKeyFromFilename(filename: string): StorageKey {\n return filename.split('-').map((k) => k.replaceAll('%2D', '-').replaceAll('%25', '%'));\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type StorageKey, type Chunk, type StorageAdapterInterface } from '@dxos/automerge/automerge-repo';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { AutomergeStorageAdapter } from './automerge-storage-adapter';\n\nexport type StorageCallbacks = {\n beforeSave?: (path: string[]) => MaybePromise<void>;\n afterSave?: (path: string[]) => MaybePromise<void>;\n};\n\nexport type AutomergeStorageWrapperParams = {\n storage: StorageAdapterInterface;\n callbacks: StorageCallbacks;\n};\n\n/**\n * Wrapper for automerge storage that adds callback on save.\n */\nexport class AutomergeStorageWrapper implements StorageAdapterInterface {\n private readonly _storage: StorageAdapterInterface;\n private readonly _callbacks: StorageCallbacks;\n\n constructor({ storage, callbacks }: AutomergeStorageWrapperParams) {\n this._storage = storage;\n this._callbacks = callbacks;\n }\n\n async load(key: StorageKey): Promise<Uint8Array | undefined> {\n return this._storage.load(key);\n }\n\n async save(key: StorageKey, value: Uint8Array): Promise<void> {\n await this._callbacks.beforeSave?.(key);\n await this._storage.save(key, value);\n await this._callbacks.afterSave?.(key);\n }\n\n async remove(key: StorageKey): Promise<void> {\n return this._storage.remove(key);\n }\n\n async loadRange(keyPrefix: StorageKey): Promise<Chunk[]> {\n return this._storage.loadRange(keyPrefix);\n }\n\n async removeRange(keyPrefix: StorageKey): Promise<void> {\n return this._storage.removeRange(keyPrefix);\n }\n\n async close() {\n if (this._storage instanceof AutomergeStorageAdapter) {\n return this._storage.close();\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { NetworkAdapter, type Message, type PeerId, cbor } from '@dxos/automerge/automerge-repo';\nimport { Stream } from '@dxos/codec-protobuf';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type HostInfo, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';\n\ntype ClientSyncState = {\n connected: boolean;\n send: (message: Message) => void;\n disconnect: () => void;\n};\n\n/**\n * Used to replicate with apps running on the same device.\n */\nexport class LocalHostNetworkAdapter extends NetworkAdapter {\n private readonly _peers: Map<PeerId, ClientSyncState> = new Map();\n\n /**\n * Emits `ready` event. That signals to `Repo` that it can start using the adapter.\n */\n ready() {\n // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n this.emit('ready', {\n network: this,\n });\n }\n\n private _connected = new Trigger();\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this._connected.wake();\n // No-op. Client always connects first\n }\n\n override send(message: Message): void {\n const peer = this._peers.get(message.targetId);\n invariant(peer, 'Peer not found.');\n peer.send(message);\n }\n\n async close() {\n this._peers.forEach((peer) => peer.disconnect());\n this.emit('close');\n }\n\n override disconnect(): void {\n // TODO(mykola): `disconnect` is not used anywhere in `Repo` from `@automerge/automerge-repo`. Should we remove it?\n // No-op\n }\n\n syncRepo({ id, syncMessage }: SyncRepoRequest): Stream<SyncRepoResponse> {\n const peerId = this._getPeerId(id);\n\n return new Stream(({ next, close }) => {\n invariant(!this._peers.has(peerId), 'Peer already connected.');\n this._peers.set(peerId, {\n connected: true,\n send: (message) => {\n next({\n syncMessage: cbor.encode(message),\n });\n },\n disconnect: () => {\n this._peers.delete(peerId);\n close();\n this.emit('peer-disconnected', {\n peerId,\n });\n },\n });\n\n this._connected\n .wait({ timeout: 1_000 })\n .then(() => {\n this.emit('peer-candidate', {\n peerMetadata: {},\n peerId,\n });\n })\n .catch((err) => log.catch(err));\n });\n }\n\n async sendSyncMessage({ id, syncMessage }: SyncRepoRequest): Promise<void> {\n await this._connected.wait({ timeout: 1_000 });\n const message = cbor.decode(syncMessage!) as Message;\n this.emit('message', message);\n }\n\n async getHostInfo(): Promise<HostInfo> {\n await this._connected.wait({ timeout: 1_000 });\n invariant(this.peerId, 'Peer id not set.');\n return {\n peerId: this.peerId,\n };\n }\n\n private _getPeerId(id: string): PeerId {\n return id as PeerId;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { NetworkAdapter, type Message, type PeerId, cbor } from '@dxos/automerge/automerge-repo';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type PeerInfo } from '@dxos/protocols/proto/dxos/mesh/teleport/automerge';\nimport { AutomergeReplicator } from '@dxos/teleport-extension-automerge-replicator';\n\n/**\n * Used to replicate with other peers over the network.\n */\nexport class MeshNetworkAdapter extends NetworkAdapter {\n private readonly _extensions: Map<string, AutomergeReplicator> = new Map();\n private _connected = new Trigger();\n\n /**\n * Emits `ready` event. That signals to `Repo` that it can start using the adapter.\n */\n ready() {\n // NOTE: Emitting `ready` event in NetworkAdapter`s constructor causes a race condition\n // because `Repo` waits for `ready` event (which it never receives) before it starts using the adapter.\n this.emit('ready', {\n network: this,\n });\n }\n\n override connect(peerId: PeerId): void {\n this.peerId = peerId;\n this._connected.wake();\n }\n\n override send(message: Message): void {\n const receiverId = message.targetId;\n const extension = this._extensions.get(receiverId);\n invariant(extension, 'Extension not found.');\n extension.sendSyncMessage({ payload: cbor.encode(message) }).catch((err) => log.catch(err));\n }\n\n override disconnect(): void {\n // No-op\n }\n\n createExtension(): AutomergeReplicator {\n invariant(this.peerId, 'Peer id not set.');\n\n let peerInfo: PeerInfo;\n const extension = new AutomergeReplicator(\n {\n peerId: this.peerId,\n },\n {\n onStartReplication: async (info, remotePeerId /** Teleport ID */) => {\n await this._connected.wait();\n\n // Note: We store only one extension per peer.\n // There can be a case where two connected peers have more than one teleport connection between them\n // and each of them uses different teleport connections to send messages.\n // It works because we receive messages from all teleport connections and Automerge Repo dedup them.\n // TODO(mykola): Use only one teleport connection per peer.\n\n // TODO(dmaretskyi): Critical bug.\n // - two peers get connected via swarm 1\n // - they get connected via swarm 2\n // - swarm 1 gets disconnected\n // - automerge repo thinks that peer 2 got disconnected even though swarm 2 is still active\n\n log('onStartReplication', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });\n if (!this._extensions.has(info.id)) {\n peerInfo = info;\n // TODO(mykola): Fix race condition?\n this._extensions.set(info.id, extension);\n\n log('peer-candidate', { id: info.id, thisPeerId: this.peerId, remotePeerId: remotePeerId.toHex() });\n this.emit('peer-candidate', {\n // TODO(mykola): Hack, stop abusing `peerMetadata` field.\n peerMetadata: {\n dxos_deviceKey: remotePeerId.toHex(),\n } as any,\n peerId: info.id as PeerId,\n });\n }\n },\n onSyncMessage: async ({ payload }) => {\n if (!peerInfo) {\n return;\n }\n const message = cbor.decode(payload) as Message;\n // Note: automerge Repo dedup messages.\n this.emit('message', message);\n },\n onClose: async () => {\n if (!peerInfo) {\n return;\n }\n this.emit('peer-disconnected', {\n peerId: peerInfo.id as PeerId,\n });\n this._extensions.delete(peerInfo.id);\n },\n },\n );\n return extension;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { type DocHandle, type AutomergeUrl, type DocumentId, type Repo } from '@dxos/automerge/automerge-repo';\nimport { cancelWithContext, type Context } from '@dxos/context';\nimport { warnAfterTimeout } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { type SpaceState, type SpaceDoc } from './types';\n\ntype SpaceDocumentLinks = SpaceDoc['links'];\n\nexport interface AutomergeDocumentLoader {\n onObjectDocumentLoaded: Event<ObjectDocumentLoaded>;\n\n getAllHandles(): DocHandle<SpaceDoc>[];\n\n loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void>;\n loadObjectDocument(objectId: string): void;\n getSpaceRootDocHandle(): DocHandle<SpaceDoc>;\n createDocumentForObject(objectId: string): DocHandle<SpaceDoc>;\n onObjectLinksUpdated(links: SpaceDocumentLinks): void;\n onObjectBoundToDocument(handle: DocHandle<SpaceDoc>, objectId: string): void;\n\n /**\n * @returns objectIds for which we had document handles or were loading one.\n */\n clearHandleReferences(): string[];\n}\n\n/**\n * Manages object <-> docHandle binding and automerge document loading.\n */\nexport class AutomergeDocumentLoaderImpl implements AutomergeDocumentLoader {\n private _spaceRootDocHandle: DocHandle<SpaceDoc> | null = null;\n /**\n * An object id pointer to a handle of the document where the object is stored inline.\n */\n private readonly _objectDocumentHandles = new Map<string, DocHandle<SpaceDoc>>();\n /**\n * If object was requested via loadObjectDocument but root document links weren't updated yet\n * loading will be triggered in onObjectLinksUpdated callback.\n */\n private readonly _objectsPendingDocumentLoad = new Set<string>();\n\n public readonly onObjectDocumentLoaded = new Event<ObjectDocumentLoaded>();\n\n constructor(\n private readonly _spaceKey: PublicKey,\n private readonly _repo: Repo,\n ) {}\n\n getAllHandles(): DocHandle<SpaceDoc>[] {\n return [...new Set(this._objectDocumentHandles.values())];\n }\n\n public async loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void> {\n if (this._spaceRootDocHandle != null) {\n return;\n }\n if (!spaceState.rootUrl) {\n log.error('Database opened with no rootUrl', { spaceKey: this._spaceKey });\n this._createContextBoundSpaceRootDocument(ctx);\n } else {\n const existingDocHandle = await this._initDocHandle(ctx, spaceState.rootUrl);\n const doc = existingDocHandle.docSync();\n invariant(doc);\n if (doc.access == null) {\n this._initDocAccess(existingDocHandle);\n }\n this._spaceRootDocHandle = existingDocHandle;\n }\n }\n\n public loadObjectDocument(objectId: string) {\n invariant(this._spaceRootDocHandle);\n if (this._objectDocumentHandles.has(objectId) || this._objectsPendingDocumentLoad.has(objectId)) {\n return;\n }\n const spaceRootDoc = this._spaceRootDocHandle.docSync();\n invariant(spaceRootDoc);\n const documentUrl = (spaceRootDoc.links ?? {})[objectId];\n if (documentUrl == null) {\n this._objectsPendingDocumentLoad.add(objectId);\n log.info('loading delayed until object links are initialized', { objectId });\n return;\n }\n this._loadLinkedObjects({ [objectId]: documentUrl });\n }\n\n public onObjectLinksUpdated(links: SpaceDocumentLinks) {\n if (!links) {\n return;\n }\n const linksAwaitingLoad = Object.entries(links).filter(([objectId]) =>\n this._objectsPendingDocumentLoad.has(objectId),\n );\n this._loadLinkedObjects(Object.fromEntries(linksAwaitingLoad));\n linksAwaitingLoad.forEach(([objectId]) => this._objectsPendingDocumentLoad.delete(objectId));\n }\n\n public getSpaceRootDocHandle(): DocHandle<SpaceDoc> {\n invariant(this._spaceRootDocHandle);\n return this._spaceRootDocHandle;\n }\n\n public createDocumentForObject(objectId: string): DocHandle<SpaceDoc> {\n invariant(this._spaceRootDocHandle);\n const spaceDocHandle = this._repo.create<SpaceDoc>();\n this._initDocAccess(spaceDocHandle);\n this.onObjectBoundToDocument(spaceDocHandle, objectId);\n this._spaceRootDocHandle.change((newDoc: SpaceDoc) => {\n newDoc.links ??= {};\n newDoc.links[objectId] = spaceDocHandle.url;\n });\n return spaceDocHandle;\n }\n\n public onObjectBoundToDocument(handle: DocHandle<SpaceDoc>, objectId: string) {\n this._objectDocumentHandles.set(objectId, handle);\n }\n\n public clearHandleReferences(): string[] {\n const objectsWithHandles = [...this._objectDocumentHandles.keys()];\n this._objectDocumentHandles.clear();\n this._spaceRootDocHandle = null;\n return objectsWithHandles;\n }\n\n private _loadLinkedObjects(links: SpaceDocumentLinks) {\n if (!links) {\n return;\n }\n for (const [objectId, automergeUrl] of Object.entries(links)) {\n const logMeta = { objectId, automergeUrl };\n const objectDocumentHandle = this._objectDocumentHandles.get(objectId);\n if (objectDocumentHandle != null && objectDocumentHandle.url !== automergeUrl) {\n log.warn('object already inlined in a different document, ignoring the link', {\n ...logMeta,\n actualDocumentUrl: objectDocumentHandle.url,\n });\n continue;\n }\n if (objectDocumentHandle?.url === automergeUrl) {\n log.warn('object document was already loaded', logMeta);\n continue;\n }\n const handle = this._repo.find<SpaceDoc>(automergeUrl as DocumentId);\n log.debug('document loading triggered', logMeta);\n this._objectDocumentHandles.set(objectId, handle);\n void this._createObjectOnDocumentLoad(handle, objectId);\n }\n }\n\n private async _initDocHandle(ctx: Context, url: string) {\n const docHandle = this._repo.find<SpaceDoc>(url as DocumentId);\n while (true) {\n try {\n await warnAfterTimeout(5_000, 'Automerge root doc load timeout (AutomergeDb)', async () => {\n await cancelWithContext(ctx, docHandle.whenReady()); // TODO(dmaretskyi): Temporary 5s timeout for debugging.\n });\n break;\n } catch (err) {\n if (`${err}`.includes('Timeout')) {\n log.info('wraparound', { id: docHandle.documentId, state: docHandle.state });\n continue;\n }\n\n throw err;\n }\n }\n\n if (docHandle.state === 'unavailable') {\n throw new Error('Automerge document is unavailable');\n }\n\n return docHandle;\n }\n\n private _createContextBoundSpaceRootDocument(ctx: Context) {\n const docHandle = this._repo.create<SpaceDoc>();\n this._spaceRootDocHandle = docHandle;\n ctx.onDispose(() => {\n docHandle.delete();\n this._spaceRootDocHandle = null;\n });\n }\n\n private _initDocAccess(handle: DocHandle<SpaceDoc>) {\n handle.change((newDoc: SpaceDoc) => {\n newDoc.access ??= { spaceKey: this._spaceKey.toHex() };\n newDoc.access.spaceKey = this._spaceKey.toHex();\n });\n }\n\n private async _createObjectOnDocumentLoad(handle: DocHandle<SpaceDoc>, objectId: string) {\n try {\n await handle.doc(['ready']);\n const logMeta = { objectId, docUrl: handle.url };\n if (this.onObjectDocumentLoaded.listenerCount() === 0) {\n log.info('document loaded after all listeners were removed', logMeta);\n return;\n }\n const objectDocHandle = this._objectDocumentHandles.get(objectId);\n if (objectDocHandle?.url !== handle.url) {\n log.warn('object was rebound while a document was loading, discarding handle', logMeta);\n return;\n }\n this.onObjectDocumentLoaded.emit({ handle, objectId });\n } catch (err) {\n const shouldRetryLoading = this.onObjectDocumentLoaded.listenerCount() > 0;\n log.warn('failed to load a document', {\n objectId,\n automergeUrl: handle.url,\n retryLoading: shouldRetryLoading,\n err,\n });\n if (shouldRetryLoading) {\n await this._createObjectOnDocumentLoad(handle, objectId);\n }\n }\n }\n}\n\nexport interface ObjectDocumentLoaded {\n handle: DocHandle<SpaceDoc>;\n objectId: string;\n}\n\nexport interface DocumentChanges {\n createdObjectIds: string[];\n updatedObjectIds: string[];\n objectsToRebind: string[];\n linkedDocuments: {\n [echoId: string]: AutomergeUrl;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Reference } from '@dxos/echo-db';\n\nexport const REFERENCE_TYPE_TAG = 'dxos.echo.model.document.Reference';\n\n/**\n * Reference as it is stored in Automerge document.\n */\nexport type EncodedReferenceObject = {\n '@type': typeof REFERENCE_TYPE_TAG;\n itemId: string | null;\n protocol: string | null;\n host: string | null;\n};\n\nexport const encodeReference = (reference: Reference): EncodedReferenceObject => ({\n '@type': REFERENCE_TYPE_TAG,\n // NOTE: Automerge do not support undefined values, so we need to use null instead.\n itemId: reference.itemId ?? null,\n protocol: reference.protocol ?? null,\n host: reference.host ?? null,\n});\n\nexport const decodeReference = (value: any) =>\n new Reference(value.itemId, value.protocol ?? undefined, value.host ?? undefined);\n\nexport const isEncodedReferenceObject = (value: any): value is EncodedReferenceObject =>\n typeof value === 'object' && value !== null && value['@type'] === REFERENCE_TYPE_TAG;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_util", "import_automerge_repo", "import_log", "import_async", "import_invariant", "import_context", "AutomergeStorageAdapter", "constructor", "_directory", "_state", "load", "key", "undefined", "filename", "_getFilename", "file", "getOrCreateFile", "size", "stat", "buffer", "read", "bufferToArray", "save", "data", "write", "arrayToBuffer", "truncate", "length", "flush", "remove", "destroy", "loadRange", "keyPrefix", "entries", "list", "Promise", "all", "filter", "entry", "startsWith", "map", "_getKeyFromFilename", "removeRange", "close", "k", "replaceAll", "join", "split", "AutomergeStorageWrapper", "storage", "callbacks", "_storage", "_callbacks", "value", "beforeSave", "afterSave", "LocalHostNetworkAdapter", "NetworkAdapter", "_peers", "Map", "_connected", "Trigger", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "peer", "get", "targetId", "invariant", "forEach", "disconnect", "syncRepo", "id", "syncMessage", "_getPeerId", "Stream", "next", "has", "set", "connected", "cbor", "encode", "delete", "wait", "timeout", "then", "peerMetadata", "catch", "err", "log", "sendSyncMessage", "decode", "getHostInfo", "MeshNetworkAdapter", "_extensions", "receiverId", "extension", "payload", "createExtension", "peerInfo", "AutomergeReplicator", "onStartReplication", "info", "remotePeerId", "thisPeerId", "toHex", "dxos_deviceKey", "onSyncMessage", "onClose", "AutomergeHost", "directory", "metadata", "_ctx", "Context", "ComplexMap", "PublicKey", "hash", "_updatingMetadata", "_requestedDocs", "Set", "_metadata", "_meshNetwork", "_clientNetwork", "type", "StorageType", "IDB", "IndexedDBStorageAdapter", "path", "params", "_beforeSave", "_peerId", "random", "_repo", "Repo", "sharePolicy", "documentId", "doc", "handles", "docSync", "isRequested", "spaceKey", "getSpaceKeyFromDoc", "authorizedDevices", "_authorizedDevices", "from", "deviceKeyHex", "repo", "peerMetadataByPeerId", "deviceKey", "isAuthorized", "localPeer", "remotePeer", "listener", "handle", "_onDocument", "on", "onDispose", "off", "Object", "values", "event", "_onUpdate", "objectIds", "getInlineChanges", "heads", "getHeads", "lastAvailableHash", "encodedIds", "objectId", "idCodec", "idToLastHash", "markingDirtyPromise", "markDirty", "disposed", "_automergeDocs", "mapValues", "state", "hasDoc", "automerge", "keys", "_automergePeers", "peers", "dispose", "documentIds", "find", "whenReady", "request", "authorizeDevice", "defaultMap", "ComplexSet", "add", "trace", "depth", "resource", "inlineChangedObjectIds", "patches", "rawSpaceKey", "access", "experimental_spaceKey", "String", "AutomergeDocumentLoaderImpl", "_spaceKey", "_spaceRootDocHandle", "_objectDocumentHandles", "_objectsPendingDocumentLoad", "onObjectDocumentLoaded", "Event", "getAllHandles", "loadSpaceRootDocHandle", "ctx", "spaceState", "rootUrl", "error", "_createContextBoundSpaceRootDocument", "existingDocHandle", "_initDocHandle", "_initDocAccess", "loadObjectDocument", "spaceRootDoc", "documentUrl", "links", "_loadLinkedObjects", "onObjectLinksUpdated", "linksAwaitingLoad", "fromEntries", "getSpaceRootDocHandle", "createDocumentForObject", "spaceDocHandle", "create", "onObjectBoundToDocument", "change", "newDoc", "url", "clearHandleReferences", "objectsWithHandles", "clear", "automergeUrl", "logMeta", "objectDocumentHandle", "warn", "actualDocumentUrl", "debug", "_createObjectOnDocumentLoad", "docHandle", "warnAfterTimeout", "cancelWithContext", "includes", "Error", "docUrl", "listenerCount", "objectDocHandle", "shouldRetryLoading", "retryLoading", "REFERENCE_TYPE_TAG", "encodeReference", "reference", "itemId", "protocol", "host", "decodeReference", "Reference", "isEncodedReferenceObject"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/core/echo/echo-pipeline/src/common/codec.ts":{"bytes":1650,"imports":[{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/common/feeds.ts":{"bytes":2138,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/common/index.ts":{"bytes":553,"imports":[{"path":"packages/core/echo/echo-pipeline/src/common/codec.ts","kind":"import-statement","original":"./codec"},{"path":"packages/core/echo/echo-pipeline/src/common/feeds.ts","kind":"import-statement","original":"./feeds"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts":{"bytes":6376,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts":{"bytes":6075,"imports":[{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytes":3733,"imports":[],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/index.ts":{"bytes":706,"imports":[{"path":"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts","kind":"import-statement","original":"./snapshot-manager"},{"path":"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts","kind":"import-statement","original":"./snapshot-store"},{"path":"packages/core/echo/echo-pipeline/src/db-host/data-service.ts","kind":"import-statement","original":"./data-service"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts":{"bytes":38251,"imports":[{"path":"crc-32","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/metadata/index.ts":{"bytes":499,"imports":[{"path":"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts","kind":"import-statement","original":"./metadata-store"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts":{"bytes":3785,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts":{"bytes":9606,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts":{"bytes":46626,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/feed-store","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts","kind":"import-statement","original":"./message-selector"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts","kind":"import-statement","original":"./timeframe-clock"},{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/index.ts":{"bytes":675,"imports":[{"path":"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts","kind":"import-statement","original":"./pipeline"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts","kind":"import-statement","original":"./timeframe-clock"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/auth.ts":{"bytes":10491,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts":{"bytes":28335,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/pipeline/index.ts","kind":"import-statement","original":"../pipeline"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytes":19394,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts","kind":"import-statement","original":"./control-pipeline"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-protocol.ts":{"bytes":26463,"imports":[{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-replicator","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/auth.ts","kind":"import-statement","original":"./auth"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytes":12711,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/space.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/space/space-protocol.ts","kind":"import-statement","original":"./space-protocol"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"../db-host"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytes":758,"imports":[{"path":"packages/core/echo/echo-pipeline/src/space/auth.ts","kind":"import-statement","original":"./auth"},{"path":"packages/core/echo/echo-pipeline/src/space/space.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/space/space-manager.ts","kind":"import-statement","original":"./space-manager"},{"path":"packages/core/echo/echo-pipeline/src/space/space-protocol.ts","kind":"import-statement","original":"./space-protocol"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytes":11277,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts":{"bytes":5020,"imports":[{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts":{"bytes":11172,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts":{"bytes":13712,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-automerge-replicator","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts":{"bytes":33232,"imports":[{"path":"@dxos/automerge/automerge","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo-storage-indexeddb","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts","kind":"import-statement","original":"./automerge-storage–wrapper"},{"path":"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts","kind":"import-statement","original":"./local-host-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts","kind":"import-statement","original":"./mesh-network-adapter"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts":{"bytes":29102,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/types.ts":{"bytes":2402,"imports":[],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytes":1080,"imports":[{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts","kind":"import-statement","original":"./automerge-host"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts","kind":"import-statement","original":"./automerge-doc-loader"},{"path":"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts","kind":"import-statement","original":"./local-host-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts","kind":"import-statement","original":"./mesh-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/index.ts":{"bytes":903,"imports":[{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"./common"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"./db-host"},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"./metadata"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/index.ts","kind":"import-statement","original":"./pipeline"},{"path":"packages/core/echo/echo-pipeline/src/space/index.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/automerge/index.ts","kind":"import-statement","original":"./automerge"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts":{"bytes":3594,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"../metadata"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytes":1474,"imports":[{"path":"@dxos/feed-store/testing","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytes":28447,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-gossip","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts","kind":"import-statement","original":"./test-feed-builder"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"../db-host"},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"../metadata"},{"path":"packages/core/echo/echo-pipeline/src/space/index.ts","kind":"import-statement","original":"../space"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/index.ts":{"bytes":726,"imports":[{"path":"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts","kind":"import-statement","original":"./change-metadata"},{"path":"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts","kind":"import-statement","original":"./test-agent-builder"},{"path":"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts","kind":"import-statement","original":"./test-feed-builder"}],"format":"esm"}},"outputs":{"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":49460},"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-7VZVCCNF.cjs","kind":"import-statement"},{"path":"@dxos/automerge/automerge","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo-storage-indexeddb","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-automerge-replicator","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["AuthExtension","AuthStatus","AutomergeDocumentLoaderImpl","AutomergeHost","AutomergeStorageAdapter","DataServiceImpl","LocalHostNetworkAdapter","MOCK_AUTH_PROVIDER","MOCK_AUTH_VERIFIER","MeshNetworkAdapter","MetadataStore","Pipeline","SnapshotManager","SnapshotStore","Space","SpaceManager","SpaceProtocol","SpaceProtocolSession","TimeframeClock","codec","createMappedFeedWriter","getSpaceKeyFromDoc","mapFeedIndexesToTimeframe","mapTimeframeToFeedIndexes","startAfter","valueEncoding"],"entryPoint":"packages/core/echo/echo-pipeline/src/index.ts","inputs":{"packages/core/echo/echo-pipeline/src/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts":{"bytesInOutput":8797},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytesInOutput":2339},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts":{"bytesInOutput":725},"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts":{"bytesInOutput":2760},"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts":{"bytesInOutput":3198},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts":{"bytesInOutput":7916}},"bytes":27231},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17040},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-7VZVCCNF.cjs","kind":"import-statement"},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-gossip","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/feed-store/testing","kind":"import-statement","external":true}],"exports":["MemoryNetworkManagerProvider","TestAgent","TestAgentBuilder","TestFeedBuilder","WebsocketNetworkManagerProvider","changeStorageVersionInMetadata"],"entryPoint":"packages/core/echo/echo-pipeline/src/testing/index.ts","inputs":{"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts":{"bytesInOutput":843},"packages/core/echo/echo-pipeline/src/testing/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytesInOutput":6330},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":7991},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-7VZVCCNF.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103226},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-7VZVCCNF.cjs":{"imports":[{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"crc-32","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/feed-store","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-replicator","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["AuthExtension","AuthStatus","DataServiceImpl","MOCK_AUTH_PROVIDER","MOCK_AUTH_VERIFIER","MetadataStore","Pipeline","SnapshotManager","SnapshotStore","Space","SpaceManager","SpaceProtocol","SpaceProtocolSession","TimeframeClock","codec","createMappedFeedWriter","mapFeedIndexesToTimeframe","mapTimeframeToFeedIndexes","startAfter","valueEncoding"],"inputs":{"packages/core/echo/echo-pipeline/src/common/codec.ts":{"bytesInOutput":211},"packages/core/echo/echo-pipeline/src/common/feeds.ts":{"bytesInOutput":548},"packages/core/echo/echo-pipeline/src/common/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts":{"bytesInOutput":1298},"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts":{"bytesInOutput":1292},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytesInOutput":534},"packages/core/echo/echo-pipeline/src/db-host/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts":{"bytesInOutput":10590},"packages/core/echo/echo-pipeline/src/metadata/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts":{"bytesInOutput":2919},"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts":{"bytesInOutput":12601},"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts":{"bytesInOutput":769},"packages/core/echo/echo-pipeline/src/pipeline/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/space/auth.ts":{"bytesInOutput":3001},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytesInOutput":5354},"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts":{"bytesInOutput":8077},"packages/core/echo/echo-pipeline/src/space/space-protocol.ts":{"bytesInOutput":6869},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytesInOutput":3335},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":58829}}}
1
+ {"inputs":{"packages/core/echo/echo-pipeline/src/common/codec.ts":{"bytes":1650,"imports":[{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/common/feeds.ts":{"bytes":2138,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/common/index.ts":{"bytes":553,"imports":[{"path":"packages/core/echo/echo-pipeline/src/common/codec.ts","kind":"import-statement","original":"./codec"},{"path":"packages/core/echo/echo-pipeline/src/common/feeds.ts","kind":"import-statement","original":"./feeds"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts":{"bytes":6376,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts":{"bytes":6075,"imports":[{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytes":3764,"imports":[],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/index.ts":{"bytes":706,"imports":[{"path":"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts","kind":"import-statement","original":"./snapshot-manager"},{"path":"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts","kind":"import-statement","original":"./snapshot-store"},{"path":"packages/core/echo/echo-pipeline/src/db-host/data-service.ts","kind":"import-statement","original":"./data-service"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts":{"bytes":38251,"imports":[{"path":"crc-32","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/metadata/index.ts":{"bytes":499,"imports":[{"path":"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts","kind":"import-statement","original":"./metadata-store"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts":{"bytes":3785,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts":{"bytes":9606,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts":{"bytes":46626,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/feed-store","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts","kind":"import-statement","original":"./message-selector"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts","kind":"import-statement","original":"./timeframe-clock"},{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/pipeline/index.ts":{"bytes":675,"imports":[{"path":"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts","kind":"import-statement","original":"./pipeline"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts","kind":"import-statement","original":"./timeframe-clock"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/auth.ts":{"bytes":10491,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts":{"bytes":28335,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/pipeline/index.ts","kind":"import-statement","original":"../pipeline"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytes":18794,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts","kind":"import-statement","original":"./control-pipeline"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-protocol.ts":{"bytes":26463,"imports":[{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-replicator","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/auth.ts","kind":"import-statement","original":"./auth"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytes":12711,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/space/space.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/space/space-protocol.ts","kind":"import-statement","original":"./space-protocol"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"../db-host"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytes":758,"imports":[{"path":"packages/core/echo/echo-pipeline/src/space/auth.ts","kind":"import-statement","original":"./auth"},{"path":"packages/core/echo/echo-pipeline/src/space/space.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/space/space-manager.ts","kind":"import-statement","original":"./space-manager"},{"path":"packages/core/echo/echo-pipeline/src/space/space-protocol.ts","kind":"import-statement","original":"./space-protocol"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytes":11277,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts":{"bytes":5020,"imports":[{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts":{"bytes":11172,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts":{"bytes":13712,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-automerge-replicator","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts":{"bytes":34352,"imports":[{"path":"@dxos/automerge/automerge","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo-storage-indexeddb","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts","kind":"import-statement","original":"./automerge-storage–wrapper"},{"path":"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts","kind":"import-statement","original":"./local-host-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts","kind":"import-statement","original":"./mesh-network-adapter"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts":{"bytes":29575,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/types.ts":{"bytes":2434,"imports":[],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/reference.ts":{"bytes":3176,"imports":[{"path":"@dxos/echo-db","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytes":1173,"imports":[{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts","kind":"import-statement","original":"./automerge-host"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts","kind":"import-statement","original":"./automerge-storage-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts","kind":"import-statement","original":"./automerge-doc-loader"},{"path":"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts","kind":"import-statement","original":"./local-host-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts","kind":"import-statement","original":"./mesh-network-adapter"},{"path":"packages/core/echo/echo-pipeline/src/automerge/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/core/echo/echo-pipeline/src/automerge/reference.ts","kind":"import-statement","original":"./reference"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/index.ts":{"bytes":903,"imports":[{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"./common"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"./db-host"},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"./metadata"},{"path":"packages/core/echo/echo-pipeline/src/pipeline/index.ts","kind":"import-statement","original":"./pipeline"},{"path":"packages/core/echo/echo-pipeline/src/space/index.ts","kind":"import-statement","original":"./space"},{"path":"packages/core/echo/echo-pipeline/src/automerge/index.ts","kind":"import-statement","original":"./automerge"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts":{"bytes":3594,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"../metadata"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytes":1474,"imports":[{"path":"@dxos/feed-store/testing","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/common/index.ts","kind":"import-statement","original":"../common"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytes":28447,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-gossip","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts","kind":"import-statement","original":"./test-feed-builder"},{"path":"packages/core/echo/echo-pipeline/src/db-host/index.ts","kind":"import-statement","original":"../db-host"},{"path":"packages/core/echo/echo-pipeline/src/metadata/index.ts","kind":"import-statement","original":"../metadata"},{"path":"packages/core/echo/echo-pipeline/src/space/index.ts","kind":"import-statement","original":"../space"}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/index.ts":{"bytes":726,"imports":[{"path":"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts","kind":"import-statement","original":"./change-metadata"},{"path":"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts","kind":"import-statement","original":"./test-agent-builder"},{"path":"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts","kind":"import-statement","original":"./test-feed-builder"}],"format":"esm"}},"outputs":{"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":51905},"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-KGIYLJBT.cjs","kind":"import-statement"},{"path":"@dxos/automerge/automerge","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo-storage-indexeddb","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/codec-protobuf","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/automerge/automerge-repo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-automerge-replicator","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true}],"exports":["AuthExtension","AuthStatus","AutomergeDocumentLoaderImpl","AutomergeHost","AutomergeStorageAdapter","DataServiceImpl","LocalHostNetworkAdapter","MOCK_AUTH_PROVIDER","MOCK_AUTH_VERIFIER","MeshNetworkAdapter","MetadataStore","Pipeline","REFERENCE_TYPE_TAG","SnapshotManager","SnapshotStore","Space","SpaceManager","SpaceProtocol","SpaceProtocolSession","TimeframeClock","codec","createMappedFeedWriter","decodeReference","encodeReference","getSpaceKeyFromDoc","isEncodedReferenceObject","mapFeedIndexesToTimeframe","mapTimeframeToFeedIndexes","startAfter","valueEncoding"],"entryPoint":"packages/core/echo/echo-pipeline/src/index.ts","inputs":{"packages/core/echo/echo-pipeline/src/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts":{"bytesInOutput":8961},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytesInOutput":2339},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage–wrapper.ts":{"bytesInOutput":725},"packages/core/echo/echo-pipeline/src/automerge/local-host-network-adapter.ts":{"bytesInOutput":2760},"packages/core/echo/echo-pipeline/src/automerge/mesh-network-adapter.ts":{"bytesInOutput":3198},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/automerge/automerge-doc-loader.ts":{"bytesInOutput":8015},"packages/core/echo/echo-pipeline/src/automerge/reference.ts":{"bytesInOutput":612}},"bytes":28258},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17040},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-KGIYLJBT.cjs","kind":"import-statement"},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-gossip","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/feed-store/testing","kind":"import-statement","external":true}],"exports":["MemoryNetworkManagerProvider","TestAgent","TestAgentBuilder","TestFeedBuilder","WebsocketNetworkManagerProvider","changeStorageVersionInMetadata"],"entryPoint":"packages/core/echo/echo-pipeline/src/testing/index.ts","inputs":{"packages/core/echo/echo-pipeline/src/testing/change-metadata.ts":{"bytesInOutput":843},"packages/core/echo/echo-pipeline/src/testing/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytesInOutput":6330},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":7991},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-KGIYLJBT.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103071},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-KGIYLJBT.cjs":{"imports":[{"path":"@dxos/hypercore","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/echo/blob","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"crc-32","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/feed-store","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/halo/credentials","kind":"import-statement","external":true},{"path":"@dxos/timeframe","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/teleport","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-object-sync","kind":"import-statement","external":true},{"path":"@dxos/teleport-extension-replicator","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["AuthExtension","AuthStatus","DataServiceImpl","MOCK_AUTH_PROVIDER","MOCK_AUTH_VERIFIER","MetadataStore","Pipeline","SnapshotManager","SnapshotStore","Space","SpaceManager","SpaceProtocol","SpaceProtocolSession","TimeframeClock","codec","createMappedFeedWriter","mapFeedIndexesToTimeframe","mapTimeframeToFeedIndexes","startAfter","valueEncoding"],"inputs":{"packages/core/echo/echo-pipeline/src/common/codec.ts":{"bytesInOutput":211},"packages/core/echo/echo-pipeline/src/common/feeds.ts":{"bytesInOutput":548},"packages/core/echo/echo-pipeline/src/common/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/db-host/snapshot-manager.ts":{"bytesInOutput":1298},"packages/core/echo/echo-pipeline/src/db-host/snapshot-store.ts":{"bytesInOutput":1292},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytesInOutput":580},"packages/core/echo/echo-pipeline/src/db-host/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts":{"bytesInOutput":10590},"packages/core/echo/echo-pipeline/src/metadata/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts":{"bytesInOutput":2919},"packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts":{"bytesInOutput":12601},"packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts":{"bytesInOutput":769},"packages/core/echo/echo-pipeline/src/pipeline/index.ts":{"bytesInOutput":0},"packages/core/echo/echo-pipeline/src/space/auth.ts":{"bytesInOutput":3001},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytesInOutput":5172},"packages/core/echo/echo-pipeline/src/space/control-pipeline.ts":{"bytesInOutput":8077},"packages/core/echo/echo-pipeline/src/space/space-protocol.ts":{"bytesInOutput":6869},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytesInOutput":3335},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":58693}}}
@@ -26,7 +26,7 @@ __export(testing_exports, {
26
26
  changeStorageVersionInMetadata: () => changeStorageVersionInMetadata
27
27
  });
28
28
  module.exports = __toCommonJS(testing_exports);
29
- var import_chunk_7VZVCCNF = require("../chunk-7VZVCCNF.cjs");
29
+ var import_chunk_KGIYLJBT = require("../chunk-KGIYLJBT.cjs");
30
30
  var import_log = require("@dxos/log");
31
31
  var import_protocols = require("@dxos/protocols");
32
32
  var import_context = require("@dxos/context");
@@ -49,7 +49,7 @@ var changeStorageVersionInMetadata = async (storage, version) => {
49
49
  S: void 0,
50
50
  C: (f, a) => f(...a)
51
51
  });
52
- const metadata = new import_chunk_7VZVCCNF.MetadataStore(storage.createDirectory("metadata"));
52
+ const metadata = new import_chunk_KGIYLJBT.MetadataStore(storage.createDirectory("metadata"));
53
53
  await metadata.load();
54
54
  const echoMetadata = metadata.metadata;
55
55
  echoMetadata.version = version;
@@ -60,7 +60,7 @@ var changeStorageVersionInMetadata = async (storage, version) => {
60
60
  var TestFeedBuilder = class extends import_testing.TestBuilder {
61
61
  constructor() {
62
62
  super({
63
- valueEncoding: import_chunk_7VZVCCNF.valueEncoding
63
+ valueEncoding: import_chunk_KGIYLJBT.valueEncoding
64
64
  });
65
65
  }
66
66
  };
@@ -104,10 +104,10 @@ var TestAgentBuilder = class {
104
104
  };
105
105
  var TestAgent = class {
106
106
  get metadataStore() {
107
- return this._metadataStore ??= new import_chunk_7VZVCCNF.MetadataStore(this.storage.createDirectory("metadata"));
107
+ return this._metadataStore ??= new import_chunk_KGIYLJBT.MetadataStore(this.storage.createDirectory("metadata"));
108
108
  }
109
109
  get snapshotStore() {
110
- return this._snapshotStore ??= new import_chunk_7VZVCCNF.SnapshotStore(this.storage.createDirectory("snapshots"));
110
+ return this._snapshotStore ??= new import_chunk_KGIYLJBT.SnapshotStore(this.storage.createDirectory("snapshots"));
111
111
  }
112
112
  get blobStore() {
113
113
  return this._blobStore ??= new import_teleport_extension_object_sync.BlobStore(this.storage.createDirectory("blobs"));
@@ -134,7 +134,7 @@ var TestAgent = class {
134
134
  return this._spaces.get(spaceKey);
135
135
  }
136
136
  get spaceManager() {
137
- return this._spaceManager ??= new import_chunk_7VZVCCNF.SpaceManager({
137
+ return this._spaceManager ??= new import_chunk_KGIYLJBT.SpaceManager({
138
138
  feedStore: this.feedStore,
139
139
  networkManager: this._networkManagerProvider(),
140
140
  metadataStore: this.metadataStore,
@@ -171,8 +171,8 @@ var TestAgent = class {
171
171
  metadata,
172
172
  swarmIdentity: {
173
173
  peerKey: this.deviceKey,
174
- credentialProvider: import_chunk_7VZVCCNF.MOCK_AUTH_PROVIDER,
175
- credentialAuthenticator: import_chunk_7VZVCCNF.MOCK_AUTH_VERIFIER
174
+ credentialProvider: import_chunk_KGIYLJBT.MOCK_AUTH_PROVIDER,
175
+ credentialAuthenticator: import_chunk_KGIYLJBT.MOCK_AUTH_VERIFIER
176
176
  },
177
177
  memberKey: identityKey,
178
178
  onAuthorizedConnection: (session) => {
@@ -188,12 +188,12 @@ var TestAgent = class {
188
188
  return space;
189
189
  }
190
190
  createSpaceProtocol(topic, gossip) {
191
- return new import_chunk_7VZVCCNF.SpaceProtocol({
191
+ return new import_chunk_KGIYLJBT.SpaceProtocol({
192
192
  topic,
193
193
  swarmIdentity: {
194
194
  peerKey: this.deviceKey,
195
- credentialProvider: import_chunk_7VZVCCNF.MOCK_AUTH_PROVIDER,
196
- credentialAuthenticator: import_chunk_7VZVCCNF.MOCK_AUTH_VERIFIER
195
+ credentialProvider: import_chunk_KGIYLJBT.MOCK_AUTH_PROVIDER,
196
+ credentialAuthenticator: import_chunk_KGIYLJBT.MOCK_AUTH_VERIFIER
197
197
  },
198
198
  networkManager: this._networkManagerProvider(),
199
199
  blobStore: this.blobStore,
@@ -6,6 +6,7 @@ import { type SpaceState, type SpaceDoc } from './types';
6
6
  type SpaceDocumentLinks = SpaceDoc['links'];
7
7
  export interface AutomergeDocumentLoader {
8
8
  onObjectDocumentLoaded: Event<ObjectDocumentLoaded>;
9
+ getAllHandles(): DocHandle<SpaceDoc>[];
9
10
  loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void>;
10
11
  loadObjectDocument(objectId: string): void;
11
12
  getSpaceRootDocHandle(): DocHandle<SpaceDoc>;
@@ -35,6 +36,7 @@ export declare class AutomergeDocumentLoaderImpl implements AutomergeDocumentLoa
35
36
  private readonly _objectsPendingDocumentLoad;
36
37
  readonly onObjectDocumentLoaded: Event<ObjectDocumentLoaded>;
37
38
  constructor(_spaceKey: PublicKey, _repo: Repo);
39
+ getAllHandles(): DocHandle<SpaceDoc>[];
38
40
  loadSpaceRootDocHandle(ctx: Context, spaceState: SpaceState): Promise<void>;
39
41
  loadObjectDocument(objectId: string): void;
40
42
  onObjectLinksUpdated(links: SpaceDocumentLinks): void;