@dxos/echo-pipeline 0.4.9-main.95b3f2d → 0.4.9-main.9dad131

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.
@@ -527,7 +527,7 @@ var AutomergeHost = class {
527
527
  return;
528
528
  }
529
529
  const heads = getHeads(event.doc);
530
- const lastAvailableHash = heads.at(-1);
530
+ const lastAvailableHash = heads.join("");
531
531
  if (!lastAvailableHash) {
532
532
  return;
533
533
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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.at(-1);\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"],
5
- "mappings": "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",
6
- "names": ["next", "automerge", "getHeads", "Repo", "IndexedDBStorageAdapter", "Context", "PublicKey", "log", "idCodec", "StorageType", "trace", "ComplexMap", "ComplexSet", "defaultMap", "mapValues", "arrayToBuffer", "bufferToArray", "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", "constructor", "storage", "callbacks", "_storage", "_callbacks", "load", "key", "save", "value", "beforeSave", "afterSave", "remove", "loadRange", "keyPrefix", "removeRange", "close", "AutomergeStorageAdapter", "Trigger", "NetworkAdapter", "cbor", "Stream", "invariant", "log", "LocalHostNetworkAdapter", "_peers", "Map", "_connected", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "peer", "get", "targetId", "close", "forEach", "disconnect", "syncRepo", "id", "syncMessage", "_getPeerId", "next", "has", "set", "connected", "encode", "delete", "wait", "timeout", "then", "peerMetadata", "catch", "err", "sendSyncMessage", "decode", "getHostInfo", "Trigger", "NetworkAdapter", "cbor", "invariant", "log", "AutomergeReplicator", "MeshNetworkAdapter", "_extensions", "Map", "_connected", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "receiverId", "targetId", "extension", "get", "sendSyncMessage", "payload", "encode", "catch", "err", "disconnect", "createExtension", "peerInfo", "onStartReplication", "info", "remotePeerId", "wait", "id", "thisPeerId", "toHex", "has", "set", "peerMetadata", "dxos_deviceKey", "onSyncMessage", "decode", "onClose", "delete", "AutomergeHost", "constructor", "directory", "metadata", "_ctx", "Context", "_authorizedDevices", "ComplexMap", "PublicKey", "hash", "_updatingMetadata", "Map", "_requestedDocs", "Set", "_metadata", "_meshNetwork", "MeshNetworkAdapter", "_clientNetwork", "LocalHostNetworkAdapter", "_storage", "AutomergeStorageWrapper", "storage", "type", "StorageType", "IDB", "IndexedDBStorageAdapter", "path", "AutomergeStorageAdapter", "callbacks", "beforeSave", "params", "_beforeSave", "_peerId", "random", "toHex", "_repo", "Repo", "peerId", "network", "sharePolicy", "documentId", "startsWith", "doc", "handles", "docSync", "isRequested", "has", "log", "spaceKey", "getSpaceKeyFromDoc", "authorizedDevices", "get", "from", "deviceKeyHex", "repo", "peerMetadataByPeerId", "dxos_deviceKey", "deviceKey", "isAuthorized", "localPeer", "remotePeer", "err", "catch", "ready", "listener", "handle", "_onDocument", "on", "onDispose", "off", "id", "event", "_onUpdate", "objectIds", "getInlineChanges", "length", "heads", "getHeads", "lastAvailableHash", "at", "encodedIds", "map", "objectId", "idCodec", "encode", "idToLastHash", "markingDirtyPromise", "markDirty", "then", "delete", "disposed", "set", "_automergeDocs", "mapValues", "state", "hasDoc", "automerge", "data", "value", "key", "Object", "keys", "_automergePeers", "peers", "close", "dispose", "syncRepo", "request", "sendSyncMessage", "getHostInfo", "createExtension", "authorizeDevice", "defaultMap", "ComplexSet", "add", "trace", "info", "depth", "resource", "inlineChangedObjectIds", "patches", "rawSpaceKey", "access", "experimental_spaceKey", "String"]
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"],
5
+ "mappings": "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",
6
+ "names": ["next", "automerge", "getHeads", "Repo", "IndexedDBStorageAdapter", "Context", "PublicKey", "log", "idCodec", "StorageType", "trace", "ComplexMap", "ComplexSet", "defaultMap", "mapValues", "arrayToBuffer", "bufferToArray", "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", "constructor", "storage", "callbacks", "_storage", "_callbacks", "load", "key", "save", "value", "beforeSave", "afterSave", "remove", "loadRange", "keyPrefix", "removeRange", "close", "AutomergeStorageAdapter", "Trigger", "NetworkAdapter", "cbor", "Stream", "invariant", "log", "LocalHostNetworkAdapter", "_peers", "Map", "_connected", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "peer", "get", "targetId", "close", "forEach", "disconnect", "syncRepo", "id", "syncMessage", "_getPeerId", "next", "has", "set", "connected", "encode", "delete", "wait", "timeout", "then", "peerMetadata", "catch", "err", "sendSyncMessage", "decode", "getHostInfo", "Trigger", "NetworkAdapter", "cbor", "invariant", "log", "AutomergeReplicator", "MeshNetworkAdapter", "_extensions", "Map", "_connected", "ready", "emit", "network", "connect", "peerId", "wake", "send", "message", "receiverId", "targetId", "extension", "get", "sendSyncMessage", "payload", "encode", "catch", "err", "disconnect", "createExtension", "peerInfo", "onStartReplication", "info", "remotePeerId", "wait", "id", "thisPeerId", "toHex", "has", "set", "peerMetadata", "dxos_deviceKey", "onSyncMessage", "decode", "onClose", "delete", "AutomergeHost", "constructor", "directory", "metadata", "_ctx", "Context", "_authorizedDevices", "ComplexMap", "PublicKey", "hash", "_updatingMetadata", "Map", "_requestedDocs", "Set", "_metadata", "_meshNetwork", "MeshNetworkAdapter", "_clientNetwork", "LocalHostNetworkAdapter", "_storage", "AutomergeStorageWrapper", "storage", "type", "StorageType", "IDB", "IndexedDBStorageAdapter", "path", "AutomergeStorageAdapter", "callbacks", "beforeSave", "params", "_beforeSave", "_peerId", "random", "toHex", "_repo", "Repo", "peerId", "network", "sharePolicy", "documentId", "startsWith", "doc", "handles", "docSync", "isRequested", "has", "log", "spaceKey", "getSpaceKeyFromDoc", "authorizedDevices", "get", "from", "deviceKeyHex", "repo", "peerMetadataByPeerId", "dxos_deviceKey", "deviceKey", "isAuthorized", "localPeer", "remotePeer", "err", "catch", "ready", "listener", "handle", "_onDocument", "on", "onDispose", "off", "id", "event", "_onUpdate", "objectIds", "getInlineChanges", "length", "heads", "getHeads", "lastAvailableHash", "join", "encodedIds", "map", "objectId", "idCodec", "encode", "idToLastHash", "markingDirtyPromise", "markDirty", "then", "delete", "disposed", "set", "_automergeDocs", "mapValues", "state", "hasDoc", "automerge", "data", "value", "key", "Object", "keys", "_automergePeers", "peers", "close", "dispose", "syncRepo", "request", "sendSyncMessage", "getHostInfo", "createExtension", "authorizeDevice", "defaultMap", "ComplexSet", "add", "trace", "info", "depth", "resource", "inlineChangedObjectIds", "patches", "rawSpaceKey", "access", "experimental_spaceKey", "String"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"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},{"path":"@inject-globals","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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytes":3733,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytes":19511,"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytes":13339,"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytes":11277,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-host.ts":{"bytes":33234,"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytes":883,"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/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":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytes":29261,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/core/echo/echo-pipeline/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":35739},"packages/core/echo/echo-pipeline/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs","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}],"exports":["AuthExtension","AuthStatus","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":8795},"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}},"bytes":19240},"packages/core/echo/echo-pipeline/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17466},"packages/core/echo/echo-pipeline/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs","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/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":6548},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":8242},"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103666},"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"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":{"inject-globals:@inject-globals":{"bytesInOutput":79},"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":5355},"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":3430},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":59073}}}
1
+ {"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"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},{"path":"@inject-globals","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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/db-host/data-service.ts":{"bytes":3733,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space.ts":{"bytes":19511,"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/space/space-manager.ts":{"bytes":13339,"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/automerge-storage-adapter.ts":{"bytes":11277,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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},{"path":"@inject-globals","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},{"path":"@inject-globals","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/automerge/index.ts":{"bytes":883,"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/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":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/core/echo/echo-pipeline/src/testing/test-agent-builder.ts":{"bytes":29261,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"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"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/core/echo/echo-pipeline/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":35743},"packages/core/echo/echo-pipeline/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs","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}],"exports":["AuthExtension","AuthStatus","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}},"bytes":19242},"packages/core/echo/echo-pipeline/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17466},"packages/core/echo/echo-pipeline/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs","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/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":6548},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":8242},"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103666},"packages/core/echo/echo-pipeline/dist/lib/browser/chunk-P3HBH2ZU.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"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":{"inject-globals:@inject-globals":{"bytesInOutput":79},"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":5355},"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":3430},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":59073}}}
@@ -537,7 +537,7 @@ var AutomergeHost = class {
537
537
  return;
538
538
  }
539
539
  const heads = (0, import_automerge.getHeads)(event.doc);
540
- const lastAvailableHash = heads.at(-1);
540
+ const lastAvailableHash = heads.join("");
541
541
  if (!lastAvailableHash) {
542
542
  return;
543
543
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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.at(-1);\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"],
5
- "mappings": "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",
6
- "names": ["import_util", "import_automerge_repo", "import_log", "import_async", "import_invariant", "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", "at", "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"]
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"],
5
+ "mappings": "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",
6
+ "names": ["import_util", "import_automerge_repo", "import_log", "import_async", "import_invariant", "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"]
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":19511,"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":13339,"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":33234,"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/index.ts":{"bytes":883,"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/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/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":29261,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":35738},"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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}],"exports":["AuthExtension","AuthStatus","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":8795},"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}},"bytes":19207},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17465},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":6548},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":8209},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103657},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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":5355},"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":3430},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":58925}}}
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":19511,"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":13339,"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/index.ts":{"bytes":883,"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/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/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":29261,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":35742},"packages/core/echo/echo-pipeline/dist/lib/node/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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}],"exports":["AuthExtension","AuthStatus","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}},"bytes":19209},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17465},"packages/core/echo/echo-pipeline/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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/document-model","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/messaging","kind":"import-statement","external":true},{"path":"@dxos/model-factory","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":6548},"packages/core/echo/echo-pipeline/src/testing/test-feed-builder.ts":{"bytesInOutput":171}},"bytes":8209},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103657},"packages/core/echo/echo-pipeline/dist/lib/node/chunk-WS67FBKB.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":5355},"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":3430},"packages/core/echo/echo-pipeline/src/space/index.ts":{"bytesInOutput":0}},"bytes":58925}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.4.9-main.95b3f2d",
3
+ "version": "0.4.9-main.9dad131",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -36,38 +36,38 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "crc-32": "^1.2.2",
39
- "@dxos/async": "0.4.9-main.95b3f2d",
40
- "@dxos/automerge": "0.4.9-main.95b3f2d",
41
- "@dxos/codec-protobuf": "0.4.9-main.95b3f2d",
42
- "@dxos/credentials": "0.4.9-main.95b3f2d",
43
- "@dxos/context": "0.4.9-main.95b3f2d",
44
- "@dxos/crypto": "0.4.9-main.95b3f2d",
45
- "@dxos/debug": "0.4.9-main.95b3f2d",
46
- "@dxos/document-model": "0.4.9-main.95b3f2d",
47
- "@dxos/feed-store": "0.4.9-main.95b3f2d",
48
- "@dxos/echo-db": "0.4.9-main.95b3f2d",
49
- "@dxos/hypercore": "0.4.9-main.95b3f2d",
50
- "@dxos/invariant": "0.4.9-main.95b3f2d",
51
- "@dxos/keyring": "0.4.9-main.95b3f2d",
52
- "@dxos/keys": "0.4.9-main.95b3f2d",
53
- "@dxos/log": "0.4.9-main.95b3f2d",
54
- "@dxos/messaging": "0.4.9-main.95b3f2d",
55
- "@dxos/model-factory": "0.4.9-main.95b3f2d",
56
- "@dxos/network-manager": "0.4.9-main.95b3f2d",
57
- "@dxos/protocols": "0.4.9-main.95b3f2d",
58
- "@dxos/random-access-storage": "0.4.9-main.95b3f2d",
59
- "@dxos/node-std": "0.4.9-main.95b3f2d",
60
- "@dxos/teleport": "0.4.9-main.95b3f2d",
61
- "@dxos/rpc": "0.4.9-main.95b3f2d",
62
- "@dxos/teleport-extension-automerge-replicator": "0.4.9-main.95b3f2d",
63
- "@dxos/teleport-extension-gossip": "0.4.9-main.95b3f2d",
64
- "@dxos/teleport-extension-object-sync": "0.4.9-main.95b3f2d",
65
- "@dxos/teleport-extension-replicator": "0.4.9-main.95b3f2d",
66
- "@dxos/text-model": "0.4.9-main.95b3f2d",
67
- "@dxos/timeframe": "0.4.9-main.95b3f2d",
68
- "@dxos/tracing": "0.4.9-main.95b3f2d",
69
- "@dxos/typings": "0.4.9-main.95b3f2d",
70
- "@dxos/util": "0.4.9-main.95b3f2d"
39
+ "@dxos/async": "0.4.9-main.9dad131",
40
+ "@dxos/automerge": "0.4.9-main.9dad131",
41
+ "@dxos/codec-protobuf": "0.4.9-main.9dad131",
42
+ "@dxos/context": "0.4.9-main.9dad131",
43
+ "@dxos/credentials": "0.4.9-main.9dad131",
44
+ "@dxos/debug": "0.4.9-main.9dad131",
45
+ "@dxos/crypto": "0.4.9-main.9dad131",
46
+ "@dxos/document-model": "0.4.9-main.9dad131",
47
+ "@dxos/echo-db": "0.4.9-main.9dad131",
48
+ "@dxos/feed-store": "0.4.9-main.9dad131",
49
+ "@dxos/hypercore": "0.4.9-main.9dad131",
50
+ "@dxos/invariant": "0.4.9-main.9dad131",
51
+ "@dxos/keyring": "0.4.9-main.9dad131",
52
+ "@dxos/keys": "0.4.9-main.9dad131",
53
+ "@dxos/log": "0.4.9-main.9dad131",
54
+ "@dxos/messaging": "0.4.9-main.9dad131",
55
+ "@dxos/model-factory": "0.4.9-main.9dad131",
56
+ "@dxos/node-std": "0.4.9-main.9dad131",
57
+ "@dxos/network-manager": "0.4.9-main.9dad131",
58
+ "@dxos/protocols": "0.4.9-main.9dad131",
59
+ "@dxos/rpc": "0.4.9-main.9dad131",
60
+ "@dxos/random-access-storage": "0.4.9-main.9dad131",
61
+ "@dxos/teleport": "0.4.9-main.9dad131",
62
+ "@dxos/teleport-extension-automerge-replicator": "0.4.9-main.9dad131",
63
+ "@dxos/teleport-extension-gossip": "0.4.9-main.9dad131",
64
+ "@dxos/teleport-extension-object-sync": "0.4.9-main.9dad131",
65
+ "@dxos/teleport-extension-replicator": "0.4.9-main.9dad131",
66
+ "@dxos/timeframe": "0.4.9-main.9dad131",
67
+ "@dxos/tracing": "0.4.9-main.9dad131",
68
+ "@dxos/text-model": "0.4.9-main.9dad131",
69
+ "@dxos/typings": "0.4.9-main.9dad131",
70
+ "@dxos/util": "0.4.9-main.9dad131"
71
71
  },
72
72
  "devDependencies": {
73
73
  "fast-check": "^3.15.1",
@@ -172,7 +172,7 @@ export class AutomergeHost {
172
172
  }
173
173
 
174
174
  const heads = getHeads(event.doc);
175
- const lastAvailableHash = heads.at(-1);
175
+ const lastAvailableHash = heads.join('');
176
176
  if (!lastAvailableHash) {
177
177
  return;
178
178
  }