@dxos/echo-pipeline 0.1.31 → 0.1.32-next.77d513e
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.
- package/dist/lib/browser/{chunk-QMDRF3NL.mjs → chunk-EM5HSJ7J.mjs} +121 -86
- package/dist/lib/browser/chunk-EM5HSJ7J.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3 -5
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +12 -4
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +121 -87
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +126 -76
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/types/src/metadata/metadata-store.d.ts +1 -2
- package/dist/types/src/metadata/metadata-store.d.ts.map +1 -1
- package/dist/types/src/pipeline/pipeline.d.ts +10 -1
- package/dist/types/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/types/src/space/{data-pipeline-controller.d.ts → data-pipeline.d.ts} +10 -18
- package/dist/types/src/space/data-pipeline.d.ts.map +1 -0
- package/dist/types/src/space/index.d.ts +1 -1
- package/dist/types/src/space/index.d.ts.map +1 -1
- package/dist/types/src/space/space.d.ts +6 -4
- package/dist/types/src/space/space.d.ts.map +1 -1
- package/dist/types/src/testing/test-agent-builder.d.ts +2 -2
- package/dist/types/src/testing/test-agent-builder.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +2 -2
- package/dist/types/src/testing/util.d.ts.map +1 -1
- package/package.json +29 -29
- package/src/metadata/metadata-store.ts +1 -2
- package/src/pipeline/pipeline.ts +18 -3
- package/src/space/{data-pipeline-controller.ts → data-pipeline.ts} +61 -38
- package/src/space/index.ts +1 -1
- package/src/space/space.ts +22 -23
- package/src/testing/test-agent-builder.ts +10 -4
- package/src/testing/util.ts +2 -5
- package/dist/lib/browser/chunk-QMDRF3NL.mjs.map +0 -7
- package/dist/types/src/space/data-pipeline-controller.d.ts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/testing/test-agent-builder.ts", "../../../../src/testing/test-feed-builder.ts", "../../../../src/testing/util.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { DocumentModel } from '@dxos/document-model';\nimport { FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { ComplexMap } from '@dxos/util';\n\nimport { SnapshotManager, SnapshotStore } from '../dbhost';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, Space, SpaceManager, SpaceProtocol } from '../space';\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAIA,SAASA,qBAAqB;AAG9B,SAASC,iBAAiB;AAC1B,SAASC,qBAAqBC,4BAA4BC,8BAA8B;AACxF,SAASC,oBAAoB;AAC7B,SAASC,8BAA8BC,wBAAwBC,sBAAsB;AAErF,SAASC,eAAwBC,mBAAmB;AACpD,SAASC,QAAQC,gBAAgB;AACjC,SAASC,kBAAkB;;;ACV3B,SAASC,mBAAmB;AAQrB,IAAMC,kBAAN,cAA8BC,YAAAA;EACnCC,cAAc;AACZ,UAAM;MACJC;IACF,CAAA;EACF;AACF;;;ADMO,IAAMC,+BACX,CAACC,kBACD,MACE,IAAIC,eAAe;EACjBC,eAAe,IAAIC,oBAAoBH,aAAAA;EACvCI,kBAAkBC;AACpB,CAAA;AAEG,IAAMC,kCACX,CAACC,cACD,MACE,IAAIN,eAAe;EACjBC,eAAe,IAAIM,uBAAuB;IAACD;GAAU;EACrDH,kBAAkBK,6BAAAA;AACpB,CAAA;AAUG,IAAMC,mBAAN,MAAMA;EAKXC,YAAY,EAAEC,SAASC,uBAAsB,IAA8B,CAAC,GAAG;AAJ9DC,mBAAU,IAAIC,WAAiCC,UAAUC,IAAI;AAK5E,SAAKC,WAAWN,4BAAWO,cAAc;MAAEC,MAAMC,YAAYC;IAAI,CAAA;AACjE,SAAKC,0BACHV,0DAA0Bd,6BAA6B,IAAIyB,2BAAAA,CAAAA;EAC/D;EAEA,MAAMC,QAAQ;AACZ,WAAOC,QAAQC,IAAI,KAAKC,OAAOC,IAAI,CAACC,UAAUA,MAAML,MAAK,CAAA,CAAA;EAC3D;EAEA,IAAIG,SAAS;AACX,WAAOG,MAAMC,KAAK,KAAKlB,QAAQmB,OAAM,CAAA;EACvC;EAEAC,SAASC,WAAsB;AAC7B,WAAO,KAAKrB,QAAQsB,IAAID,SAAAA;EAC1B;EAEA,MAAME,aAAiC;AAErC,UAAMC,cAAc,IAAIC,gBAAAA,EACrBC,WAAW,KAAKtB,UAAU,SAAS,KAAKJ,QAAQ2B,MAAM;AAEzD,UAAMC,cAAc,MAAMJ,YAAYK,QAAQC,UAAS;AACvD,UAAMT,YAAY,MAAMG,YAAYK,QAAQC,UAAS;AAErD,UAAMd,QAAQ,IAAIe,UAAU,KAAKtB,yBAAyBe,aAAaI,aAAaP,SAAAA;AACpF,SAAKrB,QAAQgC,IAAIX,WAAWL,KAAAA;AAC5B,WAAOA;EACT;AACF;AAKO,IAAMe,YAAN,MAAMA;EAMXlC,YACmBY,yBACAwB,cACDL,aACAP,WAChB;mCAJiBZ;wBACAwB;uBACDL;qBACAP;SATDa,UAAU,IAAIjC,WAA6BC,UAAUC,IAAI;AAWxE,SAAK0B,UAAU,KAAKI,aAAaJ;AACjC,SAAKM,YAAY,KAAKF,aAAaG,gBAAe;EACpD;EAEA,MAAMzB,QAAQ;AACZ,WAAOC,QAAQC,IAAI;SAAI,KAAKwB,OAAOtB,IAAI,CAACuB,UAAUA,MAAM3B,MAAK,CAAA;KAAI;EACnE;EAEA,IAAI0B,SAAS;AACX,WAAOpB,MAAMC,KAAK,KAAKgB,QAAQf,OAAM,CAAA;EACvC;EAEAoB,SAASC,UAAqB;AAC5B,WAAO,KAAKN,QAAQZ,IAAIkB,QAAAA;EAC1B;EAEAC,qBAAqB;AACnB,WAAO,IAAIC,aAAa;MACtBP,WAAW,KAAKF,aAAaG,gBAAe;MAC5CO,gBAAgB,KAAKlC,wBAAuB;IAC9C,CAAA;EACF;EAEA,MAAMmC,YACJhB,cAAyB,KAAKA,aAC9BY,UACAK,
|
|
6
|
-
"names": ["DocumentModel", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "ModelFactory", "createWebRTCTransportFactory", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "Gossip", "Presence", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "createWebRTCTransportFactory", "TestAgentBuilder", "constructor", "storage", "networkManagerProvider", "_agents", "ComplexMap", "PublicKey", "hash", "_storage", "createStorage", "type", "StorageType", "RAM", "_networkManagerProvider", "MemorySignalManagerContext", "close", "Promise", "all", "agents", "map", "agent", "Array", "from", "values", "getAgent", "deviceKey", "get", "createPeer", "feedBuilder", "TestFeedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "createSpaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataFeedKey", "dataFeed", "openFeed", "writable", "controlFeedKey", "controlFeed", "genesisFeed", "snapshotManager", "SnapshotManager", "SnapshotStore", "createDirectory", "metadataStore", "MetadataStore", "addSpace", "key", "dataPipelineController", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { DocumentModel } from '@dxos/document-model';\nimport { FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { PublicKey } from '@dxos/keys';\nimport { MemorySignalManager, MemorySignalManagerContext, WebsocketSignalManager } from '@dxos/messaging';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { createWebRTCTransportFactory, MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { createStorage, Storage, StorageType } from '@dxos/random-access-storage';\nimport { Gossip, Presence } from '@dxos/teleport-extension-gossip';\nimport { ComplexMap } from '@dxos/util';\n\nimport { SnapshotManager, SnapshotStore } from '../dbhost';\nimport { MetadataStore } from '../metadata';\nimport { MOCK_AUTH_PROVIDER, MOCK_AUTH_VERIFIER, Space, SpaceManager, SpaceProtocol } from '../space';\nimport { DataPipeline } from '../space/data-pipeline';\nimport { TestFeedBuilder } from './test-feed-builder';\n\nexport type NetworkManagerProvider = () => NetworkManager;\n\nexport const MemoryNetworkManagerProvider =\n (signalContext: MemorySignalManagerContext): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new MemorySignalManager(signalContext),\n transportFactory: MemoryTransportFactory\n });\n\nexport const WebsocketNetworkManagerProvider =\n (signalUrl: string): NetworkManagerProvider =>\n () =>\n new NetworkManager({\n signalManager: new WebsocketSignalManager([signalUrl]),\n transportFactory: createWebRTCTransportFactory()\n });\n\nexport type TestAgentBuilderOptions = {\n storage?: Storage;\n networkManagerProvider?: NetworkManagerProvider;\n};\n\n/**\n * Factory for test agents.\n */\nexport class TestAgentBuilder {\n private readonly _agents = new ComplexMap<PublicKey, TestAgent>(PublicKey.hash);\n private readonly _storage: Storage;\n private readonly _networkManagerProvider: NetworkManagerProvider;\n\n constructor({ storage, networkManagerProvider }: TestAgentBuilderOptions = {}) {\n this._storage = storage ?? createStorage({ type: StorageType.RAM });\n this._networkManagerProvider =\n networkManagerProvider ?? MemoryNetworkManagerProvider(new MemorySignalManagerContext());\n }\n\n async close() {\n return Promise.all(this.agents.map((agent) => agent.close()));\n }\n\n get agents() {\n return Array.from(this._agents.values());\n }\n\n getAgent(deviceKey: PublicKey) {\n return this._agents.get(deviceKey);\n }\n\n async createPeer(): Promise<TestAgent> {\n // prettier-ignore\n const feedBuilder = new TestFeedBuilder()\n .setStorage(this._storage, `agent-${this._agents.size}`);\n\n const identityKey = await feedBuilder.keyring.createKey();\n const deviceKey = await feedBuilder.keyring.createKey();\n\n const agent = new TestAgent(this._networkManagerProvider, feedBuilder, identityKey, deviceKey);\n this._agents.set(deviceKey, agent);\n return agent;\n }\n}\n\n/**\n * Test agent that enables the creation and replication of multiple spaces.\n */\nexport class TestAgent {\n private readonly _spaces = new ComplexMap<PublicKey, Space>(PublicKey.hash);\n\n public readonly keyring: Keyring;\n public readonly feedStore: FeedStore<FeedMessage>;\n\n constructor(\n private readonly _networkManagerProvider: NetworkManagerProvider,\n private readonly _feedBuilder: TestFeedBuilder,\n public readonly identityKey: PublicKey,\n public readonly deviceKey: PublicKey\n ) {\n this.keyring = this._feedBuilder.keyring;\n this.feedStore = this._feedBuilder.createFeedStore();\n }\n\n async close() {\n return Promise.all([...this.spaces.map((space) => space.close())]);\n }\n\n get spaces() {\n return Array.from(this._spaces.values());\n }\n\n getSpace(spaceKey: PublicKey) {\n return this._spaces.get(spaceKey);\n }\n\n createSpaceManager() {\n return new SpaceManager({\n feedStore: this._feedBuilder.createFeedStore(),\n networkManager: this._networkManagerProvider()\n });\n }\n\n async createSpace(\n identityKey: PublicKey = this.identityKey,\n spaceKey?: PublicKey,\n genesisKey?: PublicKey\n ): Promise<[Space, DataPipeline]> {\n if (!spaceKey) {\n spaceKey = await this.keyring.createKey();\n }\n\n const dataFeedKey = await this.keyring.createKey();\n const dataFeed = await this.feedStore.openFeed(dataFeedKey, { writable: true });\n\n const controlFeedKey = await this.keyring.createKey();\n const controlFeed = await this.feedStore.openFeed(controlFeedKey, { writable: true });\n const genesisFeed = genesisKey ? await this.feedStore.openFeed(genesisKey) : controlFeed;\n const snapshotManager = new SnapshotManager(new SnapshotStore(createStorage().createDirectory('snapshots')));\n\n const metadataStore = new MetadataStore(createStorage().createDirectory('metadata'));\n await metadataStore.addSpace({ key: spaceKey });\n const dataPipelineController: DataPipeline = new DataPipeline({\n modelFactory: new ModelFactory().registerModel(DocumentModel),\n metadataStore,\n snapshotManager,\n memberKey: identityKey,\n spaceKey,\n feedInfoProvider: (feedKey) => space.spaceState.feeds.get(feedKey),\n snapshotId: undefined\n });\n const space = new Space({\n spaceKey,\n protocol: this.createSpaceProtocol(spaceKey),\n genesisFeed,\n feedProvider: (feedKey) => this.feedStore.openFeed(feedKey)\n })\n .setControlFeed(controlFeed)\n .setDataFeed(dataFeed);\n await space.open();\n await dataPipelineController.open({\n openPipeline: async (start) => {\n const pipeline = await space.createDataPipeline({ start });\n await pipeline.start();\n return pipeline;\n }\n });\n\n this._spaces.set(spaceKey, space);\n return [space, dataPipelineController];\n }\n\n createSpaceProtocol(topic: PublicKey, gossip?: Gossip) {\n return new SpaceProtocol({\n topic,\n swarmIdentity: {\n peerKey: this.deviceKey,\n credentialProvider: MOCK_AUTH_PROVIDER,\n credentialAuthenticator: MOCK_AUTH_VERIFIER\n },\n networkManager: this._networkManagerProvider(),\n onSessionAuth: (session) => {\n session.addExtension(\n 'dxos.mesh.teleport.gossip',\n (gossip ?? this.createGossip()).createExtension({ remotePeerId: session.remotePeerId })\n );\n }\n });\n }\n\n createGossip() {\n return new Gossip({\n localPeerId: this.deviceKey\n });\n }\n\n createPresence(gossip?: Gossip) {\n return new Presence({\n announceInterval: 30,\n offlineTimeout: 200,\n identityKey: this.identityKey,\n gossip: gossip ?? this.createGossip()\n });\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { TestBuilder } from '@dxos/feed-store/testing';\nimport type { FeedMessage } from '@dxos/protocols/proto/dxos/echo/feed';\n\nimport { valueEncoding } from '../common';\n\n/**\n * Builder with default encoder and generator.\n */\nexport class TestFeedBuilder extends TestBuilder<FeedMessage> {\n constructor() {\n super({\n valueEncoding\n });\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { DocumentModel } from '@dxos/document-model';\nimport { DatabaseBackendProxy, ItemManager } from '@dxos/echo-db';\nimport { MockFeedWriter } from '@dxos/feed-store/testing';\nimport { PublicKey } from '@dxos/keys';\nimport { ModelFactory } from '@dxos/model-factory';\nimport { DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';\nimport { Timeframe } from '@dxos/timeframe';\n\nimport { DatabaseBackendHost, DataServiceHost, DataServiceImpl, DataServiceSubscriptions } from '../dbhost';\nimport { DataPipeline } from '../space';\n\nexport const createMemoryDatabase = async (modelFactory: ModelFactory) => {\n const feed = new MockFeedWriter<DataMessage>();\n const backend = new DatabaseBackendHost(feed, undefined);\n\n feed.written.on(([data, meta]) =>\n backend.echoProcessor({\n batch: data.batch,\n meta: {\n ...meta,\n memberKey: PublicKey.random(),\n timeframe: new Timeframe([[meta.feedKey, meta.seq]])\n }\n })\n );\n\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n backend,\n itemManager\n };\n};\n\nexport const createRemoteDatabaseFromDataServiceHost = async (\n modelFactory: ModelFactory,\n dataServiceHost: DataServiceHost\n) => {\n const dataServiceSubscriptions = new DataServiceSubscriptions();\n const dataService = new DataServiceImpl(dataServiceSubscriptions);\n\n const spaceKey = PublicKey.random();\n dataServiceSubscriptions.registerSpace(spaceKey, dataServiceHost);\n\n const backend = new DatabaseBackendProxy(dataService, spaceKey);\n const itemManager = new ItemManager(modelFactory);\n await backend.open(itemManager, new ModelFactory().registerModel(DocumentModel));\n return {\n itemManager,\n backend\n };\n};\n\nexport const testLocalDatabase = async (create: DataPipeline, check: DataPipeline = create) => {\n const objectId = PublicKey.random().toHex();\n await create.databaseBackend!.getWriteStream()?.write({\n batch: {\n objects: [\n {\n objectId,\n genesis: {\n modelType: DocumentModel.meta.type\n }\n }\n ]\n }\n });\n\n await asyncTimeout(\n check.databaseBackend!._itemDemuxer.mutation.waitForCondition(() => check._itemManager.entities.has(objectId)),\n 500\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAIA,SAASA,qBAAqB;AAG9B,SAASC,iBAAiB;AAC1B,SAASC,qBAAqBC,4BAA4BC,8BAA8B;AACxF,SAASC,oBAAoB;AAC7B,SAASC,8BAA8BC,wBAAwBC,sBAAsB;AAErF,SAASC,eAAwBC,mBAAmB;AACpD,SAASC,QAAQC,gBAAgB;AACjC,SAASC,kBAAkB;;;ACV3B,SAASC,mBAAmB;AAQrB,IAAMC,kBAAN,cAA8BC,YAAAA;EACnCC,cAAc;AACZ,UAAM;MACJC;IACF,CAAA;EACF;AACF;;;ADMO,IAAMC,+BACX,CAACC,kBACD,MACE,IAAIC,eAAe;EACjBC,eAAe,IAAIC,oBAAoBH,aAAAA;EACvCI,kBAAkBC;AACpB,CAAA;AAEG,IAAMC,kCACX,CAACC,cACD,MACE,IAAIN,eAAe;EACjBC,eAAe,IAAIM,uBAAuB;IAACD;GAAU;EACrDH,kBAAkBK,6BAAAA;AACpB,CAAA;AAUG,IAAMC,mBAAN,MAAMA;EAKXC,YAAY,EAAEC,SAASC,uBAAsB,IAA8B,CAAC,GAAG;AAJ9DC,mBAAU,IAAIC,WAAiCC,UAAUC,IAAI;AAK5E,SAAKC,WAAWN,4BAAWO,cAAc;MAAEC,MAAMC,YAAYC;IAAI,CAAA;AACjE,SAAKC,0BACHV,0DAA0Bd,6BAA6B,IAAIyB,2BAAAA,CAAAA;EAC/D;EAEA,MAAMC,QAAQ;AACZ,WAAOC,QAAQC,IAAI,KAAKC,OAAOC,IAAI,CAACC,UAAUA,MAAML,MAAK,CAAA,CAAA;EAC3D;EAEA,IAAIG,SAAS;AACX,WAAOG,MAAMC,KAAK,KAAKlB,QAAQmB,OAAM,CAAA;EACvC;EAEAC,SAASC,WAAsB;AAC7B,WAAO,KAAKrB,QAAQsB,IAAID,SAAAA;EAC1B;EAEA,MAAME,aAAiC;AAErC,UAAMC,cAAc,IAAIC,gBAAAA,EACrBC,WAAW,KAAKtB,UAAU,SAAS,KAAKJ,QAAQ2B,MAAM;AAEzD,UAAMC,cAAc,MAAMJ,YAAYK,QAAQC,UAAS;AACvD,UAAMT,YAAY,MAAMG,YAAYK,QAAQC,UAAS;AAErD,UAAMd,QAAQ,IAAIe,UAAU,KAAKtB,yBAAyBe,aAAaI,aAAaP,SAAAA;AACpF,SAAKrB,QAAQgC,IAAIX,WAAWL,KAAAA;AAC5B,WAAOA;EACT;AACF;AAKO,IAAMe,YAAN,MAAMA;EAMXlC,YACmBY,yBACAwB,cACDL,aACAP,WAChB;mCAJiBZ;wBACAwB;uBACDL;qBACAP;SATDa,UAAU,IAAIjC,WAA6BC,UAAUC,IAAI;AAWxE,SAAK0B,UAAU,KAAKI,aAAaJ;AACjC,SAAKM,YAAY,KAAKF,aAAaG,gBAAe;EACpD;EAEA,MAAMzB,QAAQ;AACZ,WAAOC,QAAQC,IAAI;SAAI,KAAKwB,OAAOtB,IAAI,CAACuB,UAAUA,MAAM3B,MAAK,CAAA;KAAI;EACnE;EAEA,IAAI0B,SAAS;AACX,WAAOpB,MAAMC,KAAK,KAAKgB,QAAQf,OAAM,CAAA;EACvC;EAEAoB,SAASC,UAAqB;AAC5B,WAAO,KAAKN,QAAQZ,IAAIkB,QAAAA;EAC1B;EAEAC,qBAAqB;AACnB,WAAO,IAAIC,aAAa;MACtBP,WAAW,KAAKF,aAAaG,gBAAe;MAC5CO,gBAAgB,KAAKlC,wBAAuB;IAC9C,CAAA;EACF;EAEA,MAAMmC,YACJhB,cAAyB,KAAKA,aAC9BY,UACAK,YACgC;AAChC,QAAI,CAACL,UAAU;AACbA,iBAAW,MAAM,KAAKX,QAAQC,UAAS;IACzC;AAEA,UAAMgB,cAAc,MAAM,KAAKjB,QAAQC,UAAS;AAChD,UAAMiB,WAAW,MAAM,KAAKZ,UAAUa,SAASF,aAAa;MAAEG,UAAU;IAAK,CAAA;AAE7E,UAAMC,iBAAiB,MAAM,KAAKrB,QAAQC,UAAS;AACnD,UAAMqB,cAAc,MAAM,KAAKhB,UAAUa,SAASE,gBAAgB;MAAED,UAAU;IAAK,CAAA;AACnF,UAAMG,cAAcP,aAAa,MAAM,KAAKV,UAAUa,SAASH,UAAAA,IAAcM;AAC7E,UAAME,kBAAkB,IAAIC,gBAAgB,IAAIC,cAAclD,cAAAA,EAAgBmD,gBAAgB,WAAA,CAAA,CAAA;AAE9F,UAAMC,gBAAgB,IAAIC,cAAcrD,cAAAA,EAAgBmD,gBAAgB,UAAA,CAAA;AACxE,UAAMC,cAAcE,SAAS;MAAEC,KAAKpB;IAAS,CAAA;AAC7C,UAAMqB,yBAAuC,IAAIC,aAAa;MAC5DC,cAAc,IAAIC,aAAAA,EAAeC,cAAcC,aAAAA;MAC/CT;MACAJ;MACAc,WAAWvC;MACXY;MACA4B,kBAAkB,CAACC,YAAY/B,MAAMgC,WAAWC,MAAMjD,IAAI+C,OAAAA;MAC1DG,YAAYC;IACd,CAAA;AACA,UAAMnC,QAAQ,IAAIoC,MAAM;MACtBlC;MACAmC,UAAU,KAAKC,oBAAoBpC,QAAAA;MACnCY;MACAyB,cAAc,CAACR,YAAY,KAAKlC,UAAUa,SAASqB,OAAAA;IACrD,CAAA,EACGS,eAAe3B,WAAAA,EACf4B,YAAYhC,QAAAA;AACf,UAAMT,MAAM0C,KAAI;AAChB,UAAMnB,uBAAuBmB,KAAK;MAChCC,cAAc,OAAOC,UAAU;AAC7B,cAAMC,WAAW,MAAM7C,MAAM8C,mBAAmB;UAAEF;QAAM,CAAA;AACxD,cAAMC,SAASD,MAAK;AACpB,eAAOC;MACT;IACF,CAAA;AAEA,SAAKjD,QAAQF,IAAIQ,UAAUF,KAAAA;AAC3B,WAAO;MAACA;MAAOuB;;EACjB;EAEAe,oBAAoBS,OAAkBC,QAAiB;AACrD,WAAO,IAAIC,cAAc;MACvBF;MACAG,eAAe;QACbC,SAAS,KAAKpE;QACdqE,oBAAoBC;QACpBC,yBAAyBC;MAC3B;MACAlD,gBAAgB,KAAKlC,wBAAuB;MAC5CqF,eAAe,CAACC,YAAY;AAC1BA,gBAAQC,aACN,8BACCV,0BAAU,KAAKW,aAAY,GAAIC,gBAAgB;UAAEC,cAAcJ,QAAQI;QAAa,CAAA,CAAA;MAEzF;IACF,CAAA;EACF;EAEAF,eAAe;AACb,WAAO,IAAIG,OAAO;MAChBC,aAAa,KAAKhF;IACpB,CAAA;EACF;EAEAiF,eAAehB,QAAiB;AAC9B,WAAO,IAAIiB,SAAS;MAClBC,kBAAkB;MAClBC,gBAAgB;MAChB7E,aAAa,KAAKA;MAClB0D,QAAQA,0BAAU,KAAKW,aAAY;IACrC,CAAA;EACF;AACF;;;AExMA,SAASS,oBAAoB;AAC7B,SAASC,iBAAAA,sBAAqB;AAC9B,SAASC,sBAAsBC,mBAAmB;AAClD,SAASC,sBAAsB;AAC/B,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,gBAAAA,qBAAoB;AAE7B,SAASC,iBAAiB;AAKnB,IAAMC,uBAAuB,OAAOC,iBAA+B;AACxE,QAAMC,OAAO,IAAIC,eAAAA;AACjB,QAAMC,UAAU,IAAIC,oBAAoBH,MAAMI,MAAAA;AAE9CJ,OAAKK,QAAQC,GAAG,CAAC,CAACC,MAAMC,IAAAA,MACtBN,QAAQO,cAAc;IACpBC,OAAOH,KAAKG;IACZF,MAAM;MACJ,GAAGA;MACHG,WAAWC,WAAUC,OAAM;MAC3BC,WAAW,IAAIC,UAAU;QAAC;UAACP,KAAKQ;UAASR,KAAKS;;OAAK;IACrD;EACF,CAAA,CAAA;AAGF,QAAMC,cAAc,IAAIC,YAAYpB,YAAAA;AACpC,QAAMG,QAAQkB,KAAKF,aAAa,IAAIG,cAAAA,EAAeC,cAAcC,cAAAA,CAAAA;AACjE,SAAO;IACLrB;IACAgB;EACF;AACF;AAEO,IAAMM,0CAA0C,OACrDzB,cACA0B,oBACG;AACH,QAAMC,2BAA2B,IAAIC,yBAAAA;AACrC,QAAMC,cAAc,IAAIC,gBAAgBH,wBAAAA;AAExC,QAAMI,WAAWlB,WAAUC,OAAM;AACjCa,2BAAyBK,cAAcD,UAAUL,eAAAA;AAEjD,QAAMvB,UAAU,IAAI8B,qBAAqBJ,aAAaE,QAAAA;AACtD,QAAMZ,cAAc,IAAIC,YAAYpB,YAAAA;AACpC,QAAMG,QAAQkB,KAAKF,aAAa,IAAIG,cAAAA,EAAeC,cAAcC,cAAAA,CAAAA;AACjE,SAAO;IACLL;IACAhB;EACF;AACF;AAEO,IAAM+B,oBAAoB,OAAOC,QAAsBC,QAAsBD,WAAW;AA1D/F;AA2DE,QAAME,WAAWxB,WAAUC,OAAM,EAAGwB,MAAK;AACzC,UAAMH,YAAOI,gBAAiBC,eAAc,MAAtCL,mBAA0CM,MAAM;IACpD9B,OAAO;MACL+B,SAAS;QACP;UACEL;UACAM,SAAS;YACPC,WAAWpB,eAAcf,KAAKoC;UAChC;QACF;;IAEJ;EACF;AAEA,QAAMC,aACJV,MAAMG,gBAAiBQ,aAAaC,SAASC,iBAAiB,MAAMb,MAAMc,aAAaC,SAASC,IAAIf,QAAAA,CAAAA,GACpG,GAAA;AAEJ;",
|
|
6
|
+
"names": ["DocumentModel", "PublicKey", "MemorySignalManager", "MemorySignalManagerContext", "WebsocketSignalManager", "ModelFactory", "createWebRTCTransportFactory", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "Gossip", "Presence", "ComplexMap", "TestBuilder", "TestFeedBuilder", "TestBuilder", "constructor", "valueEncoding", "MemoryNetworkManagerProvider", "signalContext", "NetworkManager", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "WebsocketNetworkManagerProvider", "signalUrl", "WebsocketSignalManager", "createWebRTCTransportFactory", "TestAgentBuilder", "constructor", "storage", "networkManagerProvider", "_agents", "ComplexMap", "PublicKey", "hash", "_storage", "createStorage", "type", "StorageType", "RAM", "_networkManagerProvider", "MemorySignalManagerContext", "close", "Promise", "all", "agents", "map", "agent", "Array", "from", "values", "getAgent", "deviceKey", "get", "createPeer", "feedBuilder", "TestFeedBuilder", "setStorage", "size", "identityKey", "keyring", "createKey", "TestAgent", "set", "_feedBuilder", "_spaces", "feedStore", "createFeedStore", "spaces", "space", "getSpace", "spaceKey", "createSpaceManager", "SpaceManager", "networkManager", "createSpace", "genesisKey", "dataFeedKey", "dataFeed", "openFeed", "writable", "controlFeedKey", "controlFeed", "genesisFeed", "snapshotManager", "SnapshotManager", "SnapshotStore", "createDirectory", "metadataStore", "MetadataStore", "addSpace", "key", "dataPipelineController", "DataPipeline", "modelFactory", "ModelFactory", "registerModel", "DocumentModel", "memberKey", "feedInfoProvider", "feedKey", "spaceState", "feeds", "snapshotId", "undefined", "Space", "protocol", "createSpaceProtocol", "feedProvider", "setControlFeed", "setDataFeed", "open", "openPipeline", "start", "pipeline", "createDataPipeline", "topic", "gossip", "SpaceProtocol", "swarmIdentity", "peerKey", "credentialProvider", "MOCK_AUTH_PROVIDER", "credentialAuthenticator", "MOCK_AUTH_VERIFIER", "onSessionAuth", "session", "addExtension", "createGossip", "createExtension", "remotePeerId", "Gossip", "localPeerId", "createPresence", "Presence", "announceInterval", "offlineTimeout", "asyncTimeout", "DocumentModel", "DatabaseBackendProxy", "ItemManager", "MockFeedWriter", "PublicKey", "ModelFactory", "Timeframe", "createMemoryDatabase", "modelFactory", "feed", "MockFeedWriter", "backend", "DatabaseBackendHost", "undefined", "written", "on", "data", "meta", "echoProcessor", "batch", "memberKey", "PublicKey", "random", "timeframe", "Timeframe", "feedKey", "seq", "itemManager", "ItemManager", "open", "ModelFactory", "registerModel", "DocumentModel", "createRemoteDatabaseFromDataServiceHost", "dataServiceHost", "dataServiceSubscriptions", "DataServiceSubscriptions", "dataService", "DataServiceImpl", "spaceKey", "registerSpace", "DatabaseBackendProxy", "testLocalDatabase", "create", "check", "objectId", "toHex", "databaseBackend", "getWriteStream", "write", "objects", "genesis", "modelType", "type", "asyncTimeout", "_itemDemuxer", "mutation", "waitForCondition", "_itemManager", "entities", "has"]
|
|
7
7
|
}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -33,7 +33,7 @@ __export(src_exports, {
|
|
|
33
33
|
AuthExtension: () => AuthExtension,
|
|
34
34
|
AuthStatus: () => AuthStatus,
|
|
35
35
|
DBError: () => DBError,
|
|
36
|
-
|
|
36
|
+
DataPipeline: () => DataPipeline,
|
|
37
37
|
DataServiceHost: () => DataServiceHost,
|
|
38
38
|
DataServiceImpl: () => DataServiceImpl,
|
|
39
39
|
DataServiceSubscriptions: () => DataServiceSubscriptions,
|
|
@@ -45,7 +45,6 @@ __export(src_exports, {
|
|
|
45
45
|
MOCK_AUTH_PROVIDER: () => MOCK_AUTH_PROVIDER,
|
|
46
46
|
MOCK_AUTH_VERIFIER: () => MOCK_AUTH_VERIFIER,
|
|
47
47
|
MetadataStore: () => MetadataStore,
|
|
48
|
-
NoopDataPipelineController: () => NoopDataPipelineController,
|
|
49
48
|
Pipeline: () => Pipeline,
|
|
50
49
|
STORAGE_VERSION: () => STORAGE_VERSION,
|
|
51
50
|
SnapshotManager: () => SnapshotManager,
|
|
@@ -170,7 +169,7 @@ var MetadataStore = class {
|
|
|
170
169
|
size: dataSize
|
|
171
170
|
}, {
|
|
172
171
|
file: "metadata-store.ts",
|
|
173
|
-
line:
|
|
172
|
+
line: 67,
|
|
174
173
|
scope: this,
|
|
175
174
|
callSite: (f, a) => f(...a)
|
|
176
175
|
});
|
|
@@ -186,7 +185,7 @@ var MetadataStore = class {
|
|
|
186
185
|
err
|
|
187
186
|
}, {
|
|
188
187
|
file: "metadata-store.ts",
|
|
189
|
-
line:
|
|
188
|
+
line: 79,
|
|
190
189
|
scope: this,
|
|
191
190
|
callSite: (f, a) => f(...a)
|
|
192
191
|
});
|
|
@@ -211,7 +210,7 @@ var MetadataStore = class {
|
|
|
211
210
|
size: encoded.length
|
|
212
211
|
}, {
|
|
213
212
|
file: "metadata-store.ts",
|
|
214
|
-
line:
|
|
213
|
+
line: 102,
|
|
215
214
|
scope: this,
|
|
216
215
|
callSite: (f, a) => f(...a)
|
|
217
216
|
});
|
|
@@ -226,7 +225,7 @@ var MetadataStore = class {
|
|
|
226
225
|
async clear() {
|
|
227
226
|
(0, import_log.log)("clearing all metadata", {}, {
|
|
228
227
|
file: "metadata-store.ts",
|
|
229
|
-
line:
|
|
228
|
+
line: 115,
|
|
230
229
|
scope: this,
|
|
231
230
|
callSite: (f, a) => f(...a)
|
|
232
231
|
});
|
|
@@ -282,6 +281,7 @@ var fromBytesInt32 = (buf) => buf.readInt32LE(0);
|
|
|
282
281
|
// packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts
|
|
283
282
|
var import_node_assert4 = __toESM(require("node:assert"));
|
|
284
283
|
var import_async3 = require("@dxos/async");
|
|
284
|
+
var import_context = require("@dxos/context");
|
|
285
285
|
var import_feed_store = require("@dxos/feed-store");
|
|
286
286
|
var import_keys = require("@dxos/keys");
|
|
287
287
|
var import_log3 = require("@dxos/log");
|
|
@@ -416,7 +416,7 @@ var PipelineState = class {
|
|
|
416
416
|
return this._timeframeClock.timeframe;
|
|
417
417
|
}
|
|
418
418
|
get targetTimeframe() {
|
|
419
|
-
return this._targetTimeframe ?
|
|
419
|
+
return this._targetTimeframe ? this._targetTimeframe : new import_timeframe2.Timeframe();
|
|
420
420
|
}
|
|
421
421
|
async waitUntilTimeframe(target) {
|
|
422
422
|
await this._timeframeClock.waitUntilReached(target);
|
|
@@ -431,7 +431,7 @@ var PipelineState = class {
|
|
|
431
431
|
*
|
|
432
432
|
* @param timeout Timeout in milliseconds to specify the maximum wait time.
|
|
433
433
|
*/
|
|
434
|
-
async waitUntilReachedTargetTimeframe({ timeout } = {}) {
|
|
434
|
+
async waitUntilReachedTargetTimeframe({ ctx = new import_context.Context(), timeout, breakOnStall = true } = {}) {
|
|
435
435
|
var _a;
|
|
436
436
|
(0, import_log3.log)("waitUntilReachedTargetTimeframe", {
|
|
437
437
|
timeout,
|
|
@@ -439,7 +439,7 @@ var PipelineState = class {
|
|
|
439
439
|
target: this.targetTimeframe
|
|
440
440
|
}, {
|
|
441
441
|
file: "pipeline.ts",
|
|
442
|
-
line:
|
|
442
|
+
line: 96,
|
|
443
443
|
scope: this,
|
|
444
444
|
callSite: (f, a) => f(...a)
|
|
445
445
|
});
|
|
@@ -447,11 +447,14 @@ var PipelineState = class {
|
|
|
447
447
|
this._timeframeClock.update.waitForCondition(() => {
|
|
448
448
|
return import_timeframe2.Timeframe.dependencies(this.targetTimeframe, this.timeframe).isEmpty();
|
|
449
449
|
}),
|
|
450
|
-
|
|
450
|
+
...breakOnStall ? [
|
|
451
|
+
this._iterator.stalled.discardParameter().waitForCount(1)
|
|
452
|
+
] : []
|
|
451
453
|
]);
|
|
452
454
|
let done = false;
|
|
453
455
|
if (timeout) {
|
|
454
456
|
return Promise.race([
|
|
457
|
+
(0, import_context.rejectOnDispose)(ctx),
|
|
455
458
|
this._reachedTargetPromise.then(() => {
|
|
456
459
|
done = true;
|
|
457
460
|
}),
|
|
@@ -466,7 +469,7 @@ var PipelineState = class {
|
|
|
466
469
|
dependencies: import_timeframe2.Timeframe.dependencies(this.targetTimeframe, this.timeframe)
|
|
467
470
|
}, {
|
|
468
471
|
file: "pipeline.ts",
|
|
469
|
-
line:
|
|
472
|
+
line: 122,
|
|
470
473
|
scope: this,
|
|
471
474
|
callSite: (f, a) => f(...a)
|
|
472
475
|
});
|
|
@@ -492,7 +495,7 @@ var Pipeline = class {
|
|
|
492
495
|
this._feedSetIterator.stalled.on((iterator) => {
|
|
493
496
|
import_log3.log.warn(`Stalled after ${iterator.options.stallTimeout}ms with ${iterator.size} feeds.`, {}, {
|
|
494
497
|
file: "pipeline.ts",
|
|
495
|
-
line:
|
|
498
|
+
line: 198,
|
|
496
499
|
scope: this,
|
|
497
500
|
callSite: (f, a) => f(...a)
|
|
498
501
|
});
|
|
@@ -522,14 +525,14 @@ var Pipeline = class {
|
|
|
522
525
|
async start() {
|
|
523
526
|
(0, import_log3.log)("starting...", {}, {
|
|
524
527
|
file: "pipeline.ts",
|
|
525
|
-
line:
|
|
528
|
+
line: 233,
|
|
526
529
|
scope: this,
|
|
527
530
|
callSite: (f, a) => f(...a)
|
|
528
531
|
});
|
|
529
532
|
await this._feedSetIterator.open();
|
|
530
533
|
(0, import_log3.log)("started", {}, {
|
|
531
534
|
file: "pipeline.ts",
|
|
532
|
-
line:
|
|
535
|
+
line: 235,
|
|
533
536
|
scope: this,
|
|
534
537
|
callSite: (f, a) => f(...a)
|
|
535
538
|
});
|
|
@@ -537,7 +540,7 @@ var Pipeline = class {
|
|
|
537
540
|
async stop() {
|
|
538
541
|
(0, import_log3.log)("stopping...", {}, {
|
|
539
542
|
file: "pipeline.ts",
|
|
540
|
-
line:
|
|
543
|
+
line: 239,
|
|
541
544
|
scope: this,
|
|
542
545
|
callSite: (f, a) => f(...a)
|
|
543
546
|
});
|
|
@@ -545,7 +548,7 @@ var Pipeline = class {
|
|
|
545
548
|
await this._processingTrigger.wait();
|
|
546
549
|
(0, import_log3.log)("stopped", {}, {
|
|
547
550
|
file: "pipeline.ts",
|
|
548
|
-
line:
|
|
551
|
+
line: 242,
|
|
549
552
|
scope: this,
|
|
550
553
|
callSite: (f, a) => f(...a)
|
|
551
554
|
});
|
|
@@ -570,7 +573,7 @@ var Pipeline = class {
|
|
|
570
573
|
// packages/core/echo/echo-pipeline/src/space/auth.ts
|
|
571
574
|
var import_node_assert5 = __toESM(require("node:assert"));
|
|
572
575
|
var import_async4 = require("@dxos/async");
|
|
573
|
-
var
|
|
576
|
+
var import_context2 = require("@dxos/context");
|
|
574
577
|
var import_crypto = require("@dxos/crypto");
|
|
575
578
|
var import_log4 = require("@dxos/log");
|
|
576
579
|
var import_protocols3 = require("@dxos/protocols");
|
|
@@ -588,7 +591,7 @@ var AuthExtension = class extends import_teleport.RpcExtension {
|
|
|
588
591
|
// Long timeout because auth can wait for sync in certain cases.
|
|
589
592
|
});
|
|
590
593
|
this._authParams = _authParams;
|
|
591
|
-
this._ctx = new
|
|
594
|
+
this._ctx = new import_context2.Context({
|
|
592
595
|
onError: (err) => {
|
|
593
596
|
import_log4.log.catch(err, {}, {
|
|
594
597
|
file: "auth.ts",
|
|
@@ -817,7 +820,7 @@ var Space = class Space2 {
|
|
|
817
820
|
credential
|
|
818
821
|
}, {
|
|
819
822
|
file: "space.ts",
|
|
820
|
-
line:
|
|
823
|
+
line: 79,
|
|
821
824
|
scope: this,
|
|
822
825
|
callSite: (f, a) => f(...a)
|
|
823
826
|
});
|
|
@@ -880,7 +883,7 @@ var Space = class Space2 {
|
|
|
880
883
|
async open() {
|
|
881
884
|
(0, import_log6.log)("opening...", {}, {
|
|
882
885
|
file: "space.ts",
|
|
883
|
-
line:
|
|
886
|
+
line: 149,
|
|
884
887
|
scope: this,
|
|
885
888
|
callSite: (f, a) => f(...a)
|
|
886
889
|
});
|
|
@@ -892,18 +895,17 @@ var Space = class Space2 {
|
|
|
892
895
|
this._isOpen = true;
|
|
893
896
|
(0, import_log6.log)("opened", {}, {
|
|
894
897
|
file: "space.ts",
|
|
895
|
-
line:
|
|
898
|
+
line: 159,
|
|
896
899
|
scope: this,
|
|
897
900
|
callSite: (f, a) => f(...a)
|
|
898
901
|
});
|
|
899
902
|
}
|
|
900
903
|
async close() {
|
|
901
|
-
var _a;
|
|
902
904
|
(0, import_log6.log)("closing...", {
|
|
903
905
|
key: this._key
|
|
904
906
|
}, {
|
|
905
907
|
file: "space.ts",
|
|
906
|
-
line:
|
|
908
|
+
line: 164,
|
|
907
909
|
scope: this,
|
|
908
910
|
callSite: (f, a) => f(...a)
|
|
909
911
|
});
|
|
@@ -911,37 +913,30 @@ var Space = class Space2 {
|
|
|
911
913
|
return;
|
|
912
914
|
}
|
|
913
915
|
await this.protocol.stop();
|
|
914
|
-
await ((_a = this._dataPipelineController) == null ? void 0 : _a.close());
|
|
915
916
|
await this._controlPipeline.stop();
|
|
916
917
|
this._isOpen = false;
|
|
917
918
|
(0, import_log6.log)("closed", {}, {
|
|
918
919
|
file: "space.ts",
|
|
919
|
-
line:
|
|
920
|
+
line: 174,
|
|
920
921
|
scope: this,
|
|
921
922
|
callSite: (f, a) => f(...a)
|
|
922
923
|
});
|
|
923
924
|
}
|
|
924
|
-
|
|
925
|
+
// TODO(dmaretskyi): Make reusable.
|
|
926
|
+
async createDataPipeline({ start }) {
|
|
925
927
|
(0, import_node_assert6.default)(this._isOpen, "Space must be open to initialize data pipeline.");
|
|
926
|
-
(0, import_node_assert6.default)(!this._dataPipelineController, "Data pipeline already initialized.");
|
|
927
928
|
(0, import_node_assert6.default)(!this._dataPipeline, "Data pipeline already initialized.");
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
for (const feed of this._controlPipeline.spaceState.feeds.values()) {
|
|
937
|
-
if (feed.assertion.designation === import_credentials3.AdmittedFeed.Designation.DATA) {
|
|
938
|
-
await this._dataPipeline.addFeed(await this._feedProvider(feed.key));
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
await this._dataPipeline.start();
|
|
942
|
-
return this._dataPipeline;
|
|
929
|
+
const pipeline = new Pipeline(start);
|
|
930
|
+
if (this._dataFeed) {
|
|
931
|
+
pipeline.setWriteFeed(this._dataFeed);
|
|
932
|
+
}
|
|
933
|
+
this._dataPipeline = pipeline;
|
|
934
|
+
for (const feed of this._controlPipeline.spaceState.feeds.values()) {
|
|
935
|
+
if (feed.assertion.designation === import_credentials3.AdmittedFeed.Designation.DATA) {
|
|
936
|
+
await pipeline.addFeed(await this._feedProvider(feed.key));
|
|
943
937
|
}
|
|
944
|
-
}
|
|
938
|
+
}
|
|
939
|
+
return pipeline;
|
|
945
940
|
}
|
|
946
941
|
};
|
|
947
942
|
__decorate3([
|
|
@@ -1274,10 +1269,10 @@ var spaceGenesis = async (keyring, signingContext, space) => {
|
|
|
1274
1269
|
return credentials;
|
|
1275
1270
|
};
|
|
1276
1271
|
|
|
1277
|
-
// packages/core/echo/echo-pipeline/src/space/data-pipeline
|
|
1272
|
+
// packages/core/echo/echo-pipeline/src/space/data-pipeline.ts
|
|
1278
1273
|
var import_node_assert9 = __toESM(require("node:assert"));
|
|
1279
1274
|
var import_async8 = require("@dxos/async");
|
|
1280
|
-
var
|
|
1275
|
+
var import_context3 = require("@dxos/context");
|
|
1281
1276
|
var import_debug6 = require("@dxos/debug");
|
|
1282
1277
|
var import_echo_db3 = require("@dxos/echo-db");
|
|
1283
1278
|
var import_log11 = require("@dxos/log");
|
|
@@ -1556,7 +1551,7 @@ var DataServiceImpl = class {
|
|
|
1556
1551
|
}
|
|
1557
1552
|
};
|
|
1558
1553
|
|
|
1559
|
-
// packages/core/echo/echo-pipeline/src/space/data-pipeline
|
|
1554
|
+
// packages/core/echo/echo-pipeline/src/space/data-pipeline.ts
|
|
1560
1555
|
var __decorate7 = function(decorators, target, key, desc) {
|
|
1561
1556
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1562
1557
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
@@ -1567,22 +1562,21 @@ var __decorate7 = function(decorators, target, key, desc) {
|
|
|
1567
1562
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1568
1563
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1569
1564
|
};
|
|
1570
|
-
var NoopDataPipelineController = class {
|
|
1571
|
-
async open(context) {
|
|
1572
|
-
}
|
|
1573
|
-
async close() {
|
|
1574
|
-
}
|
|
1575
|
-
};
|
|
1576
1565
|
var MESSAGES_PER_SNAPSHOT = 10;
|
|
1577
1566
|
var AUTOMATIC_SNAPSHOT_DEBOUNCE_INTERVAL = 5e3;
|
|
1578
1567
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL = 500;
|
|
1579
|
-
var
|
|
1568
|
+
var DISABLE_SNAPSHOT_CACHE = false;
|
|
1569
|
+
var DataPipeline = class DataPipeline2 {
|
|
1580
1570
|
constructor(_params) {
|
|
1581
1571
|
this._params = _params;
|
|
1582
|
-
this._ctx = new
|
|
1572
|
+
this._ctx = new import_context3.Context();
|
|
1583
1573
|
this._lastAutomaticSnapshotTimeframe = new import_timeframe3.Timeframe();
|
|
1574
|
+
this._isOpen = false;
|
|
1584
1575
|
this.onTimeframeReached = new import_async8.Event();
|
|
1585
1576
|
}
|
|
1577
|
+
get isOpen() {
|
|
1578
|
+
return this._isOpen;
|
|
1579
|
+
}
|
|
1586
1580
|
get pipelineState() {
|
|
1587
1581
|
var _a;
|
|
1588
1582
|
return (_a = this._pipeline) == null ? void 0 : _a.state;
|
|
@@ -1595,14 +1589,25 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1595
1589
|
var _a;
|
|
1596
1590
|
return snapshotTimeframeToStartingTimeframe((_a = this.snapshotTimeframe) != null ? _a : new import_timeframe3.Timeframe());
|
|
1597
1591
|
}
|
|
1592
|
+
setTargetTimeframe(timeframe) {
|
|
1593
|
+
var _a;
|
|
1594
|
+
this._targetTimeframe = timeframe;
|
|
1595
|
+
(_a = this._pipeline) == null ? void 0 : _a.state.setTargetTimeframe(timeframe);
|
|
1596
|
+
}
|
|
1598
1597
|
async open(spaceContext) {
|
|
1599
1598
|
var _a, _b, _c, _d;
|
|
1599
|
+
if (this._isOpen) {
|
|
1600
|
+
return;
|
|
1601
|
+
}
|
|
1600
1602
|
this._spaceContext = spaceContext;
|
|
1601
1603
|
if (this._params.snapshotId) {
|
|
1602
1604
|
this._snapshot = await this._params.snapshotManager.load(this._params.snapshotId);
|
|
1603
1605
|
this._lastAutomaticSnapshotTimeframe = (_b = (_a = this._snapshot) == null ? void 0 : _a.timeframe) != null ? _b : new import_timeframe3.Timeframe();
|
|
1604
1606
|
}
|
|
1605
1607
|
this._pipeline = await this._spaceContext.openPipeline(this.getStartTimeframe());
|
|
1608
|
+
if (this._targetTimeframe) {
|
|
1609
|
+
this._pipeline.state.setTargetTimeframe(this._targetTimeframe);
|
|
1610
|
+
}
|
|
1606
1611
|
const feedWriter = createMappedFeedWriter((data) => ({
|
|
1607
1612
|
data
|
|
1608
1613
|
}), (_c = this._pipeline.writer) != null ? _c : (0, import_debug6.failUndefined)());
|
|
@@ -1613,30 +1618,33 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1613
1618
|
await this._consumePipeline();
|
|
1614
1619
|
});
|
|
1615
1620
|
this._createPeriodicSnapshots();
|
|
1621
|
+
this._isOpen = true;
|
|
1616
1622
|
}
|
|
1617
1623
|
_createPeriodicSnapshots() {
|
|
1618
1624
|
this.onTimeframeReached.debounce(TIMEFRAME_SAVE_DEBOUNCE_INTERVAL).on(this._ctx, async () => {
|
|
1619
1625
|
await this._saveLatestTimeframe();
|
|
1620
1626
|
});
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1627
|
+
if (!DISABLE_SNAPSHOT_CACHE) {
|
|
1628
|
+
this.onTimeframeReached.debounce(AUTOMATIC_SNAPSHOT_DEBOUNCE_INTERVAL).on(this._ctx, async () => {
|
|
1629
|
+
var _a, _b;
|
|
1630
|
+
const latestTimeframe = (_a = this._pipeline) == null ? void 0 : _a.state.timeframe;
|
|
1631
|
+
if (!latestTimeframe) {
|
|
1632
|
+
return;
|
|
1633
|
+
}
|
|
1634
|
+
if (latestTimeframe.totalMessages() - this._lastAutomaticSnapshotTimeframe.totalMessages() > MESSAGES_PER_SNAPSHOT) {
|
|
1635
|
+
const snapshot = await this._saveSnapshot();
|
|
1636
|
+
this._lastAutomaticSnapshotTimeframe = (_b = snapshot.timeframe) != null ? _b : (0, import_debug6.failUndefined)();
|
|
1637
|
+
(0, import_log11.log)("save", {
|
|
1638
|
+
snapshot
|
|
1639
|
+
}, {
|
|
1640
|
+
file: "data-pipeline.ts",
|
|
1641
|
+
line: 161,
|
|
1642
|
+
scope: this,
|
|
1643
|
+
callSite: (f, a) => f(...a)
|
|
1644
|
+
});
|
|
1645
|
+
}
|
|
1646
|
+
});
|
|
1647
|
+
}
|
|
1640
1648
|
}
|
|
1641
1649
|
async _saveSnapshot() {
|
|
1642
1650
|
const snapshot = await this.createSnapshot();
|
|
@@ -1645,21 +1653,41 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1645
1653
|
return snapshot;
|
|
1646
1654
|
}
|
|
1647
1655
|
async _saveLatestTimeframe() {
|
|
1648
|
-
var _a;
|
|
1656
|
+
var _a, _b;
|
|
1649
1657
|
const latestTimeframe = (_a = this._pipeline) == null ? void 0 : _a.state.timeframe;
|
|
1658
|
+
(0, import_log11.log)("save latest timeframe", {
|
|
1659
|
+
latestTimeframe,
|
|
1660
|
+
spaceKey: this._params.spaceKey
|
|
1661
|
+
}, {
|
|
1662
|
+
file: "data-pipeline.ts",
|
|
1663
|
+
line: 176,
|
|
1664
|
+
scope: this,
|
|
1665
|
+
callSite: (f, a) => f(...a)
|
|
1666
|
+
});
|
|
1650
1667
|
if (latestTimeframe) {
|
|
1651
|
-
|
|
1668
|
+
const newTimeframe = import_timeframe3.Timeframe.merge((_b = this._targetTimeframe) != null ? _b : new import_timeframe3.Timeframe(), latestTimeframe);
|
|
1669
|
+
await this._params.metadataStore.setSpaceLatestTimeframe(this._params.spaceKey, newTimeframe);
|
|
1652
1670
|
}
|
|
1653
1671
|
}
|
|
1654
1672
|
async close() {
|
|
1655
1673
|
var _a, _b, _c;
|
|
1674
|
+
if (!this._isOpen) {
|
|
1675
|
+
return;
|
|
1676
|
+
}
|
|
1677
|
+
(0, import_log11.log)("close", {}, {
|
|
1678
|
+
file: "data-pipeline.ts",
|
|
1679
|
+
line: 188,
|
|
1680
|
+
scope: this,
|
|
1681
|
+
callSite: (f, a) => f(...a)
|
|
1682
|
+
});
|
|
1683
|
+
this._isOpen = false;
|
|
1656
1684
|
try {
|
|
1657
1685
|
await this._saveLatestTimeframe();
|
|
1658
1686
|
await this._saveSnapshot();
|
|
1659
1687
|
} catch (err) {
|
|
1660
1688
|
import_log11.log.catch(err, {}, {
|
|
1661
|
-
file: "data-pipeline
|
|
1662
|
-
line:
|
|
1689
|
+
file: "data-pipeline.ts",
|
|
1690
|
+
line: 195,
|
|
1663
1691
|
scope: this,
|
|
1664
1692
|
callSite: (f, a) => f(...a)
|
|
1665
1693
|
});
|
|
@@ -1672,6 +1700,7 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1672
1700
|
}
|
|
1673
1701
|
createSnapshot() {
|
|
1674
1702
|
var _a, _b;
|
|
1703
|
+
(0, import_node_assert9.default)(this.databaseBackend, "Database backend is not initialized.");
|
|
1675
1704
|
return {
|
|
1676
1705
|
spaceKey: this._params.spaceKey.asUint8Array(),
|
|
1677
1706
|
timeframe: (_b = (_a = this._pipeline) == null ? void 0 : _a.state.timeframe) != null ? _b : new import_timeframe3.Timeframe(),
|
|
@@ -1685,8 +1714,8 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1685
1714
|
(0, import_log11.log)("processing message", {
|
|
1686
1715
|
msg
|
|
1687
1716
|
}, {
|
|
1688
|
-
file: "data-pipeline
|
|
1689
|
-
line:
|
|
1717
|
+
file: "data-pipeline.ts",
|
|
1718
|
+
line: 217,
|
|
1690
1719
|
scope: this,
|
|
1691
1720
|
callSite: (f, a) => f(...a)
|
|
1692
1721
|
});
|
|
@@ -1697,8 +1726,8 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1697
1726
|
import_log11.log.error("Could not find feed.", {
|
|
1698
1727
|
feedKey
|
|
1699
1728
|
}, {
|
|
1700
|
-
file: "data-pipeline
|
|
1701
|
-
line:
|
|
1729
|
+
file: "data-pipeline.ts",
|
|
1730
|
+
line: 223,
|
|
1702
1731
|
scope: this,
|
|
1703
1732
|
callSite: (f, a) => f(...a)
|
|
1704
1733
|
});
|
|
@@ -1717,8 +1746,8 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1717
1746
|
}
|
|
1718
1747
|
} catch (err) {
|
|
1719
1748
|
import_log11.log.catch(err, {}, {
|
|
1720
|
-
file: "data-pipeline
|
|
1721
|
-
line:
|
|
1749
|
+
file: "data-pipeline.ts",
|
|
1750
|
+
line: 239,
|
|
1722
1751
|
scope: this,
|
|
1723
1752
|
callSite: (f, a) => f(...a)
|
|
1724
1753
|
});
|
|
@@ -1730,9 +1759,15 @@ var DataPipelineControllerImpl = class DataPipelineControllerImpl2 {
|
|
|
1730
1759
|
await this._pipeline.state.waitUntilTimeframe(timeframe);
|
|
1731
1760
|
}
|
|
1732
1761
|
};
|
|
1733
|
-
|
|
1762
|
+
__decorate7([
|
|
1763
|
+
import_async8.synchronized
|
|
1764
|
+
], DataPipeline.prototype, "open", null);
|
|
1765
|
+
__decorate7([
|
|
1766
|
+
import_async8.synchronized
|
|
1767
|
+
], DataPipeline.prototype, "close", null);
|
|
1768
|
+
DataPipeline = __decorate7([
|
|
1734
1769
|
(0, import_async8.trackLeaks)("open", "close")
|
|
1735
|
-
],
|
|
1770
|
+
], DataPipeline);
|
|
1736
1771
|
var snapshotTimeframeToStartingTimeframe = (snapshotTimeframe) => {
|
|
1737
1772
|
return snapshotTimeframe.map(([key, seq]) => [
|
|
1738
1773
|
key,
|
|
@@ -1744,7 +1779,7 @@ var snapshotTimeframeToStartingTimeframe = (snapshotTimeframe) => {
|
|
|
1744
1779
|
AuthExtension,
|
|
1745
1780
|
AuthStatus,
|
|
1746
1781
|
DBError,
|
|
1747
|
-
|
|
1782
|
+
DataPipeline,
|
|
1748
1783
|
DataServiceHost,
|
|
1749
1784
|
DataServiceImpl,
|
|
1750
1785
|
DataServiceSubscriptions,
|
|
@@ -1756,7 +1791,6 @@ var snapshotTimeframeToStartingTimeframe = (snapshotTimeframe) => {
|
|
|
1756
1791
|
MOCK_AUTH_PROVIDER,
|
|
1757
1792
|
MOCK_AUTH_VERIFIER,
|
|
1758
1793
|
MetadataStore,
|
|
1759
|
-
NoopDataPipelineController,
|
|
1760
1794
|
Pipeline,
|
|
1761
1795
|
STORAGE_VERSION,
|
|
1762
1796
|
SnapshotManager,
|