@dxos/echo-db 2.33.5-dev.0a40e013 → 2.33.5-dev.0d84e06f
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/src/api/index.d.ts +0 -5
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js +0 -5
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/schema.test.js +1 -1
- package/dist/src/api/schema.test.js.map +1 -1
- package/dist/src/echo.d.ts +1 -0
- package/dist/src/echo.d.ts.map +1 -1
- package/dist/src/echo.js +9 -20
- package/dist/src/echo.js.map +1 -1
- package/dist/src/echo.test.js +12 -0
- package/dist/src/echo.test.js.map +1 -1
- package/dist/src/halo/contact-manager.d.ts +2 -1
- package/dist/src/halo/contact-manager.d.ts.map +1 -1
- package/dist/src/halo/contact-manager.js +1 -1
- package/dist/src/halo/contact-manager.js.map +1 -1
- package/dist/src/halo/halo-factory.d.ts.map +1 -1
- package/dist/src/halo/halo-factory.js +5 -11
- package/dist/src/halo/halo-factory.js.map +1 -1
- package/dist/src/halo/halo-party.d.ts +1 -1
- package/dist/src/halo/halo-party.d.ts.map +1 -1
- package/dist/src/halo/halo-party.js +5 -5
- package/dist/src/halo/halo-party.js.map +1 -1
- package/dist/src/halo/halo.test.js +4 -3
- package/dist/src/halo/halo.test.js.map +1 -1
- package/dist/src/halo/identity.js +2 -2
- package/dist/src/halo/identity.js.map +1 -1
- package/dist/src/halo/party-opener.d.ts +1 -1
- package/dist/src/halo/party-opener.d.ts.map +1 -1
- package/dist/src/halo/party-opener.js +2 -2
- package/dist/src/halo/party-opener.js.map +1 -1
- package/dist/src/halo/preferences.d.ts +1 -1
- package/dist/src/halo/preferences.d.ts.map +1 -1
- package/dist/src/halo/preferences.js +8 -11
- package/dist/src/halo/preferences.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/invitations/greeting-protocol-provider.d.ts.map +1 -1
- package/dist/src/invitations/greeting-protocol-provider.js +5 -9
- package/dist/src/invitations/greeting-protocol-provider.js.map +1 -1
- package/dist/src/invitations/greeting-responder.d.ts +6 -4
- package/dist/src/invitations/greeting-responder.d.ts.map +1 -1
- package/dist/src/invitations/greeting-responder.js +11 -14
- package/dist/src/invitations/greeting-responder.js.map +1 -1
- package/dist/src/invitations/halo-recovery-initiator.js +1 -1
- package/dist/src/invitations/halo-recovery-initiator.js.map +1 -1
- package/dist/src/invitations/invitation-descriptor.js +1 -1
- package/dist/src/invitations/invitation-descriptor.js.map +1 -1
- package/dist/src/invitations/invitation-factory.d.ts +5 -2
- package/dist/src/invitations/invitation-factory.d.ts.map +1 -1
- package/dist/src/invitations/invitation-factory.js +4 -3
- package/dist/src/invitations/invitation-factory.js.map +1 -1
- package/dist/src/invitations/offline-invitation-claimer.d.ts.map +1 -1
- package/dist/src/invitations/offline-invitation-claimer.js +6 -8
- package/dist/src/invitations/offline-invitation-claimer.js.map +1 -1
- package/dist/src/{database → packlets/database}/data-mirror.d.ts +0 -0
- package/dist/src/packlets/database/data-mirror.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/data-mirror.js +0 -0
- package/dist/src/packlets/database/data-mirror.js.map +1 -0
- package/dist/src/{database → packlets/database}/data-mirror.test.d.ts +0 -0
- package/dist/src/packlets/database/data-mirror.test.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/data-mirror.test.js +0 -0
- package/dist/src/packlets/database/data-mirror.test.js.map +1 -0
- package/dist/src/{database → packlets/database}/data-service-host.d.ts +0 -0
- package/dist/src/packlets/database/data-service-host.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/data-service-host.js +4 -3
- package/dist/src/packlets/database/data-service-host.js.map +1 -0
- package/dist/src/{database → packlets/database}/data-service-router.d.ts +0 -0
- package/dist/src/packlets/database/data-service-router.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/data-service-router.js +0 -0
- package/dist/src/packlets/database/data-service-router.js.map +1 -0
- package/dist/src/{database → packlets/database}/database-backend.d.ts +0 -0
- package/dist/src/packlets/database/database-backend.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/database-backend.js +0 -0
- package/dist/src/packlets/database/database-backend.js.map +1 -0
- package/dist/src/{api → packlets/database}/database.d.ts +2 -1
- package/dist/src/packlets/database/database.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/database.js +2 -2
- package/dist/src/packlets/database/database.js.map +1 -0
- package/dist/src/{api → packlets/database}/database.test.d.ts +0 -0
- package/dist/src/packlets/database/database.test.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/database.test.js +3 -3
- package/dist/src/packlets/database/database.test.js.map +1 -0
- package/dist/src/{api → packlets/database}/entity.d.ts +1 -1
- package/dist/src/packlets/database/entity.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/entity.js +0 -0
- package/dist/src/packlets/database/entity.js.map +1 -0
- package/dist/src/{database → packlets/database}/index.d.ts +5 -0
- package/dist/src/packlets/database/index.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/index.js +5 -0
- package/dist/src/packlets/database/index.js.map +1 -0
- package/dist/src/{database → packlets/database}/item-demuxer.d.ts +3 -2
- package/dist/src/packlets/database/item-demuxer.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/item-demuxer.js +3 -3
- package/dist/src/packlets/database/item-demuxer.js.map +1 -0
- package/dist/src/{database → packlets/database}/item-demuxer.test.d.ts +0 -0
- package/dist/src/packlets/database/item-demuxer.test.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/item-demuxer.test.js +2 -2
- package/dist/src/packlets/database/item-demuxer.test.js.map +1 -0
- package/dist/src/{database → packlets/database}/item-manager.d.ts +3 -1
- package/dist/src/packlets/database/item-manager.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/item-manager.js +13 -12
- package/dist/src/packlets/database/item-manager.js.map +1 -0
- package/dist/src/{database → packlets/database}/item-manager.test.d.ts +0 -0
- package/dist/src/packlets/database/item-manager.test.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/item-manager.test.js +0 -0
- package/dist/src/packlets/database/item-manager.test.js.map +1 -0
- package/dist/src/{api → packlets/database}/item.d.ts +1 -1
- package/dist/src/packlets/database/item.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/item.js +0 -0
- package/dist/src/packlets/database/item.js.map +1 -0
- package/dist/src/{api → packlets/database}/link.d.ts +1 -1
- package/dist/src/packlets/database/link.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/link.js +0 -0
- package/dist/src/packlets/database/link.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/index.d.ts +0 -0
- package/dist/src/packlets/database/selection/index.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/index.js +0 -0
- package/dist/src/packlets/database/selection/index.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/queries.d.ts +0 -0
- package/dist/src/packlets/database/selection/queries.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/queries.js +13 -17
- package/dist/src/packlets/database/selection/queries.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/result.d.ts +0 -0
- package/dist/src/packlets/database/selection/result.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/result.js +0 -0
- package/dist/src/packlets/database/selection/result.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/selection.d.ts +0 -0
- package/dist/src/packlets/database/selection/selection.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/selection.js +1 -3
- package/dist/src/packlets/database/selection/selection.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/selection.test.d.ts +0 -0
- package/dist/src/packlets/database/selection/selection.test.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/selection.test.js +4 -12
- package/dist/src/packlets/database/selection/selection.test.js.map +1 -0
- package/dist/src/{api → packlets/database}/selection/util.d.ts +0 -0
- package/dist/src/packlets/database/selection/util.d.ts.map +1 -0
- package/dist/src/{api → packlets/database}/selection/util.js +0 -0
- package/dist/src/packlets/database/selection/util.js.map +1 -0
- package/dist/src/{database → packlets/database}/testing.d.ts +1 -1
- package/dist/src/packlets/database/testing.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/testing.js +4 -4
- package/dist/src/packlets/database/testing.js.map +1 -0
- package/dist/src/{database → packlets/database}/timeframe-clock.d.ts +0 -0
- package/dist/src/packlets/database/timeframe-clock.d.ts.map +1 -0
- package/dist/src/{database → packlets/database}/timeframe-clock.js +0 -0
- package/dist/src/packlets/database/timeframe-clock.js.map +1 -0
- package/dist/src/{errors.d.ts → packlets/errors/index.d.ts} +1 -1
- package/dist/src/packlets/errors/index.d.ts.map +1 -0
- package/dist/src/{errors.js → packlets/errors/index.js} +1 -1
- package/dist/src/packlets/errors/index.js.map +1 -0
- package/dist/src/parties/data-party.d.ts +8 -5
- package/dist/src/parties/data-party.d.ts.map +1 -1
- package/dist/src/parties/data-party.js +10 -9
- package/dist/src/parties/data-party.js.map +1 -1
- package/dist/src/parties/data-party.test.js +18 -17
- package/dist/src/parties/data-party.test.js.map +1 -1
- package/dist/src/parties/party-factory.d.ts +0 -6
- package/dist/src/parties/party-factory.d.ts.map +1 -1
- package/dist/src/parties/party-factory.js +20 -48
- package/dist/src/parties/party-factory.js.map +1 -1
- package/dist/src/parties/party-manager.d.ts.map +1 -1
- package/dist/src/parties/party-manager.js +2 -1
- package/dist/src/parties/party-manager.js.map +1 -1
- package/dist/src/parties/party-manager.test.js +13 -9
- package/dist/src/parties/party-manager.test.js.map +1 -1
- package/dist/src/pipeline/message-selector.d.ts +3 -3
- package/dist/src/pipeline/message-selector.d.ts.map +1 -1
- package/dist/src/pipeline/message-selector.js +30 -29
- package/dist/src/pipeline/message-selector.js.map +1 -1
- package/dist/src/pipeline/metadata-store.d.ts +3 -3
- package/dist/src/pipeline/metadata-store.d.ts.map +1 -1
- package/dist/src/pipeline/metadata-store.js +5 -5
- package/dist/src/pipeline/metadata-store.js.map +1 -1
- package/dist/src/pipeline/metadata-store.test.js +8 -4
- package/dist/src/pipeline/metadata-store.test.js.map +1 -1
- package/dist/src/pipeline/party-core.d.ts +4 -3
- package/dist/src/pipeline/party-core.d.ts.map +1 -1
- package/dist/src/pipeline/party-core.js +7 -7
- package/dist/src/pipeline/party-core.js.map +1 -1
- package/dist/src/pipeline/party-core.test.js +28 -27
- package/dist/src/pipeline/party-core.test.js.map +1 -1
- package/dist/src/pipeline/party-processor.d.ts +21 -9
- package/dist/src/pipeline/party-processor.d.ts.map +1 -1
- package/dist/src/pipeline/party-processor.js +0 -8
- package/dist/src/pipeline/party-processor.js.map +1 -1
- package/dist/src/pipeline/pipeline.d.ts +3 -5
- package/dist/src/pipeline/pipeline.d.ts.map +1 -1
- package/dist/src/pipeline/pipeline.js +8 -11
- package/dist/src/pipeline/pipeline.js.map +1 -1
- package/dist/src/pipeline/pipeline.test.js +4 -5
- package/dist/src/pipeline/pipeline.test.js.map +1 -1
- package/dist/src/protocol/auth-plugin.d.ts +1 -1
- package/dist/src/protocol/auth-plugin.d.ts.map +1 -1
- package/dist/src/protocol/auth-plugin.js +1 -3
- package/dist/src/protocol/auth-plugin.js.map +1 -1
- package/dist/src/protocol/authenticator.d.ts +4 -4
- package/dist/src/protocol/authenticator.d.ts.map +1 -1
- package/dist/src/protocol/authenticator.js +12 -16
- package/dist/src/protocol/authenticator.js.map +1 -1
- package/dist/src/protocol/authenticator.test.js +1 -4
- package/dist/src/protocol/authenticator.test.js.map +1 -1
- package/dist/src/protocol/halo-recovery-plugin.d.ts +1 -1
- package/dist/src/protocol/halo-recovery-plugin.d.ts.map +1 -1
- package/dist/src/protocol/halo-recovery-plugin.js +1 -3
- package/dist/src/protocol/halo-recovery-plugin.js.map +1 -1
- package/dist/src/protocol/identity-credentials.d.ts +2 -2
- package/dist/src/protocol/identity-credentials.d.ts.map +1 -1
- package/dist/src/protocol/identity-credentials.js +4 -4
- package/dist/src/protocol/identity-credentials.js.map +1 -1
- package/dist/src/protocol/offline-invitation-plugin.d.ts +1 -1
- package/dist/src/protocol/offline-invitation-plugin.d.ts.map +1 -1
- package/dist/src/protocol/offline-invitation-plugin.js +1 -3
- package/dist/src/protocol/offline-invitation-plugin.js.map +1 -1
- package/dist/src/protocol/replicator-plugin.d.ts.map +1 -1
- package/dist/src/protocol/replicator-plugin.js +4 -6
- package/dist/src/protocol/replicator-plugin.js.map +1 -1
- package/dist/src/snapshots/snapshot-generator.d.ts +2 -2
- package/dist/src/snapshots/snapshot-generator.d.ts.map +1 -1
- package/dist/src/snapshots/snapshot-generator.js +13 -15
- package/dist/src/snapshots/snapshot-generator.js.map +1 -1
- package/dist/src/snapshots/snapshot-store.d.ts +3 -3
- package/dist/src/snapshots/snapshot-store.d.ts.map +1 -1
- package/dist/src/snapshots/snapshot-store.js +5 -5
- package/dist/src/snapshots/snapshot-store.js.map +1 -1
- package/dist/src/snapshots/snapshot-store.test.js +1 -1
- package/dist/src/snapshots/snapshot-store.test.js.map +1 -1
- package/dist/src/snapshots/snapshot.test.js +1 -1
- package/dist/src/snapshots/snapshot.test.js.map +1 -1
- package/dist/src/testing/testing-factories.d.ts +1 -1
- package/dist/src/testing/testing-factories.d.ts.map +1 -1
- package/dist/src/testing/testing-factories.js +2 -2
- package/dist/src/testing/testing-factories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/src/api/index.ts +0 -5
- package/src/api/schema.test.ts +1 -2
- package/src/echo.test.ts +16 -1
- package/src/echo.ts +10 -20
- package/src/halo/contact-manager.ts +3 -2
- package/src/halo/halo-factory.ts +6 -18
- package/src/halo/halo-party.ts +10 -5
- package/src/halo/halo.test.ts +4 -3
- package/src/halo/identity.ts +2 -2
- package/src/halo/party-opener.ts +2 -2
- package/src/halo/preferences.ts +10 -12
- package/src/index.ts +3 -2
- package/src/invitations/greeting-protocol-provider.ts +5 -9
- package/src/invitations/greeting-responder.ts +15 -17
- package/src/invitations/halo-recovery-initiator.ts +1 -1
- package/src/invitations/invitation-descriptor.ts +1 -1
- package/src/invitations/invitation-factory.ts +8 -5
- package/src/invitations/offline-invitation-claimer.ts +6 -8
- package/src/{database → packlets/database}/data-mirror.test.ts +1 -1
- package/src/{database → packlets/database}/data-mirror.ts +1 -1
- package/src/{database → packlets/database}/data-service-host.ts +2 -1
- package/src/{database → packlets/database}/data-service-router.ts +0 -0
- package/src/{database → packlets/database}/database-backend.ts +0 -0
- package/src/{api → packlets/database}/database.test.ts +2 -1
- package/src/{api → packlets/database}/database.ts +3 -1
- package/src/{api → packlets/database}/entity.ts +1 -1
- package/src/{database → packlets/database}/index.ts +5 -0
- package/src/{database → packlets/database}/item-demuxer.test.ts +1 -1
- package/src/{database → packlets/database}/item-demuxer.ts +5 -3
- package/src/{database → packlets/database}/item-manager.test.ts +0 -0
- package/src/{database → packlets/database}/item-manager.ts +5 -3
- package/src/{api → packlets/database}/item.ts +2 -2
- package/src/{api → packlets/database}/link.ts +1 -1
- package/src/{api → packlets/database}/selection/index.ts +0 -0
- package/src/{api → packlets/database}/selection/queries.ts +14 -18
- package/src/{api → packlets/database}/selection/result.ts +0 -0
- package/src/{api → packlets/database}/selection/selection.test.ts +4 -12
- package/src/{api → packlets/database}/selection/selection.ts +1 -7
- package/src/{api → packlets/database}/selection/util.ts +0 -0
- package/src/{database → packlets/database}/testing.ts +2 -2
- package/src/{database → packlets/database}/timeframe-clock.ts +0 -0
- package/src/{errors.ts → packlets/errors/index.ts} +0 -0
- package/src/parties/data-party.test.ts +19 -17
- package/src/parties/data-party.ts +15 -10
- package/src/parties/party-factory.ts +26 -72
- package/src/parties/party-manager.test.ts +20 -10
- package/src/parties/party-manager.ts +2 -1
- package/src/pipeline/message-selector.ts +32 -35
- package/src/pipeline/metadata-store.test.ts +8 -4
- package/src/pipeline/metadata-store.ts +5 -5
- package/src/pipeline/party-core.test.ts +29 -28
- package/src/pipeline/party-core.ts +8 -9
- package/src/pipeline/party-processor.ts +23 -15
- package/src/pipeline/pipeline.test.ts +4 -5
- package/src/pipeline/pipeline.ts +12 -15
- package/src/protocol/auth-plugin.ts +1 -3
- package/src/protocol/authenticator.test.ts +1 -4
- package/src/protocol/authenticator.ts +33 -33
- package/src/protocol/halo-recovery-plugin.ts +4 -6
- package/src/protocol/identity-credentials.ts +4 -4
- package/src/protocol/offline-invitation-plugin.ts +4 -6
- package/src/protocol/replicator-plugin.ts +4 -6
- package/src/snapshots/snapshot-generator.ts +13 -17
- package/src/snapshots/snapshot-store.test.ts +1 -1
- package/src/snapshots/snapshot-store.ts +5 -6
- package/src/snapshots/snapshot.test.ts +1 -1
- package/src/testing/testing-factories.ts +3 -3
- package/dist/src/api/database.d.ts.map +0 -1
- package/dist/src/api/database.js.map +0 -1
- package/dist/src/api/database.test.d.ts.map +0 -1
- package/dist/src/api/database.test.js.map +0 -1
- package/dist/src/api/entity.d.ts.map +0 -1
- package/dist/src/api/entity.js.map +0 -1
- package/dist/src/api/item.d.ts.map +0 -1
- package/dist/src/api/item.js.map +0 -1
- package/dist/src/api/link.d.ts.map +0 -1
- package/dist/src/api/link.js.map +0 -1
- package/dist/src/api/selection/index.d.ts.map +0 -1
- package/dist/src/api/selection/index.js.map +0 -1
- package/dist/src/api/selection/queries.d.ts.map +0 -1
- package/dist/src/api/selection/queries.js.map +0 -1
- package/dist/src/api/selection/result.d.ts.map +0 -1
- package/dist/src/api/selection/result.js.map +0 -1
- package/dist/src/api/selection/selection.d.ts.map +0 -1
- package/dist/src/api/selection/selection.js.map +0 -1
- package/dist/src/api/selection/selection.test.d.ts.map +0 -1
- package/dist/src/api/selection/selection.test.js.map +0 -1
- package/dist/src/api/selection/util.d.ts.map +0 -1
- package/dist/src/api/selection/util.js.map +0 -1
- package/dist/src/database/data-mirror.d.ts.map +0 -1
- package/dist/src/database/data-mirror.js.map +0 -1
- package/dist/src/database/data-mirror.test.d.ts.map +0 -1
- package/dist/src/database/data-mirror.test.js.map +0 -1
- package/dist/src/database/data-service-host.d.ts.map +0 -1
- package/dist/src/database/data-service-host.js.map +0 -1
- package/dist/src/database/data-service-router.d.ts.map +0 -1
- package/dist/src/database/data-service-router.js.map +0 -1
- package/dist/src/database/database-backend.d.ts.map +0 -1
- package/dist/src/database/database-backend.js.map +0 -1
- package/dist/src/database/index.d.ts.map +0 -1
- package/dist/src/database/index.js.map +0 -1
- package/dist/src/database/item-demuxer.d.ts.map +0 -1
- package/dist/src/database/item-demuxer.js.map +0 -1
- package/dist/src/database/item-demuxer.test.d.ts.map +0 -1
- package/dist/src/database/item-demuxer.test.js.map +0 -1
- package/dist/src/database/item-manager.d.ts.map +0 -1
- package/dist/src/database/item-manager.js.map +0 -1
- package/dist/src/database/item-manager.test.d.ts.map +0 -1
- package/dist/src/database/item-manager.test.js.map +0 -1
- package/dist/src/database/testing.d.ts.map +0 -1
- package/dist/src/database/testing.js.map +0 -1
- package/dist/src/database/timeframe-clock.d.ts.map +0 -1
- package/dist/src/database/timeframe-clock.js.map +0 -1
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js.map +0 -1
package/src/echo.ts
CHANGED
|
@@ -19,11 +19,11 @@ import { Storage, createStorage, StorageType } from '@dxos/random-access-multi-s
|
|
|
19
19
|
import { SubscriptionGroup } from '@dxos/util';
|
|
20
20
|
|
|
21
21
|
import { ResultSet } from './api';
|
|
22
|
-
import { DataServiceRouter } from './database';
|
|
23
|
-
import { IdentityNotInitializedError, InvalidStorageVersionError } from './errors';
|
|
24
22
|
import { HALO } from './halo';
|
|
25
23
|
import { autoPartyOpener } from './halo/party-opener';
|
|
26
24
|
import { InvitationDescriptor, OfflineInvitationClaimer } from './invitations';
|
|
25
|
+
import { DataServiceRouter } from './packlets/database';
|
|
26
|
+
import { IdentityNotInitializedError, InvalidStorageVersionError } from './packlets/errors';
|
|
27
27
|
import { OpenProgress, PartyFactory, DataParty, PartyManager } from './parties';
|
|
28
28
|
import { MetadataStore, STORAGE_VERSION, PartyFeedProvider } from './pipeline';
|
|
29
29
|
import { SnapshotStore } from './snapshots';
|
|
@@ -87,6 +87,7 @@ export class ECHO {
|
|
|
87
87
|
private readonly _halo: HALO;
|
|
88
88
|
private readonly _keyring: Keyring;
|
|
89
89
|
|
|
90
|
+
private readonly _storage: Storage;
|
|
90
91
|
private readonly _feedStore: FeedStore;
|
|
91
92
|
private readonly _modelFactory: ModelFactory;
|
|
92
93
|
private readonly _networkManager: NetworkManager;
|
|
@@ -114,11 +115,12 @@ export class ECHO {
|
|
|
114
115
|
this._modelFactory = new ModelFactory()
|
|
115
116
|
.registerModel(ObjectModel);
|
|
116
117
|
|
|
118
|
+
this._storage = storage;
|
|
117
119
|
this._networkManager = new NetworkManager(networkManagerOptions);
|
|
118
|
-
this._snapshotStore = new SnapshotStore(storage.
|
|
119
|
-
this._metadataStore = new MetadataStore(storage.
|
|
120
|
+
this._snapshotStore = new SnapshotStore(storage.directory('snapshots'));
|
|
121
|
+
this._metadataStore = new MetadataStore(storage.directory('metadata'));
|
|
120
122
|
this._keyring = new Keyring(new KeyStore(keyStorage));
|
|
121
|
-
this._feedStore = new FeedStore(storage.
|
|
123
|
+
this._feedStore = new FeedStore(storage.directory('feeds'), { valueEncoding: codec });
|
|
122
124
|
|
|
123
125
|
const feedProviderFactory = (partyKey: PublicKey) => new PartyFeedProvider(
|
|
124
126
|
this._metadataStore,
|
|
@@ -275,26 +277,14 @@ export class ECHO {
|
|
|
275
277
|
await this.close();
|
|
276
278
|
|
|
277
279
|
try {
|
|
278
|
-
if (this.
|
|
279
|
-
await this.
|
|
280
|
+
if (this._storage.destroy) {
|
|
281
|
+
await this._storage.destroy();
|
|
280
282
|
}
|
|
281
283
|
} catch (err: any) {
|
|
282
|
-
error('Error clearing
|
|
284
|
+
error('Error clearing storage:', err);
|
|
283
285
|
}
|
|
284
286
|
|
|
285
287
|
await this.halo.reset();
|
|
286
|
-
|
|
287
|
-
try {
|
|
288
|
-
await this._snapshotStore.clear();
|
|
289
|
-
} catch (err: any) {
|
|
290
|
-
error('Error clearing snapshot storage:', err);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
try {
|
|
294
|
-
await this._metadataStore.clear();
|
|
295
|
-
} catch (err: any) {
|
|
296
|
-
error('Error clearing metadata storage:', err);
|
|
297
|
-
}
|
|
298
288
|
}
|
|
299
289
|
|
|
300
290
|
//
|
|
@@ -7,8 +7,9 @@ import { PublicKey } from '@dxos/crypto';
|
|
|
7
7
|
import { raise } from '@dxos/debug';
|
|
8
8
|
import { ObjectModel } from '@dxos/object-model';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { ResultSet } from '../api';
|
|
11
|
+
import { Database, Item } from '../packlets/database';
|
|
12
|
+
import { IdentityNotInitializedError } from '../packlets/errors';
|
|
12
13
|
import { PartyMember } from '../parties';
|
|
13
14
|
import { HALO_PARTY_CONTACT_LIST_TYPE } from './halo-party';
|
|
14
15
|
|
package/src/halo/halo-factory.ts
CHANGED
|
@@ -14,8 +14,7 @@ import {
|
|
|
14
14
|
KeyType,
|
|
15
15
|
Filter,
|
|
16
16
|
SecretProvider,
|
|
17
|
-
KeyHint
|
|
18
|
-
createFeedAdmitMessage
|
|
17
|
+
KeyHint
|
|
19
18
|
} from '@dxos/credentials';
|
|
20
19
|
import { keyToString, PublicKey, keyPairFromSeedPhrase } from '@dxos/crypto';
|
|
21
20
|
import { ModelFactory } from '@dxos/model-factory';
|
|
@@ -94,21 +93,21 @@ export class HaloFactory {
|
|
|
94
93
|
* B. Device key (the first "member" of the Identity's HALO).
|
|
95
94
|
* C. Feed key (the feed owned by the Device).
|
|
96
95
|
*/
|
|
97
|
-
await halo.
|
|
96
|
+
await halo.credentialsWriter.write(createPartyGenesisMessage(this._keyring, identityKey, feedKeyPair.publicKey, deviceKey));
|
|
98
97
|
|
|
99
98
|
/* 3. Make a special self-signed KeyAdmit message which will serve as an "IdentityGenesis" message. This
|
|
100
99
|
* message will be copied into other Parties which we create or join.
|
|
101
100
|
*/
|
|
102
|
-
await halo.
|
|
101
|
+
await halo.credentialsWriter.write(createKeyAdmitMessage(this._keyring, identityKey.publicKey, identityKey));
|
|
103
102
|
|
|
104
103
|
if (options.identityDisplayName) {
|
|
105
104
|
// 4. Write the IdentityInfo message with descriptive details (eg, display name).
|
|
106
|
-
await halo.
|
|
105
|
+
await halo.credentialsWriter.write(createIdentityInfoMessage(this._keyring, options.identityDisplayName, identityKey));
|
|
107
106
|
}
|
|
108
107
|
|
|
109
108
|
if (options.deviceDisplayName) {
|
|
110
109
|
// 5. Write the DeviceInfo message with descriptive details (eg, display name).
|
|
111
|
-
await halo.
|
|
110
|
+
await halo.credentialsWriter.write(createDeviceInfoMessage(this._keyring, options.deviceDisplayName, deviceKey));
|
|
112
111
|
}
|
|
113
112
|
|
|
114
113
|
// Create special properties item.
|
|
@@ -193,22 +192,11 @@ export class HaloFactory {
|
|
|
193
192
|
);
|
|
194
193
|
|
|
195
194
|
await initiator.connect();
|
|
196
|
-
const {
|
|
195
|
+
const { hints } = await initiator.redeemInvitation(secretProvider);
|
|
197
196
|
|
|
198
|
-
/*
|
|
199
|
-
* TODO(telackey): We shouldn't have to add our key here, it should be in the hints, but our hint
|
|
200
|
-
* mechanism is broken by not waiting on the messages to be processed before returning.
|
|
201
|
-
*/
|
|
202
197
|
const halo = await this.constructParty(hints);
|
|
203
198
|
await halo.open();
|
|
204
199
|
|
|
205
|
-
// Write the Feed genesis message.
|
|
206
|
-
await halo.processor.writeHaloMessage(createFeedAdmitMessage(
|
|
207
|
-
credentialsSigner.signer,
|
|
208
|
-
partyKey,
|
|
209
|
-
await halo.getWriteFeedKey(),
|
|
210
|
-
[credentialsSigner.getDeviceKey()]
|
|
211
|
-
));
|
|
212
200
|
await initiator.destroy();
|
|
213
201
|
|
|
214
202
|
await halo.database.createItem({
|
package/src/halo/halo-party.ts
CHANGED
|
@@ -114,10 +114,6 @@ export class HaloParty {
|
|
|
114
114
|
return this._partyCore.processor.credentialMessages.get(this._credentialsSigner.getIdentityKey().publicKey.toHex());
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
get memberKeys () {
|
|
118
|
-
return this._partyCore.processor.memberKeys;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
117
|
get credentialMessages () {
|
|
122
118
|
return this._partyCore.processor.credentialMessages;
|
|
123
119
|
}
|
|
@@ -126,6 +122,10 @@ export class HaloParty {
|
|
|
126
122
|
return this._partyCore.processor.feedKeys;
|
|
127
123
|
}
|
|
128
124
|
|
|
125
|
+
get credentialsWriter () {
|
|
126
|
+
return this._partyCore.credentialsWriter;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
129
|
async getWriteFeedKey () {
|
|
130
130
|
const feed = await this._feedProvider.createOrOpenWritableFeed();
|
|
131
131
|
return feed.key;
|
|
@@ -150,6 +150,7 @@ export class HaloParty {
|
|
|
150
150
|
this._invitationManager = new InvitationFactory(
|
|
151
151
|
this._partyCore.processor,
|
|
152
152
|
this._credentialsSigner,
|
|
153
|
+
this._partyCore.credentialsWriter,
|
|
153
154
|
this._networkManager
|
|
154
155
|
);
|
|
155
156
|
|
|
@@ -169,7 +170,11 @@ export class HaloParty {
|
|
|
169
170
|
// Replication.
|
|
170
171
|
await this._protocol.start([
|
|
171
172
|
createReplicatorPlugin(this._feedProvider),
|
|
172
|
-
createAuthPlugin(createAuthenticator(
|
|
173
|
+
createAuthPlugin(createAuthenticator(
|
|
174
|
+
this._partyCore.processor,
|
|
175
|
+
this._credentialsSigner,
|
|
176
|
+
this._partyCore.credentialsWriter
|
|
177
|
+
), peerId),
|
|
173
178
|
createHaloRecoveryPlugin(this._credentialsSigner.getIdentityKey().publicKey, this._invitationManager, peerId)
|
|
174
179
|
]);
|
|
175
180
|
|
package/src/halo/halo.test.ts
CHANGED
|
@@ -26,10 +26,11 @@ describe('HALO', () => {
|
|
|
26
26
|
.registerModel(ObjectModel);
|
|
27
27
|
|
|
28
28
|
const networkManager = new NetworkManager();
|
|
29
|
-
const
|
|
30
|
-
const
|
|
29
|
+
const storage = createStorage('', StorageType.RAM);
|
|
30
|
+
const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
|
|
31
|
+
const metadataStore = new MetadataStore(storage.directory('metadata'));
|
|
31
32
|
const keyring = new Keyring();
|
|
32
|
-
const feedStore = new FeedStore(
|
|
33
|
+
const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
|
|
33
34
|
|
|
34
35
|
const feedProviderFactory = (partyKey: PublicKey) => new PartyFeedProvider(
|
|
35
36
|
metadataStore,
|
package/src/halo/identity.ts
CHANGED
|
@@ -102,7 +102,7 @@ export class Identity implements IdentityCredentials {
|
|
|
102
102
|
|
|
103
103
|
export type IdentityProvider = () => Identity | undefined;
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
const getDeviceKeyChainFromHalo = (halo: HaloParty, deviceKey: KeyRecord) => {
|
|
106
106
|
try {
|
|
107
107
|
return Keyring.buildKeyChain(
|
|
108
108
|
deviceKey.publicKey,
|
|
@@ -113,4 +113,4 @@ function getDeviceKeyChainFromHalo (halo: HaloParty, deviceKey: KeyRecord) {
|
|
|
113
113
|
log('Unable to locate device KeyChain:', err);
|
|
114
114
|
throw err;
|
|
115
115
|
}
|
|
116
|
-
}
|
|
116
|
+
};
|
package/src/halo/party-opener.ts
CHANGED
|
@@ -14,7 +14,7 @@ const log = debug('dxos:echo-db:party-opener');
|
|
|
14
14
|
/**
|
|
15
15
|
* Automatically adds, opens, and clothes parties from HALO preferences.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export const autoPartyOpener = (preferences: Preferences, partyManager: PartyManager): Unsubscribe => {
|
|
18
18
|
const subs = new SubscriptionGroup();
|
|
19
19
|
|
|
20
20
|
subs.push(preferences.subscribeToJoinedPartyList(async values => {
|
|
@@ -46,4 +46,4 @@ export function autoPartyOpener (preferences: Preferences, partyManager: PartyMa
|
|
|
46
46
|
}));
|
|
47
47
|
|
|
48
48
|
return () => subs.unsubscribe();
|
|
49
|
-
}
|
|
49
|
+
};
|
package/src/halo/preferences.ts
CHANGED
|
@@ -12,8 +12,9 @@ import { PublicKey } from '@dxos/crypto';
|
|
|
12
12
|
import { raise } from '@dxos/debug';
|
|
13
13
|
import { ObjectModel } from '@dxos/object-model';
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { ResultSet } from '../api';
|
|
16
|
+
import { Database, Item } from '../packlets/database';
|
|
17
|
+
import { IdentityNotInitializedError } from '../packlets/errors';
|
|
17
18
|
import { DataParty } from '../parties';
|
|
18
19
|
import {
|
|
19
20
|
HALO_PARTY_DESCRIPTOR_TYPE, HALO_PARTY_DEVICE_PREFERENCES_TYPE, HALO_PARTY_PREFERENCES_TYPE, JoinedParty
|
|
@@ -159,16 +160,13 @@ export class Preferences {
|
|
|
159
160
|
subscribeToJoinedPartyList (callback: (parties: JoinedParty[]) => void): () => void {
|
|
160
161
|
const database = this._getDatabase() ?? raise(new IdentityNotInitializedError());
|
|
161
162
|
|
|
162
|
-
const converter = (partyDesc: Item<any>) => {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
} as KeyHint))
|
|
170
|
-
};
|
|
171
|
-
};
|
|
163
|
+
const converter = (partyDesc: Item<any>) => ({
|
|
164
|
+
partyKey: PublicKey.from(partyDesc.model.get('publicKey')),
|
|
165
|
+
keyHints: Object.values(partyDesc.model.get('hints')).map((hint: any) => ({
|
|
166
|
+
...hint,
|
|
167
|
+
publicKey: PublicKey.from(hint.publicKey)
|
|
168
|
+
} as KeyHint))
|
|
169
|
+
});
|
|
172
170
|
|
|
173
171
|
const result = database.select({ type: HALO_PARTY_DESCRIPTOR_TYPE }).exec();
|
|
174
172
|
|
package/src/index.ts
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
export { codec } from '@dxos/echo-protocol';
|
|
6
6
|
|
|
7
|
+
export * from './packlets/database';
|
|
8
|
+
export * from './packlets/errors';
|
|
9
|
+
|
|
7
10
|
export * from './api';
|
|
8
|
-
export * from './database';
|
|
9
11
|
export * from './echo';
|
|
10
|
-
export * from './errors';
|
|
11
12
|
export * from './halo';
|
|
12
13
|
export * from './invitations';
|
|
13
14
|
export * from './protocol';
|
|
@@ -14,12 +14,8 @@ import { protocolFactory } from '@dxos/network-manager';
|
|
|
14
14
|
*/
|
|
15
15
|
// TODO(burdon): When closed?
|
|
16
16
|
// TODO(dboreham): Write a test to check resources are released (no resource leaks).
|
|
17
|
-
export const greetingProtocolProvider = (rendezvousKey: any, peerId: Buffer | Uint8Array, protocolPlugins: any[]) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
session: { peerId: keyToString(peerId) },
|
|
23
|
-
plugins: protocolPlugins
|
|
24
|
-
});
|
|
25
|
-
};
|
|
17
|
+
export const greetingProtocolProvider = (rendezvousKey: any, peerId: Buffer | Uint8Array, protocolPlugins: any[]) => protocolFactory({
|
|
18
|
+
getTopics: () => [rendezvousKey],
|
|
19
|
+
session: { peerId: keyToString(peerId) },
|
|
20
|
+
plugins: protocolPlugins
|
|
21
|
+
});
|
|
@@ -14,12 +14,13 @@ import {
|
|
|
14
14
|
KeyType,
|
|
15
15
|
SecretProvider,
|
|
16
16
|
SecretValidator
|
|
17
|
+
, Message as HaloMessage
|
|
17
18
|
} from '@dxos/credentials';
|
|
18
19
|
import { keyToString, randomBytes, PublicKey } from '@dxos/crypto';
|
|
19
|
-
import { SwarmKey } from '@dxos/echo-protocol';
|
|
20
|
+
import { FeedWriter, SwarmKey } from '@dxos/echo-protocol';
|
|
20
21
|
import { FullyConnectedTopology, NetworkManager } from '@dxos/network-manager';
|
|
21
22
|
|
|
22
|
-
import {
|
|
23
|
+
import { PartyStateProvider } from '../pipeline';
|
|
23
24
|
import { CredentialsSigner } from '../protocol/credentials-signer';
|
|
24
25
|
import { InvitationOptions } from './common';
|
|
25
26
|
import { greetingProtocolProvider } from './greeting-protocol-provider';
|
|
@@ -57,8 +58,9 @@ export class GreetingResponder {
|
|
|
57
58
|
|
|
58
59
|
constructor (
|
|
59
60
|
private readonly _networkManager: NetworkManager,
|
|
60
|
-
private readonly _partyProcessor:
|
|
61
|
-
private readonly _credentialsSigner: CredentialsSigner
|
|
61
|
+
private readonly _partyProcessor: PartyStateProvider,
|
|
62
|
+
private readonly _credentialsSigner: CredentialsSigner,
|
|
63
|
+
private readonly _credentialsWriter: FeedWriter<HaloMessage>
|
|
62
64
|
) {
|
|
63
65
|
this._greeter = new Greeter(
|
|
64
66
|
this._partyProcessor.partyKey,
|
|
@@ -222,7 +224,7 @@ export class GreetingResponder {
|
|
|
222
224
|
[this._credentialsSigner.getDeviceSigningKeys()]
|
|
223
225
|
);
|
|
224
226
|
|
|
225
|
-
await this.
|
|
227
|
+
await this._credentialsWriter.write(envelope);
|
|
226
228
|
|
|
227
229
|
// Wait for keys to be admitted.
|
|
228
230
|
await waitForCondition(() => admittedKeys.every(hasKey));
|
|
@@ -243,19 +245,15 @@ export class GreetingResponder {
|
|
|
243
245
|
_gatherHints (): KeyHint[] {
|
|
244
246
|
assert(this._state === GreetingState.SUCCEEDED);
|
|
245
247
|
|
|
246
|
-
const memberKeys = this._partyProcessor.memberKeys.map(publicKey => {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
};
|
|
251
|
-
});
|
|
248
|
+
const memberKeys = this._partyProcessor.memberKeys.map((publicKey) => ({
|
|
249
|
+
publicKey,
|
|
250
|
+
type: KeyType.UNKNOWN
|
|
251
|
+
}));
|
|
252
252
|
|
|
253
|
-
const memberFeeds = this._partyProcessor.feedKeys.map(publicKey => {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
};
|
|
258
|
-
});
|
|
253
|
+
const memberFeeds = this._partyProcessor.feedKeys.map((publicKey) => ({
|
|
254
|
+
publicKey,
|
|
255
|
+
type: KeyType.FEED
|
|
256
|
+
}));
|
|
259
257
|
|
|
260
258
|
return [...memberKeys, ...memberFeeds];
|
|
261
259
|
}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import { keyToBuffer, keyToString, PublicKey, randomBytes, verify } from '@dxos/crypto';
|
|
23
23
|
import { FullyConnectedTopology, NetworkManager } from '@dxos/network-manager';
|
|
24
24
|
|
|
25
|
-
import { InvalidInvitationError } from '../errors';
|
|
25
|
+
import { InvalidInvitationError } from '../packlets/errors';
|
|
26
26
|
import { CredentialsSigner } from '../protocol/credentials-signer';
|
|
27
27
|
import { greetingProtocolProvider } from './greeting-protocol-provider';
|
|
28
28
|
import { GreetingState } from './greeting-responder';
|
|
@@ -10,7 +10,7 @@ import { keyToBuffer, keyToString, ripemd160, PublicKey } from '@dxos/crypto';
|
|
|
10
10
|
import { SwarmKey } from '@dxos/echo-protocol';
|
|
11
11
|
import * as proto from '@dxos/echo-protocol';
|
|
12
12
|
|
|
13
|
-
import { InvalidInvitationError } from '../errors';
|
|
13
|
+
import { InvalidInvitationError } from '../packlets/errors';
|
|
14
14
|
|
|
15
15
|
// Re-exporting type enum from protobuf definitions.
|
|
16
16
|
export import InvitationDescriptorType = proto.InvitationDescriptor.Type;
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import assert from 'assert';
|
|
6
6
|
|
|
7
|
-
import { createPartyInvitationMessage } from '@dxos/credentials';
|
|
7
|
+
import { createPartyInvitationMessage, Message as HaloMessage } from '@dxos/credentials';
|
|
8
8
|
import { PublicKey } from '@dxos/crypto';
|
|
9
|
+
import { FeedWriter } from '@dxos/echo-protocol';
|
|
9
10
|
import { NetworkManager } from '@dxos/network-manager';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
+
import { PartyStateProvider } from '../pipeline';
|
|
12
13
|
import { CredentialsSigner } from '../protocol/credentials-signer';
|
|
13
14
|
import { defaultInvitationAuthenticator, InvitationAuthenticator, InvitationOptions } from './common';
|
|
14
15
|
import { GreetingResponder } from './greeting-responder';
|
|
@@ -19,10 +20,11 @@ import { InvitationDescriptor, InvitationDescriptorType } from './invitation-des
|
|
|
19
20
|
*/
|
|
20
21
|
export class InvitationFactory {
|
|
21
22
|
constructor (
|
|
22
|
-
private readonly _partyProcessor:
|
|
23
|
+
private readonly _partyProcessor: PartyStateProvider,
|
|
23
24
|
// This needs to be a provider in case this is a backend for the HALO party.
|
|
24
25
|
// Then the identity would be changed after this is instantiated.
|
|
25
26
|
private readonly _credentialsSigner: CredentialsSigner,
|
|
27
|
+
private readonly _credentialsWriter: FeedWriter<HaloMessage>,
|
|
26
28
|
private readonly _networkManager: NetworkManager
|
|
27
29
|
) {}
|
|
28
30
|
|
|
@@ -42,7 +44,7 @@ export class InvitationFactory {
|
|
|
42
44
|
this._credentialsSigner.getDeviceSigningKeys()
|
|
43
45
|
);
|
|
44
46
|
|
|
45
|
-
await this.
|
|
47
|
+
await this._credentialsWriter.write(invitationMessage);
|
|
46
48
|
|
|
47
49
|
return new InvitationDescriptor(
|
|
48
50
|
InvitationDescriptorType.OFFLINE,
|
|
@@ -60,7 +62,8 @@ export class InvitationFactory {
|
|
|
60
62
|
const responder = new GreetingResponder(
|
|
61
63
|
this._networkManager,
|
|
62
64
|
this._partyProcessor,
|
|
63
|
-
this._credentialsSigner
|
|
65
|
+
this._credentialsSigner,
|
|
66
|
+
this._credentialsWriter
|
|
64
67
|
);
|
|
65
68
|
|
|
66
69
|
const { secretValidator, secretProvider } = authenticationDetails;
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
import { keyToBuffer, keyToString, PublicKey, randomBytes } from '@dxos/crypto';
|
|
24
24
|
import { FullyConnectedTopology, NetworkManager } from '@dxos/network-manager';
|
|
25
25
|
|
|
26
|
-
import { InvalidInvitationError } from '../errors';
|
|
26
|
+
import { InvalidInvitationError } from '../packlets/errors';
|
|
27
27
|
import { CredentialsSigner } from '../protocol';
|
|
28
28
|
import { greetingProtocolProvider } from './greeting-protocol-provider';
|
|
29
29
|
import { GreetingState } from './greeting-responder';
|
|
@@ -170,19 +170,17 @@ export class OfflineInvitationClaimer {
|
|
|
170
170
|
|
|
171
171
|
// The secretProvider should provide an `Auth` message signed directly by the Identity key.
|
|
172
172
|
static createSecretProvider (credentials: CredentialsSigner): SecretProvider {
|
|
173
|
-
return async (info?: SecretInfo) =>
|
|
174
|
-
|
|
175
|
-
/* The signed portion of the Auth message includes the ID and authNonce provided
|
|
173
|
+
return async (info?: SecretInfo) => Buffer.from(codec.encode(
|
|
174
|
+
/* The signed portion of the Auth message includes the ID and authNonce provided
|
|
176
175
|
* by the `info` object. These values will be validated on the other end.
|
|
177
176
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
createAuthMessage(
|
|
178
|
+
credentials.signer,
|
|
180
179
|
info!.id.value,
|
|
181
180
|
credentials.getIdentityKey(),
|
|
182
181
|
credentials.getDeviceSigningKeys(),
|
|
183
182
|
undefined,
|
|
184
183
|
info!.authNonce.value)
|
|
185
|
-
|
|
186
|
-
};
|
|
184
|
+
));
|
|
187
185
|
}
|
|
188
186
|
}
|
|
@@ -11,10 +11,10 @@ import { EchoEnvelope, MockFeedWriter, Timeframe } from '@dxos/echo-protocol';
|
|
|
11
11
|
import { ModelFactory } from '@dxos/model-factory';
|
|
12
12
|
import { ObjectModel } from '@dxos/object-model';
|
|
13
13
|
|
|
14
|
-
import { Item } from '../api';
|
|
15
14
|
import { DataMirror } from './data-mirror';
|
|
16
15
|
import { DataServiceHost } from './data-service-host';
|
|
17
16
|
import { DataServiceRouter } from './data-service-router';
|
|
17
|
+
import { Item } from './item';
|
|
18
18
|
import { ItemDemuxer } from './item-demuxer';
|
|
19
19
|
import { ItemManager } from './item-manager';
|
|
20
20
|
|
|
@@ -10,7 +10,7 @@ import { failUndefined } from '@dxos/debug';
|
|
|
10
10
|
import { DataService } from '@dxos/echo-protocol';
|
|
11
11
|
import { Model } from '@dxos/model-factory';
|
|
12
12
|
|
|
13
|
-
import { Entity } from '
|
|
13
|
+
import { Entity } from './entity';
|
|
14
14
|
import { ItemManager } from './item-manager';
|
|
15
15
|
|
|
16
16
|
const log = debug('dxos:echo-db:data-mirror');
|
|
@@ -18,10 +18,11 @@ import {
|
|
|
18
18
|
SubscribeEntityStreamResponse
|
|
19
19
|
} from '@dxos/echo-protocol';
|
|
20
20
|
|
|
21
|
-
import { Item, Link } from '../api';
|
|
22
21
|
import { EntityNotFoundError } from '../errors';
|
|
22
|
+
import { Item } from './item';
|
|
23
23
|
import { ItemDemuxer } from './item-demuxer';
|
|
24
24
|
import { ItemManager } from './item-manager';
|
|
25
|
+
import { Link } from './link';
|
|
25
26
|
|
|
26
27
|
const log = debug('dxos:echo-db:data-service-host');
|
|
27
28
|
|
|
File without changes
|
|
File without changes
|
|
@@ -10,9 +10,10 @@ import { ModelFactory, TestListModel } from '@dxos/model-factory';
|
|
|
10
10
|
import { ObjectModel } from '@dxos/object-model';
|
|
11
11
|
import { afterTest } from '@dxos/testutils';
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { DataServiceHost } from './data-service-host';
|
|
14
14
|
import { Item } from './item';
|
|
15
15
|
import { ItemFilterDeleted } from './selection';
|
|
16
|
+
import { createInMemoryDatabase, createRemoteDatabaseFromDataServiceHost } from './testing';
|
|
16
17
|
|
|
17
18
|
const OBJECT_ORG = 'example:object/org';
|
|
18
19
|
const OBJECT_PERSON = 'example:object/person';
|
|
@@ -10,9 +10,11 @@ import { ItemID, ItemType } from '@dxos/echo-protocol';
|
|
|
10
10
|
import { Model, ModelConstructor, ModelFactory, validateModelClass } from '@dxos/model-factory';
|
|
11
11
|
import { ObjectModel } from '@dxos/object-model';
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { DataServiceHost } from './data-service-host';
|
|
14
|
+
import { DatabaseBackend } from './database-backend';
|
|
14
15
|
import { Entity } from './entity';
|
|
15
16
|
import { Item } from './item';
|
|
17
|
+
import { ItemManager } from './item-manager';
|
|
16
18
|
import { Link } from './link';
|
|
17
19
|
import { RootFilter, Selection, createSelection } from './selection';
|
|
18
20
|
|
|
@@ -7,7 +7,7 @@ import { ItemID, ItemType } from '@dxos/echo-protocol';
|
|
|
7
7
|
import { Model, ModelMeta, StateManager } from '@dxos/model-factory';
|
|
8
8
|
import { SubscriptionGroup } from '@dxos/util';
|
|
9
9
|
|
|
10
|
-
import { ItemManager } from '
|
|
10
|
+
import { ItemManager } from './item-manager';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Base class for all ECHO entitities.
|
|
@@ -10,3 +10,8 @@ export * from './item-demuxer';
|
|
|
10
10
|
export * from './item-manager';
|
|
11
11
|
export * from './testing';
|
|
12
12
|
export * from './timeframe-clock';
|
|
13
|
+
export * from './item';
|
|
14
|
+
export * from './link';
|
|
15
|
+
export * from './entity';
|
|
16
|
+
export * from './selection';
|
|
17
|
+
export * from './database';
|
|
@@ -14,7 +14,7 @@ import { createTransform } from '@dxos/feed-store';
|
|
|
14
14
|
import { ModelFactory, TestModel } from '@dxos/model-factory';
|
|
15
15
|
import { ObjectModel } from '@dxos/object-model';
|
|
16
16
|
|
|
17
|
-
import { Item } from '
|
|
17
|
+
import { Item } from './item';
|
|
18
18
|
import { ItemDemuxer } from './item-demuxer';
|
|
19
19
|
import { ItemManager } from './item-manager';
|
|
20
20
|
|
|
@@ -11,8 +11,10 @@ import { DatabaseSnapshot, IEchoStream, ItemID, ItemSnapshot, LinkSnapshot } fro
|
|
|
11
11
|
import { createWritable } from '@dxos/feed-store';
|
|
12
12
|
import { Model, ModelFactory, ModelMessage } from '@dxos/model-factory';
|
|
13
13
|
|
|
14
|
-
import { Entity
|
|
14
|
+
import { Entity } from './entity';
|
|
15
|
+
import { Item } from './item';
|
|
15
16
|
import { ItemManager, ModelConstructionOptions } from './item-manager';
|
|
17
|
+
import { Link } from './link';
|
|
16
18
|
|
|
17
19
|
const log = debug('dxos:echo-db:item-demuxer');
|
|
18
20
|
|
|
@@ -185,7 +187,7 @@ export class ItemDemuxer {
|
|
|
185
187
|
* Sort based on parents.
|
|
186
188
|
* @param items
|
|
187
189
|
*/
|
|
188
|
-
export
|
|
190
|
+
export const sortItemsTopologically = (items: ItemSnapshot[]): ItemSnapshot[] => {
|
|
189
191
|
const snapshots: ItemSnapshot[] = [];
|
|
190
192
|
const seenIds = new Set<ItemID>();
|
|
191
193
|
|
|
@@ -204,4 +206,4 @@ export function sortItemsTopologically (items: ItemSnapshot[]): ItemSnapshot[] {
|
|
|
204
206
|
}
|
|
205
207
|
|
|
206
208
|
return snapshots;
|
|
207
|
-
}
|
|
209
|
+
};
|
|
File without changes
|
|
@@ -11,8 +11,10 @@ import { timed } from '@dxos/debug';
|
|
|
11
11
|
import { EchoEnvelope, FeedWriter, ItemID, ItemType, mapFeedWriter, ModelSnapshot } from '@dxos/echo-protocol';
|
|
12
12
|
import { Model, ModelFactory, ModelMessage, ModelType, StateManager } from '@dxos/model-factory';
|
|
13
13
|
|
|
14
|
-
import { Entity, Item, Link } from '../api';
|
|
15
14
|
import { UnknownModelError } from '../errors';
|
|
15
|
+
import { Entity } from './entity';
|
|
16
|
+
import { Item } from './item';
|
|
17
|
+
import { Link } from './link';
|
|
16
18
|
|
|
17
19
|
const log = debug('dxos:echo-db:item-manager');
|
|
18
20
|
|
|
@@ -375,7 +377,7 @@ export class ItemManager {
|
|
|
375
377
|
/**
|
|
376
378
|
* Returns a new event that groups all of the updates emitted during single tick into a single event emission.
|
|
377
379
|
*/
|
|
378
|
-
|
|
380
|
+
const debounceEntityUpdateEvent = (event: Event<Entity<any>>): Event<Entity<any>[]> => {
|
|
379
381
|
const debouncedEvent = new Event<Entity<any>[]>();
|
|
380
382
|
|
|
381
383
|
let firing = false;
|
|
@@ -395,4 +397,4 @@ function debounceEntityUpdateEvent (event: Event<Entity<any>>): Event<Entity<any
|
|
|
395
397
|
}));
|
|
396
398
|
|
|
397
399
|
return debouncedEvent;
|
|
398
|
-
}
|
|
400
|
+
};
|
|
@@ -7,10 +7,10 @@ import debug from 'debug';
|
|
|
7
7
|
import { EchoEnvelope, ItemID, ItemMutation, ItemType, FeedWriter } from '@dxos/echo-protocol';
|
|
8
8
|
import { Model, StateManager } from '@dxos/model-factory';
|
|
9
9
|
|
|
10
|
-
import { ItemManager } from '../database';
|
|
11
10
|
import { Entity } from './entity';
|
|
11
|
+
import { ItemManager } from './item-manager';
|
|
12
12
|
import type { Link } from './link';
|
|
13
|
-
import {
|
|
13
|
+
import { createItemSelection, Selection } from './selection';
|
|
14
14
|
|
|
15
15
|
const log = debug('dxos:echo-db:item');
|
|
16
16
|
|