@dxos/client-services 0.4.7-main.b23cefb → 0.4.7-main.b51ad3a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/lib/browser/{chunk-Q4ZW7SKD.mjs → chunk-W4YHONPO.mjs} +122 -70
  2. package/dist/lib/browser/{chunk-Q4ZW7SKD.mjs.map → chunk-W4YHONPO.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +4 -2
  4. package/dist/lib/browser/index.mjs.map +2 -2
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/packlets/testing/index.mjs +4 -2
  7. package/dist/lib/browser/packlets/testing/index.mjs.map +3 -3
  8. package/dist/lib/node/{chunk-QTXFCLVV.cjs → chunk-UGRBM6TA.cjs} +97 -45
  9. package/dist/lib/node/chunk-UGRBM6TA.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +40 -38
  11. package/dist/lib/node/index.cjs.map +2 -2
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/packlets/testing/index.cjs +11 -9
  14. package/dist/lib/node/packlets/testing/index.cjs.map +3 -3
  15. package/dist/types/src/packlets/logging/logging-service.d.ts +1 -0
  16. package/dist/types/src/packlets/logging/logging-service.d.ts.map +1 -1
  17. package/dist/types/src/packlets/services/service-context.d.ts +2 -0
  18. package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
  19. package/dist/types/src/packlets/spaces/automerge-space-state.d.ts +2 -0
  20. package/dist/types/src/packlets/spaces/automerge-space-state.d.ts.map +1 -1
  21. package/dist/types/src/packlets/spaces/data-space.d.ts.map +1 -1
  22. package/dist/types/src/packlets/spaces/spaces-service.d.ts +1 -1
  23. package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
  24. package/dist/types/src/packlets/vault/shared-worker-connection.d.ts.map +1 -1
  25. package/dist/types/src/version.d.ts +1 -1
  26. package/package.json +35 -35
  27. package/src/packlets/logging/logging-service.ts +9 -2
  28. package/src/packlets/services/automerge-host.test.ts +1 -1
  29. package/src/packlets/services/service-context.ts +7 -1
  30. package/src/packlets/spaces/automerge-space-state.ts +15 -0
  31. package/src/packlets/spaces/data-space.ts +33 -11
  32. package/src/packlets/spaces/spaces-service.ts +3 -5
  33. package/src/packlets/testing/test-builder.ts +1 -1
  34. package/src/packlets/vault/shared-worker-connection.ts +2 -0
  35. package/src/version.ts +1 -1
  36. package/dist/lib/node/chunk-QTXFCLVV.cjs.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/packlets/testing/credential-utils.ts", "../../../../../src/packlets/testing/invitation-utils.ts", "../../../../../src/packlets/testing/test-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { createCredential } from '@dxos/credentials';\nimport { type Signer } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport const createMockCredential = async ({\n signer,\n issuer,\n}: {\n signer: Signer;\n issuer: PublicKey;\n}): Promise<Credential> =>\n createCredential({\n signer,\n issuer,\n subject: new PublicKey(Buffer.from('test')),\n assertion: {\n '@type': 'example.testing.rpc.MessageWithAny',\n payload: {\n '@type': 'google.protobuf.Any',\n value: Buffer.from('test'),\n },\n },\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { InvitationEncoder, type AuthenticatingInvitation, type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { type DeviceProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { ServiceContext } from '../services';\n\n/**\n * Strip secrets from invitation before giving it to the peer.\n */\nexport const sanitizeInvitation = (invitation: Invitation): Invitation => {\n return InvitationEncoder.decode(InvitationEncoder.encode(invitation));\n};\n\nexport type InvitationHost = {\n share(options?: Partial<Invitation>): CancellableInvitation;\n};\n\nexport type InvitationGuest = {\n join(invitation: Invitation | string, deviceProfile?: DeviceProfileDocument): AuthenticatingInvitation;\n};\n\nexport type PerformInvitationCallbacks<T> = {\n onConnecting?: (value: T) => boolean | void;\n onConnected?: (value: T) => boolean | void;\n onReady?: (value: T) => boolean | void;\n onAuthenticating?: (value: T) => boolean | void;\n onSuccess?: (value: T) => boolean | void;\n onCancelled?: (value: T) => boolean | void;\n onTimeout?: (value: T) => boolean | void;\n onError?: (value: T) => boolean | void;\n};\n\nexport type PerformInvitationParams = {\n host: ServiceContext | InvitationHost;\n guest: ServiceContext | InvitationGuest;\n options?: Partial<Invitation>;\n hooks?: {\n host?: PerformInvitationCallbacks<CancellableInvitation>;\n guest?: PerformInvitationCallbacks<AuthenticatingInvitation>;\n };\n guestDeviceProfile?: DeviceProfileDocument;\n};\n\nexport type Result = { invitation?: Invitation; error?: Error };\n\nexport const performInvitation = ({\n host,\n guest,\n options,\n hooks,\n guestDeviceProfile,\n}: PerformInvitationParams): [Promise<Result>, Promise<Result>] => {\n const hostComplete = new Trigger<Result>();\n const guestComplete = new Trigger<Result>();\n const authCode = new Trigger<string>();\n\n const hostObservable = createInvitation(host, options);\n hostObservable.subscribe(\n async (hostInvitation: Invitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.host?.onConnecting?.(hostObservable)) {\n break;\n }\n const guestObservable = acceptInvitation(guest, hostInvitation, guestDeviceProfile);\n guestObservable.subscribe(\n async (guestInvitation: Invitation) => {\n switch (guestInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.guest?.onConnecting?.(guestObservable)) {\n break;\n }\n invariant(hostInvitation.swarmKey!.equals(guestInvitation.swarmKey!));\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.guest?.onConnected?.(guestObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.guest?.onReady?.(guestObservable)) {\n break;\n }\n await guestObservable.authenticate(await authCode.wait());\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.guest?.onAuthenticating?.(guestObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.guest?.onSuccess?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.guest?.onCancelled?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.guest?.onTimeout?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ invitation: guestInvitation });\n }\n }\n },\n (error: Error) => {\n if (hooks?.guest?.onError?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ error });\n },\n );\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.host?.onConnected?.(hostObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.host?.onReady?.(hostObservable)) {\n break;\n }\n if (hostInvitation.authCode) {\n authCode.wake(hostInvitation.authCode);\n }\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.host?.onAuthenticating?.(hostObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.host?.onSuccess?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.host?.onCancelled?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.host?.onTimeout?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n }\n },\n (error: Error) => {\n if (hooks?.host?.onError?.(hostObservable)) {\n return;\n }\n hostComplete.wake({ error });\n },\n );\n\n return [hostComplete.wait(), guestComplete.wait()];\n};\n\nconst createInvitation = (\n host: ServiceContext | InvitationHost,\n options?: Partial<Invitation>,\n): CancellableInvitation => {\n options ??= {\n authMethod: Invitation.AuthMethod.NONE,\n ...(options ?? {}),\n };\n\n if (host instanceof ServiceContext) {\n const hostHandler = host.getInvitationHandler({ kind: Invitation.Kind.SPACE, ...options });\n return host.invitations.createInvitation(hostHandler, options);\n }\n\n return host.share(options);\n};\n\nconst acceptInvitation = (\n guest: ServiceContext | InvitationGuest,\n invitation: Invitation,\n guestDeviceProfile?: DeviceProfileDocument,\n): AuthenticatingInvitation => {\n invitation = sanitizeInvitation(invitation);\n\n if (guest instanceof ServiceContext) {\n const guestHandler = guest.getInvitationHandler({ kind: invitation.kind });\n return guest.invitations.acceptInvitation(guestHandler, invitation, guestDeviceProfile);\n }\n\n return guest.join(invitation, guestDeviceProfile);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';\nimport { failUndefined } from '@dxos/debug';\nimport {\n SnapshotStore,\n type DataPipeline,\n MetadataStore,\n SpaceManager,\n valueEncoding,\n DataServiceSubscriptions,\n AutomergeHost,\n} from '@dxos/echo-pipeline';\nimport { testLocalDatabase } from '@dxos/echo-pipeline/testing';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport { createStorage, type Storage, StorageType } from '@dxos/random-access-storage';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\n\nimport { ClientServicesHost, createDefaultModelFactory, ServiceContext } from '../services';\nimport { DataSpaceManager, type SigningContext } from '../spaces';\n\n//\n// TODO(burdon): Replace with test builder.\n//\n\nexport const createServiceHost = (config: Config, signalManagerContext: MemorySignalManagerContext) => {\n return new ClientServicesHost({\n config,\n signalManager: new MemorySignalManager(signalManagerContext),\n transportFactory: MemoryTransportFactory,\n });\n};\n\nexport const createServiceContext = ({\n signalContext = new MemorySignalManagerContext(),\n storage = createStorage({ type: StorageType.RAM }),\n}: {\n signalContext?: MemorySignalManagerContext;\n storage?: Storage;\n} = {}) => {\n const signalManager = new MemorySignalManager(signalContext);\n const networkManager = new NetworkManager({\n signalManager,\n transportFactory: MemoryTransportFactory,\n });\n\n const modelFactory = createDefaultModelFactory();\n return new ServiceContext(storage, networkManager, signalManager, modelFactory);\n};\n\nexport const createPeers = async (numPeers: number) => {\n const signalContext = new MemorySignalManagerContext();\n\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = createServiceContext({ signalContext });\n await peer.open(new Context());\n return peer;\n }),\n );\n};\n\nexport const createIdentity = async (peer: ServiceContext) => {\n await peer.createIdentity();\n return peer;\n};\n\n// TODO(burdon): Remove @dxos/client-testing.\n// TODO(burdon): Create builder and make configurable.\nexport const syncItemsLocal = async (db1: DataPipeline, db2: DataPipeline) => {\n await testLocalDatabase(db1, db2);\n await testLocalDatabase(db2, db1);\n};\n\nexport class TestBuilder {\n public readonly signalContext = new MemorySignalManagerContext();\n private readonly _ctx = new Context();\n\n createPeer(peerOptions?: TestPeerOpts): TestPeer {\n const peer = new TestPeer(this.signalContext, peerOptions);\n this._ctx.onDispose(async () => peer.destroy());\n return peer;\n }\n\n async destroy() {\n await this._ctx.dispose();\n }\n}\n\nexport type TestPeerOpts = {\n dataStore?: StorageType;\n};\n\nexport type TestPeerProps = {\n storage?: Storage;\n feedStore?: FeedStore<any>;\n metadataStore?: MetadataStore;\n keyring?: Keyring;\n networkManager?: NetworkManager;\n spaceManager?: SpaceManager;\n dataSpaceManager?: DataSpaceManager;\n snapshotStore?: SnapshotStore;\n signingContext?: SigningContext;\n blobStore?: BlobStore;\n automergeHost?: AutomergeHost;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n\n constructor(\n private readonly signalContext: MemorySignalManagerContext,\n private readonly opts: TestPeerOpts = { dataStore: StorageType.RAM },\n ) {}\n\n get props() {\n return this._props;\n }\n\n get storage() {\n return (this._props.storage ??= createStorage({ type: this.opts.dataStore }));\n }\n\n get keyring() {\n return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this.storage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding,\n },\n }),\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n get blobStore() {\n return (this._props.blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n get snapshotStore() {\n return (this._props.snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new NetworkManager({\n signalManager: new MemorySignalManager(this.signalContext),\n transportFactory: MemoryTransportFactory,\n }));\n }\n\n get spaceManager() {\n return (this._props.spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager,\n metadataStore: this.metadataStore,\n modelFactory: createDefaultModelFactory(),\n snapshotStore: this.snapshotStore,\n blobStore: this.blobStore,\n }));\n }\n\n get identity() {\n return this._props.signingContext ?? failUndefined();\n }\n\n get automergeHost() {\n return (this._props.automergeHost ??= new AutomergeHost(this.storage.createDirectory('automerge')));\n }\n\n get dataSpaceManager() {\n return (this._props.dataSpaceManager ??= new DataSpaceManager(\n this.spaceManager,\n this.metadataStore,\n new DataServiceSubscriptions(),\n this.keyring,\n this.identity,\n this.feedStore,\n this.automergeHost,\n ));\n }\n\n async createIdentity() {\n this._props.signingContext ??= await createSigningContext(this.keyring);\n }\n\n async destroy() {\n await this.storage.reset();\n }\n}\n\nexport const createSigningContext = async (keyring: Keyring): Promise<SigningContext> => {\n const identityKey = await keyring.createKey();\n const deviceKey = await keyring.createKey();\n\n return {\n identityKey,\n deviceKey,\n credentialSigner: createCredentialSignerWithChain(\n keyring,\n {\n credential: await new CredentialGenerator(keyring, identityKey, deviceKey).createDeviceAuthorization(deviceKey),\n },\n deviceKey,\n ),\n recordCredential: async () => {}, // No-op.\n getProfile: () => undefined,\n };\n};\n"],
5
- "mappings": "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",
6
- "names": ["createCredential", "PublicKey", "createMockCredential", "signer", "issuer", "createCredential", "subject", "PublicKey", "Buffer", "from", "assertion", "payload", "value", "Trigger", "InvitationEncoder", "invariant", "Invitation", "sanitizeInvitation", "invitation", "InvitationEncoder", "decode", "encode", "performInvitation", "host", "guest", "options", "hooks", "guestDeviceProfile", "hostComplete", "Trigger", "guestComplete", "authCode", "hostObservable", "createInvitation", "subscribe", "hostInvitation", "state", "Invitation", "State", "CONNECTING", "onConnecting", "guestObservable", "acceptInvitation", "guestInvitation", "invariant", "swarmKey", "equals", "CONNECTED", "onConnected", "READY_FOR_AUTHENTICATION", "onReady", "authenticate", "wait", "AUTHENTICATING", "onAuthenticating", "SUCCESS", "onSuccess", "wake", "CANCELLED", "onCancelled", "TIMEOUT", "onTimeout", "error", "onError", "authMethod", "AuthMethod", "NONE", "ServiceContext", "hostHandler", "getInvitationHandler", "kind", "Kind", "SPACE", "invitations", "share", "guestHandler", "join", "Context", "createCredentialSignerWithChain", "CredentialGenerator", "failUndefined", "SnapshotStore", "MetadataStore", "SpaceManager", "valueEncoding", "DataServiceSubscriptions", "AutomergeHost", "testLocalDatabase", "FeedFactory", "FeedStore", "Keyring", "MemorySignalManager", "MemorySignalManagerContext", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "BlobStore", "createServiceHost", "config", "signalManagerContext", "ClientServicesHost", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "createServiceContext", "signalContext", "MemorySignalManagerContext", "storage", "createStorage", "type", "StorageType", "RAM", "networkManager", "NetworkManager", "modelFactory", "createDefaultModelFactory", "ServiceContext", "createPeers", "numPeers", "Promise", "all", "Array", "from", "map", "peer", "open", "Context", "createIdentity", "syncItemsLocal", "db1", "db2", "testLocalDatabase", "TestBuilder", "_ctx", "createPeer", "peerOptions", "TestPeer", "onDispose", "destroy", "dispose", "constructor", "opts", "dataStore", "_props", "props", "keyring", "Keyring", "createDirectory", "feedStore", "FeedStore", "factory", "FeedFactory", "root", "signer", "hypercore", "valueEncoding", "metadataStore", "MetadataStore", "blobStore", "BlobStore", "snapshotStore", "SnapshotStore", "spaceManager", "SpaceManager", "identity", "signingContext", "failUndefined", "automergeHost", "AutomergeHost", "dataSpaceManager", "DataSpaceManager", "DataServiceSubscriptions", "createSigningContext", "reset", "identityKey", "createKey", "deviceKey", "credentialSigner", "createCredentialSignerWithChain", "credential", "CredentialGenerator", "createDeviceAuthorization", "recordCredential", "getProfile", "undefined"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { createCredential } from '@dxos/credentials';\nimport { type Signer } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nexport const createMockCredential = async ({\n signer,\n issuer,\n}: {\n signer: Signer;\n issuer: PublicKey;\n}): Promise<Credential> =>\n createCredential({\n signer,\n issuer,\n subject: new PublicKey(Buffer.from('test')),\n assertion: {\n '@type': 'example.testing.rpc.MessageWithAny',\n payload: {\n '@type': 'google.protobuf.Any',\n value: Buffer.from('test'),\n },\n },\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { InvitationEncoder, type AuthenticatingInvitation, type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { type DeviceProfileDocument } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { ServiceContext } from '../services';\n\n/**\n * Strip secrets from invitation before giving it to the peer.\n */\nexport const sanitizeInvitation = (invitation: Invitation): Invitation => {\n return InvitationEncoder.decode(InvitationEncoder.encode(invitation));\n};\n\nexport type InvitationHost = {\n share(options?: Partial<Invitation>): CancellableInvitation;\n};\n\nexport type InvitationGuest = {\n join(invitation: Invitation | string, deviceProfile?: DeviceProfileDocument): AuthenticatingInvitation;\n};\n\nexport type PerformInvitationCallbacks<T> = {\n onConnecting?: (value: T) => boolean | void;\n onConnected?: (value: T) => boolean | void;\n onReady?: (value: T) => boolean | void;\n onAuthenticating?: (value: T) => boolean | void;\n onSuccess?: (value: T) => boolean | void;\n onCancelled?: (value: T) => boolean | void;\n onTimeout?: (value: T) => boolean | void;\n onError?: (value: T) => boolean | void;\n};\n\nexport type PerformInvitationParams = {\n host: ServiceContext | InvitationHost;\n guest: ServiceContext | InvitationGuest;\n options?: Partial<Invitation>;\n hooks?: {\n host?: PerformInvitationCallbacks<CancellableInvitation>;\n guest?: PerformInvitationCallbacks<AuthenticatingInvitation>;\n };\n guestDeviceProfile?: DeviceProfileDocument;\n};\n\nexport type Result = { invitation?: Invitation; error?: Error };\n\nexport const performInvitation = ({\n host,\n guest,\n options,\n hooks,\n guestDeviceProfile,\n}: PerformInvitationParams): [Promise<Result>, Promise<Result>] => {\n const hostComplete = new Trigger<Result>();\n const guestComplete = new Trigger<Result>();\n const authCode = new Trigger<string>();\n\n const hostObservable = createInvitation(host, options);\n hostObservable.subscribe(\n async (hostInvitation: Invitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.host?.onConnecting?.(hostObservable)) {\n break;\n }\n const guestObservable = acceptInvitation(guest, hostInvitation, guestDeviceProfile);\n guestObservable.subscribe(\n async (guestInvitation: Invitation) => {\n switch (guestInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (hooks?.guest?.onConnecting?.(guestObservable)) {\n break;\n }\n invariant(hostInvitation.swarmKey!.equals(guestInvitation.swarmKey!));\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.guest?.onConnected?.(guestObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.guest?.onReady?.(guestObservable)) {\n break;\n }\n await guestObservable.authenticate(await authCode.wait());\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.guest?.onAuthenticating?.(guestObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.guest?.onSuccess?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.guest?.onCancelled?.(guestObservable)) {\n break;\n }\n guestComplete.wake({ invitation: guestInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.guest?.onTimeout?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ invitation: guestInvitation });\n }\n }\n },\n (error: Error) => {\n if (hooks?.guest?.onError?.(guestObservable)) {\n return;\n }\n guestComplete.wake({ error });\n },\n );\n break;\n }\n\n case Invitation.State.CONNECTED: {\n hooks?.host?.onConnected?.(hostObservable);\n break;\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n if (hooks?.host?.onReady?.(hostObservable)) {\n break;\n }\n if (hostInvitation.authCode) {\n authCode.wake(hostInvitation.authCode);\n }\n break;\n }\n\n case Invitation.State.AUTHENTICATING: {\n hooks?.host?.onAuthenticating?.(hostObservable);\n break;\n }\n\n case Invitation.State.SUCCESS: {\n if (hooks?.host?.onSuccess?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.CANCELLED: {\n if (hooks?.host?.onCancelled?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n\n case Invitation.State.TIMEOUT: {\n if (hooks?.host?.onTimeout?.(hostObservable)) {\n break;\n }\n hostComplete.wake({ invitation: hostInvitation });\n break;\n }\n }\n },\n (error: Error) => {\n if (hooks?.host?.onError?.(hostObservable)) {\n return;\n }\n hostComplete.wake({ error });\n },\n );\n\n return [hostComplete.wait(), guestComplete.wait()];\n};\n\nconst createInvitation = (\n host: ServiceContext | InvitationHost,\n options?: Partial<Invitation>,\n): CancellableInvitation => {\n options ??= {\n authMethod: Invitation.AuthMethod.NONE,\n ...(options ?? {}),\n };\n\n if (host instanceof ServiceContext) {\n const hostHandler = host.getInvitationHandler({ kind: Invitation.Kind.SPACE, ...options });\n return host.invitations.createInvitation(hostHandler, options);\n }\n\n return host.share(options);\n};\n\nconst acceptInvitation = (\n guest: ServiceContext | InvitationGuest,\n invitation: Invitation,\n guestDeviceProfile?: DeviceProfileDocument,\n): AuthenticatingInvitation => {\n invitation = sanitizeInvitation(invitation);\n\n if (guest instanceof ServiceContext) {\n const guestHandler = guest.getInvitationHandler({ kind: invitation.kind });\n return guest.invitations.acceptInvitation(guestHandler, invitation, guestDeviceProfile);\n }\n\n return guest.join(invitation, guestDeviceProfile);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { createCredentialSignerWithChain, CredentialGenerator } from '@dxos/credentials';\nimport { failUndefined } from '@dxos/debug';\nimport {\n SnapshotStore,\n type DataPipeline,\n MetadataStore,\n SpaceManager,\n valueEncoding,\n DataServiceSubscriptions,\n AutomergeHost,\n} from '@dxos/echo-pipeline';\nimport { testLocalDatabase } from '@dxos/echo-pipeline/testing';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { Keyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext } from '@dxos/messaging';\nimport { MemoryTransportFactory, NetworkManager } from '@dxos/network-manager';\nimport { createStorage, type Storage, StorageType } from '@dxos/random-access-storage';\nimport { BlobStore } from '@dxos/teleport-extension-object-sync';\n\nimport { ClientServicesHost, createDefaultModelFactory, ServiceContext } from '../services';\nimport { DataSpaceManager, type SigningContext } from '../spaces';\n\n//\n// TODO(burdon): Replace with test builder.\n//\n\nexport const createServiceHost = (config: Config, signalManagerContext: MemorySignalManagerContext) => {\n return new ClientServicesHost({\n config,\n signalManager: new MemorySignalManager(signalManagerContext),\n transportFactory: MemoryTransportFactory,\n });\n};\n\nexport const createServiceContext = ({\n signalContext = new MemorySignalManagerContext(),\n storage = createStorage({ type: StorageType.RAM }),\n}: {\n signalContext?: MemorySignalManagerContext;\n storage?: Storage;\n} = {}) => {\n const signalManager = new MemorySignalManager(signalContext);\n const networkManager = new NetworkManager({\n signalManager,\n transportFactory: MemoryTransportFactory,\n });\n\n const modelFactory = createDefaultModelFactory();\n return new ServiceContext(storage, networkManager, signalManager, modelFactory);\n};\n\nexport const createPeers = async (numPeers: number) => {\n const signalContext = new MemorySignalManagerContext();\n\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = createServiceContext({ signalContext });\n await peer.open(new Context());\n return peer;\n }),\n );\n};\n\nexport const createIdentity = async (peer: ServiceContext) => {\n await peer.createIdentity();\n return peer;\n};\n\n// TODO(burdon): Remove @dxos/client-testing.\n// TODO(burdon): Create builder and make configurable.\nexport const syncItemsLocal = async (db1: DataPipeline, db2: DataPipeline) => {\n await testLocalDatabase(db1, db2);\n await testLocalDatabase(db2, db1);\n};\n\nexport class TestBuilder {\n public readonly signalContext = new MemorySignalManagerContext();\n private readonly _ctx = new Context();\n\n createPeer(peerOptions?: TestPeerOpts): TestPeer {\n const peer = new TestPeer(this.signalContext, peerOptions);\n this._ctx.onDispose(async () => peer.destroy());\n return peer;\n }\n\n async destroy() {\n await this._ctx.dispose();\n }\n}\n\nexport type TestPeerOpts = {\n dataStore?: StorageType;\n};\n\nexport type TestPeerProps = {\n storage?: Storage;\n feedStore?: FeedStore<any>;\n metadataStore?: MetadataStore;\n keyring?: Keyring;\n networkManager?: NetworkManager;\n spaceManager?: SpaceManager;\n dataSpaceManager?: DataSpaceManager;\n snapshotStore?: SnapshotStore;\n signingContext?: SigningContext;\n blobStore?: BlobStore;\n automergeHost?: AutomergeHost;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n\n constructor(\n private readonly signalContext: MemorySignalManagerContext,\n private readonly opts: TestPeerOpts = { dataStore: StorageType.RAM },\n ) {}\n\n get props() {\n return this._props;\n }\n\n get storage() {\n return (this._props.storage ??= createStorage({ type: this.opts.dataStore }));\n }\n\n get keyring() {\n return (this._props.keyring ??= new Keyring(this.storage.createDirectory('keyring')));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this.storage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding,\n },\n }),\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new MetadataStore(this.storage.createDirectory('metadata')));\n }\n\n get blobStore() {\n return (this._props.blobStore ??= new BlobStore(this.storage.createDirectory('blobs')));\n }\n\n get snapshotStore() {\n return (this._props.snapshotStore ??= new SnapshotStore(this.storage.createDirectory('snapshots')));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new NetworkManager({\n signalManager: new MemorySignalManager(this.signalContext),\n transportFactory: MemoryTransportFactory,\n }));\n }\n\n get spaceManager() {\n return (this._props.spaceManager ??= new SpaceManager({\n feedStore: this.feedStore,\n networkManager: this.networkManager,\n metadataStore: this.metadataStore,\n modelFactory: createDefaultModelFactory(),\n snapshotStore: this.snapshotStore,\n blobStore: this.blobStore,\n }));\n }\n\n get identity() {\n return this._props.signingContext ?? failUndefined();\n }\n\n get automergeHost() {\n return (this._props.automergeHost ??= new AutomergeHost({ directory: this.storage.createDirectory('automerge') }));\n }\n\n get dataSpaceManager() {\n return (this._props.dataSpaceManager ??= new DataSpaceManager(\n this.spaceManager,\n this.metadataStore,\n new DataServiceSubscriptions(),\n this.keyring,\n this.identity,\n this.feedStore,\n this.automergeHost,\n ));\n }\n\n async createIdentity() {\n this._props.signingContext ??= await createSigningContext(this.keyring);\n }\n\n async destroy() {\n await this.storage.reset();\n }\n}\n\nexport const createSigningContext = async (keyring: Keyring): Promise<SigningContext> => {\n const identityKey = await keyring.createKey();\n const deviceKey = await keyring.createKey();\n\n return {\n identityKey,\n deviceKey,\n credentialSigner: createCredentialSignerWithChain(\n keyring,\n {\n credential: await new CredentialGenerator(keyring, identityKey, deviceKey).createDeviceAuthorization(deviceKey),\n },\n deviceKey,\n ),\n recordCredential: async () => {}, // No-op.\n getProfile: () => undefined,\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,SAASA,wBAAwB;AAEjC,SAASC,iBAAiB;AAGnB,IAAMC,uBAAuB,OAAO,EACzCC,QACAC,OAAM,MAKNC,iBAAiB;EACfF;EACAC;EACAE,SAAS,IAAIC,UAAUC,OAAOC,KAAK,MAAA,CAAA;EACnCC,WAAW;IACT,SAAS;IACTC,SAAS;MACP,SAAS;MACTC,OAAOJ,OAAOC,KAAK,MAAA;IACrB;EACF;AACF,CAAA;;;ACvBF,SAASI,eAAe;AACxB,SAASC,yBAAoF;AAC7F,SAASC,iBAAiB;AAC1B,SAASC,kBAAkB;;AAQpB,IAAMC,qBAAqB,CAACC,eAAAA;AACjC,SAAOC,kBAAkBC,OAAOD,kBAAkBE,OAAOH,UAAAA,CAAAA;AAC3D;AAkCO,IAAMI,oBAAoB,CAAC,EAChCC,MACAC,OACAC,SACAC,OACAC,mBAAkB,MACM;AACxB,QAAMC,eAAe,IAAIC,QAAAA;AACzB,QAAMC,gBAAgB,IAAID,QAAAA;AAC1B,QAAME,WAAW,IAAIF,QAAAA;AAErB,QAAMG,iBAAiBC,iBAAiBV,MAAME,OAAAA;AAC9CO,iBAAeE,UACb,OAAOC,mBAAAA;AACL,YAAQA,eAAeC,OAAK;MAC1B,KAAKC,WAAWC,MAAMC,YAAY;AAChC,YAAIb,OAAOH,MAAMiB,eAAeR,cAAAA,GAAiB;AAC/C;QACF;AACA,cAAMS,kBAAkBC,iBAAiBlB,OAAOW,gBAAgBR,kBAAAA;AAChEc,wBAAgBP,UACd,OAAOS,oBAAAA;AACL,kBAAQA,gBAAgBP,OAAK;YAC3B,KAAKC,WAAWC,MAAMC,YAAY;AAChC,kBAAIb,OAAOF,OAAOgB,eAAeC,eAAAA,GAAkB;AACjD;cACF;AACAG,wBAAUT,eAAeU,SAAUC,OAAOH,gBAAgBE,QAAQ,GAAA,QAAA;;;;;;;;;AAClE;YACF;YAEA,KAAKR,WAAWC,MAAMS,WAAW;AAC/BrB,qBAAOF,OAAOwB,cAAcP,eAAAA;AAC5B;YACF;YAEA,KAAKJ,WAAWC,MAAMW,0BAA0B;AAC9C,kBAAIvB,OAAOF,OAAO0B,UAAUT,eAAAA,GAAkB;AAC5C;cACF;AACA,oBAAMA,gBAAgBU,aAAa,MAAMpB,SAASqB,KAAI,CAAA;AACtD;YACF;YAEA,KAAKf,WAAWC,MAAMe,gBAAgB;AACpC3B,qBAAOF,OAAO8B,mBAAmBb,eAAAA;AACjC;YACF;YAEA,KAAKJ,WAAWC,MAAMiB,SAAS;AAC7B,kBAAI7B,OAAOF,OAAOgC,YAAYf,eAAAA,GAAkB;AAC9C;cACF;AACAX,4BAAc2B,KAAK;gBAAEvC,YAAYyB;cAAgB,CAAA;AACjD;YACF;YAEA,KAAKN,WAAWC,MAAMoB,WAAW;AAC/B,kBAAIhC,OAAOF,OAAOmC,cAAclB,eAAAA,GAAkB;AAChD;cACF;AACAX,4BAAc2B,KAAK;gBAAEvC,YAAYyB;cAAgB,CAAA;AACjD;YACF;YAEA,KAAKN,WAAWC,MAAMsB,SAAS;AAC7B,kBAAIlC,OAAOF,OAAOqC,YAAYpB,eAAAA,GAAkB;AAC9C;cACF;AACAX,4BAAc2B,KAAK;gBAAEvC,YAAYyB;cAAgB,CAAA;YACnD;UACF;QACF,GACA,CAACmB,UAAAA;AACC,cAAIpC,OAAOF,OAAOuC,UAAUtB,eAAAA,GAAkB;AAC5C;UACF;AACAX,wBAAc2B,KAAK;YAAEK;UAAM,CAAA;QAC7B,CAAA;AAEF;MACF;MAEA,KAAKzB,WAAWC,MAAMS,WAAW;AAC/BrB,eAAOH,MAAMyB,cAAchB,cAAAA;AAC3B;MACF;MAEA,KAAKK,WAAWC,MAAMW,0BAA0B;AAC9C,YAAIvB,OAAOH,MAAM2B,UAAUlB,cAAAA,GAAiB;AAC1C;QACF;AACA,YAAIG,eAAeJ,UAAU;AAC3BA,mBAAS0B,KAAKtB,eAAeJ,QAAQ;QACvC;AACA;MACF;MAEA,KAAKM,WAAWC,MAAMe,gBAAgB;AACpC3B,eAAOH,MAAM+B,mBAAmBtB,cAAAA;AAChC;MACF;MAEA,KAAKK,WAAWC,MAAMiB,SAAS;AAC7B,YAAI7B,OAAOH,MAAMiC,YAAYxB,cAAAA,GAAiB;AAC5C;QACF;AACAJ,qBAAa6B,KAAK;UAAEvC,YAAYiB;QAAe,CAAA;AAC/C;MACF;MAEA,KAAKE,WAAWC,MAAMoB,WAAW;AAC/B,YAAIhC,OAAOH,MAAMoC,cAAc3B,cAAAA,GAAiB;AAC9C;QACF;AACAJ,qBAAa6B,KAAK;UAAEvC,YAAYiB;QAAe,CAAA;AAC/C;MACF;MAEA,KAAKE,WAAWC,MAAMsB,SAAS;AAC7B,YAAIlC,OAAOH,MAAMsC,YAAY7B,cAAAA,GAAiB;AAC5C;QACF;AACAJ,qBAAa6B,KAAK;UAAEvC,YAAYiB;QAAe,CAAA;AAC/C;MACF;IACF;EACF,GACA,CAAC2B,UAAAA;AACC,QAAIpC,OAAOH,MAAMwC,UAAU/B,cAAAA,GAAiB;AAC1C;IACF;AACAJ,iBAAa6B,KAAK;MAAEK;IAAM,CAAA;EAC5B,CAAA;AAGF,SAAO;IAAClC,aAAawB,KAAI;IAAItB,cAAcsB,KAAI;;AACjD;AAEA,IAAMnB,mBAAmB,CACvBV,MACAE,YAAAA;AAEAA,cAAY;IACVuC,YAAY3B,WAAW4B,WAAWC;IAClC,GAAIzC,WAAW,CAAC;EAClB;AAEA,MAAIF,gBAAgB4C,gBAAgB;AAClC,UAAMC,cAAc7C,KAAK8C,qBAAqB;MAAEC,MAAMjC,WAAWkC,KAAKC;MAAO,GAAG/C;IAAQ,CAAA;AACxF,WAAOF,KAAKkD,YAAYxC,iBAAiBmC,aAAa3C,OAAAA;EACxD;AAEA,SAAOF,KAAKmD,MAAMjD,OAAAA;AACpB;AAEA,IAAMiB,mBAAmB,CACvBlB,OACAN,YACAS,uBAAAA;AAEAT,eAAaD,mBAAmBC,UAAAA;AAEhC,MAAIM,iBAAiB2C,gBAAgB;AACnC,UAAMQ,eAAenD,MAAM6C,qBAAqB;MAAEC,MAAMpD,WAAWoD;IAAK,CAAA;AACxE,WAAO9C,MAAMiD,YAAY/B,iBAAiBiC,cAAczD,YAAYS,kBAAAA;EACtE;AAEA,SAAOH,MAAMoD,KAAK1D,YAAYS,kBAAAA;AAChC;;;ACvNA,SAASkD,eAAe;AACxB,SAASC,iCAAiCC,2BAA2B;AACrE,SAASC,qBAAqB;AAC9B,SACEC,eAEAC,eACAC,cACAC,eACAC,0BACAC,qBACK;AACP,SAASC,yBAAyB;AAClC,SAASC,aAAaC,iBAAiB;AACvC,SAASC,eAAe;AACxB,SAASC,qBAAqBC,kCAAkC;AAChE,SAASC,wBAAwBC,sBAAsB;AACvD,SAASC,eAA6BC,mBAAmB;AACzD,SAASC,iBAAiB;AASnB,IAAMC,oBAAoB,CAACC,QAAgBC,yBAAAA;AAChD,SAAO,IAAIC,mBAAmB;IAC5BF;IACAG,eAAe,IAAIC,oBAAoBH,oBAAAA;IACvCI,kBAAkBC;EACpB,CAAA;AACF;AAEO,IAAMC,uBAAuB,CAAC,EACnCC,gBAAgB,IAAIC,2BAAAA,GACpBC,UAAUC,cAAc;EAAEC,MAAMC,YAAYC;AAAI,CAAA,EAAE,IAIhD,CAAC,MAAC;AACJ,QAAMX,gBAAgB,IAAIC,oBAAoBI,aAAAA;AAC9C,QAAMO,iBAAiB,IAAIC,eAAe;IACxCb;IACAE,kBAAkBC;EACpB,CAAA;AAEA,QAAMW,eAAeC,0BAAAA;AACrB,SAAO,IAAIC,eAAeT,SAASK,gBAAgBZ,eAAec,YAAAA;AACpE;AAEO,IAAMG,cAAc,OAAOC,aAAAA;AAChC,QAAMb,gBAAgB,IAAIC,2BAAAA;AAE1B,SAAO,MAAMa,QAAQC,IACnBC,MAAMC,KAAKD,MAAMH,QAAAA,CAAAA,EAAWK,IAAI,YAAA;AAC9B,UAAMC,OAAOpB,qBAAqB;MAAEC;IAAc,CAAA;AAClD,UAAMmB,KAAKC,KAAK,IAAIC,QAAAA,CAAAA;AACpB,WAAOF;EACT,CAAA,CAAA;AAEJ;AAEO,IAAMG,iBAAiB,OAAOH,SAAAA;AACnC,QAAMA,KAAKG,eAAc;AACzB,SAAOH;AACT;AAIO,IAAMI,iBAAiB,OAAOC,KAAmBC,QAAAA;AACtD,QAAMC,kBAAkBF,KAAKC,GAAAA;AAC7B,QAAMC,kBAAkBD,KAAKD,GAAAA;AAC/B;AAEO,IAAMG,cAAN,MAAMA;EAAN;AACW3B,yBAAgB,IAAIC,2BAAAA;AACnB2B,gBAAO,IAAIP,QAAAA;;EAE5BQ,WAAWC,aAAsC;AAC/C,UAAMX,OAAO,IAAIY,SAAS,KAAK/B,eAAe8B,WAAAA;AAC9C,SAAKF,KAAKI,UAAU,YAAYb,KAAKc,QAAO,CAAA;AAC5C,WAAOd;EACT;EAEA,MAAMc,UAAU;AACd,UAAM,KAAKL,KAAKM,QAAO;EACzB;AACF;AAoBO,IAAMH,WAAN,MAAMA;EAGXI,YACmBnC,eACAoC,OAAqB;IAAEC,WAAWhC,YAAYC;EAAI,GACnE;SAFiBN,gBAAAA;SACAoC,OAAAA;SAJXE,SAAwB,CAAC;EAK9B;EAEH,IAAIC,QAAQ;AACV,WAAO,KAAKD;EACd;EAEA,IAAIpC,UAAU;AACZ,WAAQ,KAAKoC,OAAOpC,YAAYC,cAAc;MAAEC,MAAM,KAAKgC,KAAKC;IAAU,CAAA;EAC5E;EAEA,IAAIG,UAAU;AACZ,WAAQ,KAAKF,OAAOE,YAAY,IAAIC,QAAQ,KAAKvC,QAAQwC,gBAAgB,SAAA,CAAA;EAC3E;EAEA,IAAIC,YAAY;AACd,WAAQ,KAAKL,OAAOK,cAAc,IAAIC,UAAU;MAC9CC,SAAS,IAAIC,YAAY;QACvBC,MAAM,KAAK7C,QAAQwC,gBAAgB,OAAA;QACnCM,QAAQ,KAAKR;QACbS,WAAW;UACTC;QACF;MACF,CAAA;IACF,CAAA;EACF;EAEA,IAAIC,gBAAgB;AAClB,WAAQ,KAAKb,OAAOa,kBAAkB,IAAIC,cAAc,KAAKlD,QAAQwC,gBAAgB,UAAA,CAAA;EACvF;EAEA,IAAIW,YAAY;AACd,WAAQ,KAAKf,OAAOe,cAAc,IAAIC,UAAU,KAAKpD,QAAQwC,gBAAgB,OAAA,CAAA;EAC/E;EAEA,IAAIa,gBAAgB;AAClB,WAAQ,KAAKjB,OAAOiB,kBAAkB,IAAIC,cAAc,KAAKtD,QAAQwC,gBAAgB,WAAA,CAAA;EACvF;EAEA,IAAInC,iBAAiB;AACnB,WAAQ,KAAK+B,OAAO/B,mBAAmB,IAAIC,eAAe;MACxDb,eAAe,IAAIC,oBAAoB,KAAKI,aAAa;MACzDH,kBAAkBC;IACpB,CAAA;EACF;EAEA,IAAI2D,eAAe;AACjB,WAAQ,KAAKnB,OAAOmB,iBAAiB,IAAIC,aAAa;MACpDf,WAAW,KAAKA;MAChBpC,gBAAgB,KAAKA;MACrB4C,eAAe,KAAKA;MACpB1C,cAAcC,0BAAAA;MACd6C,eAAe,KAAKA;MACpBF,WAAW,KAAKA;IAClB,CAAA;EACF;EAEA,IAAIM,WAAW;AACb,WAAO,KAAKrB,OAAOsB,kBAAkBC,cAAAA;EACvC;EAEA,IAAIC,gBAAgB;AAClB,WAAQ,KAAKxB,OAAOwB,kBAAkB,IAAIC,cAAc;MAAEC,WAAW,KAAK9D,QAAQwC,gBAAgB,WAAA;IAAa,CAAA;EACjH;EAEA,IAAIuB,mBAAmB;AACrB,WAAQ,KAAK3B,OAAO2B,qBAAqB,IAAIC,iBAC3C,KAAKT,cACL,KAAKN,eACL,IAAIgB,yBAAAA,GACJ,KAAK3B,SACL,KAAKmB,UACL,KAAKhB,WACL,KAAKmB,aAAa;EAEtB;EAEA,MAAMxC,iBAAiB;AACrB,SAAKgB,OAAOsB,mBAAmB,MAAMQ,qBAAqB,KAAK5B,OAAO;EACxE;EAEA,MAAMP,UAAU;AACd,UAAM,KAAK/B,QAAQmE,MAAK;EAC1B;AACF;AAEO,IAAMD,uBAAuB,OAAO5B,YAAAA;AACzC,QAAM8B,cAAc,MAAM9B,QAAQ+B,UAAS;AAC3C,QAAMC,YAAY,MAAMhC,QAAQ+B,UAAS;AAEzC,SAAO;IACLD;IACAE;IACAC,kBAAkBC,gCAChBlC,SACA;MACEmC,YAAY,MAAM,IAAIC,oBAAoBpC,SAAS8B,aAAaE,SAAAA,EAAWK,0BAA0BL,SAAAA;IACvG,GACAA,SAAAA;IAEFM,kBAAkB,YAAA;IAAa;IAC/BC,YAAY,MAAMC;EACpB;AACF;",
6
+ "names": ["createCredential", "PublicKey", "createMockCredential", "signer", "issuer", "createCredential", "subject", "PublicKey", "Buffer", "from", "assertion", "payload", "value", "Trigger", "InvitationEncoder", "invariant", "Invitation", "sanitizeInvitation", "invitation", "InvitationEncoder", "decode", "encode", "performInvitation", "host", "guest", "options", "hooks", "guestDeviceProfile", "hostComplete", "Trigger", "guestComplete", "authCode", "hostObservable", "createInvitation", "subscribe", "hostInvitation", "state", "Invitation", "State", "CONNECTING", "onConnecting", "guestObservable", "acceptInvitation", "guestInvitation", "invariant", "swarmKey", "equals", "CONNECTED", "onConnected", "READY_FOR_AUTHENTICATION", "onReady", "authenticate", "wait", "AUTHENTICATING", "onAuthenticating", "SUCCESS", "onSuccess", "wake", "CANCELLED", "onCancelled", "TIMEOUT", "onTimeout", "error", "onError", "authMethod", "AuthMethod", "NONE", "ServiceContext", "hostHandler", "getInvitationHandler", "kind", "Kind", "SPACE", "invitations", "share", "guestHandler", "join", "Context", "createCredentialSignerWithChain", "CredentialGenerator", "failUndefined", "SnapshotStore", "MetadataStore", "SpaceManager", "valueEncoding", "DataServiceSubscriptions", "AutomergeHost", "testLocalDatabase", "FeedFactory", "FeedStore", "Keyring", "MemorySignalManager", "MemorySignalManagerContext", "MemoryTransportFactory", "NetworkManager", "createStorage", "StorageType", "BlobStore", "createServiceHost", "config", "signalManagerContext", "ClientServicesHost", "signalManager", "MemorySignalManager", "transportFactory", "MemoryTransportFactory", "createServiceContext", "signalContext", "MemorySignalManagerContext", "storage", "createStorage", "type", "StorageType", "RAM", "networkManager", "NetworkManager", "modelFactory", "createDefaultModelFactory", "ServiceContext", "createPeers", "numPeers", "Promise", "all", "Array", "from", "map", "peer", "open", "Context", "createIdentity", "syncItemsLocal", "db1", "db2", "testLocalDatabase", "TestBuilder", "_ctx", "createPeer", "peerOptions", "TestPeer", "onDispose", "destroy", "dispose", "constructor", "opts", "dataStore", "_props", "props", "keyring", "Keyring", "createDirectory", "feedStore", "FeedStore", "factory", "FeedFactory", "root", "signer", "hypercore", "valueEncoding", "metadataStore", "MetadataStore", "blobStore", "BlobStore", "snapshotStore", "SnapshotStore", "spaceManager", "SpaceManager", "identity", "signingContext", "failUndefined", "automergeHost", "AutomergeHost", "directory", "dataSpaceManager", "DataSpaceManager", "DataServiceSubscriptions", "createSigningContext", "reset", "identityKey", "createKey", "deviceKey", "credentialSigner", "createCredentialSignerWithChain", "credential", "CredentialGenerator", "createDeviceAuthorization", "recordCredential", "getProfile", "undefined"]
7
7
  }
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_QTXFCLVV_exports = {};
30
- __export(chunk_QTXFCLVV_exports, {
29
+ var chunk_UGRBM6TA_exports = {};
30
+ __export(chunk_UGRBM6TA_exports, {
31
31
  ClientRpcServer: () => ClientRpcServer,
32
32
  ClientServicesHost: () => ClientServicesHost,
33
33
  DataSpace: () => DataSpace,
@@ -60,7 +60,7 @@ __export(chunk_QTXFCLVV_exports, {
60
60
  subscribeToSpaces: () => subscribeToSpaces,
61
61
  subscribeToSwarmInfo: () => subscribeToSwarmInfo
62
62
  });
63
- module.exports = __toCommonJS(chunk_QTXFCLVV_exports);
63
+ module.exports = __toCommonJS(chunk_UGRBM6TA_exports);
64
64
  var import_async = require("@dxos/async");
65
65
  var import_codec_protobuf = require("@dxos/codec-protobuf");
66
66
  var import_feed_store = require("@dxos/feed-store");
@@ -205,6 +205,7 @@ var import_context9 = require("@dxos/context");
205
205
  var import_credentials15 = require("@dxos/credentials");
206
206
  var import_debug6 = require("@dxos/debug");
207
207
  var import_echo_pipeline2 = require("@dxos/echo-pipeline");
208
+ var import_echo_schema = require("@dxos/echo-schema");
208
209
  var import_feed_store4 = require("@dxos/feed-store");
209
210
  var import_invariant14 = require("@dxos/invariant");
210
211
  var import_keyring = require("@dxos/keyring");
@@ -228,7 +229,7 @@ var import_client_protocol5 = require("@dxos/client-protocol");
228
229
  var import_context10 = require("@dxos/context");
229
230
  var import_document_model2 = require("@dxos/document-model");
230
231
  var import_echo_pipeline3 = require("@dxos/echo-pipeline");
231
- var import_echo_schema = require("@dxos/echo-schema");
232
+ var import_echo_schema2 = require("@dxos/echo-schema");
232
233
  var import_invariant16 = require("@dxos/invariant");
233
234
  var import_keys11 = require("@dxos/keys");
234
235
  var import_log15 = require("@dxos/log");
@@ -247,6 +248,7 @@ var import_invariant17 = require("@dxos/invariant");
247
248
  var import_services14 = require("@dxos/protocols/proto/dxos/client/services");
248
249
  var import_async17 = require("@dxos/async");
249
250
  var import_codec_protobuf13 = require("@dxos/codec-protobuf");
251
+ var import_keys12 = require("@dxos/keys");
250
252
  var import_log16 = require("@dxos/log");
251
253
  var import_services15 = require("@dxos/protocols/proto/dxos/client/services");
252
254
  var import_util10 = require("@dxos/util");
@@ -2782,7 +2784,7 @@ var getPlatform = () => {
2782
2784
  };
2783
2785
  }
2784
2786
  };
2785
- var DXOS_VERSION = "0.4.7-main.b23cefb";
2787
+ var DXOS_VERSION = "0.4.7-main.b51ad3a";
2786
2788
  var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/services/diagnostics.ts";
2787
2789
  var DEFAULT_TIMEOUT = 1e3;
2788
2790
  var createDiagnostics = async (clientServices, serviceContext, config) => {
@@ -2925,6 +2927,7 @@ var AutomergeSpaceState = class {
2925
2927
  this._onNewRoot = _onNewRoot;
2926
2928
  this.rootUrl = void 0;
2927
2929
  this.lastEpoch = void 0;
2930
+ this._isProcessingRootDocs = false;
2928
2931
  }
2929
2932
  async processCredential(credential) {
2930
2933
  if (!(0, import_credentials11.checkCredentialType)(credential, "dxos.halo.credentials.Epoch")) {
@@ -2933,8 +2936,19 @@ var AutomergeSpaceState = class {
2933
2936
  this.lastEpoch = credential;
2934
2937
  if (credential.subject.assertion.automergeRoot) {
2935
2938
  this.rootUrl = credential.subject.assertion.automergeRoot;
2939
+ if (this._isProcessingRootDocs) {
2940
+ this._onNewRoot(this.rootUrl);
2941
+ }
2942
+ }
2943
+ }
2944
+ startProcessingRootDocs() {
2945
+ if (this._isProcessingRootDocs) {
2946
+ return;
2947
+ }
2948
+ if (this.rootUrl) {
2936
2949
  this._onNewRoot(this.rootUrl);
2937
2950
  }
2951
+ this._isProcessingRootDocs = true;
2938
2952
  }
2939
2953
  };
2940
2954
  var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/client-services/src/packlets/spaces/notarization-plugin.ts";
@@ -3384,12 +3398,13 @@ var DataSpace = class {
3384
3398
  });
3385
3399
  await this._initializeAndReadControlPipeline();
3386
3400
  await (0, import_async10.sleep)(1);
3401
+ this._automergeSpaceState.startProcessingRootDocs();
3387
3402
  await this._inner.initializeDataPipeline();
3388
3403
  this.metrics.dataPipelineOpen = /* @__PURE__ */ new Date();
3389
3404
  await (0, import_context6.cancelWithContext)(this._ctx, this._inner.dataPipeline.ensureEpochInitialized());
3390
3405
  (0, import_log9.log)("waiting for data pipeline to reach target timeframe", void 0, {
3391
3406
  F: __dxlog_file12,
3392
- L: 286,
3407
+ L: 288,
3393
3408
  S: this,
3394
3409
  C: (f, a) => f(...a)
3395
3410
  });
@@ -3400,7 +3415,7 @@ var DataSpace = class {
3400
3415
  this.metrics.dataPipelineReady = /* @__PURE__ */ new Date();
3401
3416
  (0, import_log9.log)("data pipeline ready", void 0, {
3402
3417
  F: __dxlog_file12,
3403
- L: 294,
3418
+ L: 296,
3404
3419
  S: this,
3405
3420
  C: (f, a) => f(...a)
3406
3421
  });
@@ -3410,7 +3425,7 @@ var DataSpace = class {
3410
3425
  state: import_services9.SpaceState[this._state]
3411
3426
  }, {
3412
3427
  F: __dxlog_file12,
3413
- L: 298,
3428
+ L: 300,
3414
3429
  S: this,
3415
3430
  C: (f, a) => f(...a)
3416
3431
  });
@@ -3426,7 +3441,7 @@ var DataSpace = class {
3426
3441
  await this._createWritableFeeds();
3427
3442
  (0, import_log9.log)("writable feeds created", void 0, {
3428
3443
  F: __dxlog_file12,
3429
- L: 314,
3444
+ L: 316,
3430
3445
  S: this,
3431
3446
  C: (f, a) => f(...a)
3432
3447
  });
@@ -3489,7 +3504,7 @@ var DataSpace = class {
3489
3504
  rootUrl
3490
3505
  }, {
3491
3506
  F: __dxlog_file12,
3492
- L: 380,
3507
+ L: 382,
3493
3508
  S: this,
3494
3509
  C: (f, a) => f(...a)
3495
3510
  });
@@ -3521,7 +3536,7 @@ var DataSpace = class {
3521
3536
  err
3522
3537
  }, {
3523
3538
  F: __dxlog_file12,
3524
- L: 403,
3539
+ L: 405,
3525
3540
  S: this,
3526
3541
  C: (f, a) => f(...a)
3527
3542
  });
@@ -3552,15 +3567,40 @@ var DataSpace = class {
3552
3567
  epoch = await this.dataPipeline.createEpoch();
3553
3568
  }
3554
3569
  break;
3555
- case import_services9.CreateEpochRequest.Migration.INIT_AUTOMERGE: {
3556
- const document = this._automergeHost.repo.create();
3557
- epoch = {
3558
- previousId: this._automergeSpaceState.lastEpoch?.id,
3559
- number: (this._automergeSpaceState.lastEpoch?.subject.assertion.number ?? -1) + 1,
3560
- timeframe: this._automergeSpaceState.lastEpoch?.subject.assertion.timeframe ?? new import_timeframe2.Timeframe(),
3561
- automergeRoot: document.url
3562
- };
3563
- }
3570
+ case import_services9.CreateEpochRequest.Migration.INIT_AUTOMERGE:
3571
+ {
3572
+ const document = this._automergeHost.repo.create();
3573
+ epoch = {
3574
+ previousId: this._automergeSpaceState.lastEpoch?.id,
3575
+ number: (this._automergeSpaceState.lastEpoch?.subject.assertion.number ?? -1) + 1,
3576
+ timeframe: this._automergeSpaceState.lastEpoch?.subject.assertion.timeframe ?? new import_timeframe2.Timeframe(),
3577
+ automergeRoot: document.url
3578
+ };
3579
+ }
3580
+ break;
3581
+ case import_services9.CreateEpochRequest.Migration.PRUNE_AUTOMERGE_ROOT_HISTORY:
3582
+ {
3583
+ const currentRootUrl = this._automergeSpaceState.rootUrl;
3584
+ const rootHandle = this._automergeHost.repo.find(currentRootUrl);
3585
+ await (0, import_context6.cancelWithContext)(this._ctx, (0, import_async10.asyncTimeout)(rootHandle.whenReady(), 1e4));
3586
+ const newRoot = this._automergeHost.repo.create(rootHandle.docSync());
3587
+ (0, import_invariant10.invariant)(typeof newRoot.url === "string" && newRoot.url.length > 0, void 0, {
3588
+ F: __dxlog_file12,
3589
+ L: 450,
3590
+ S: this,
3591
+ A: [
3592
+ "typeof newRoot.url === 'string' && newRoot.url.length > 0",
3593
+ ""
3594
+ ]
3595
+ });
3596
+ epoch = {
3597
+ previousId: this._automergeSpaceState.lastEpoch?.id,
3598
+ number: (this._automergeSpaceState.lastEpoch?.subject.assertion.number ?? -1) + 1,
3599
+ timeframe: this._automergeSpaceState.lastEpoch?.subject.assertion.timeframe ?? new import_timeframe2.Timeframe(),
3600
+ automergeRoot: newRoot.url
3601
+ };
3602
+ }
3603
+ break;
3564
3604
  }
3565
3605
  if (!epoch) {
3566
3606
  return;
@@ -3611,7 +3651,7 @@ var DataSpace = class {
3611
3651
  state: import_services9.SpaceState[this._state]
3612
3652
  }, {
3613
3653
  F: __dxlog_file12,
3614
- L: 492,
3654
+ L: 514,
3615
3655
  S: this,
3616
3656
  C: (f, a) => f(...a)
3617
3657
  });
@@ -4238,10 +4278,12 @@ var SpacesServiceImpl = class {
4238
4278
  }
4239
4279
  }
4240
4280
  }
4241
- async createEpoch({ spaceKey }) {
4281
+ async createEpoch({ spaceKey, migration }) {
4242
4282
  const dataSpaceManager = await this._getDataSpaceManager();
4243
4283
  const space = dataSpaceManager.spaces.get(spaceKey) ?? (0, import_debug5.raise)(new import_protocols11.SpaceNotFoundError(spaceKey));
4244
- await space.createEpoch();
4284
+ await space.createEpoch({
4285
+ migration
4286
+ });
4245
4287
  }
4246
4288
  _serializeSpace(space) {
4247
4289
  return {
@@ -4270,9 +4312,7 @@ var SpacesServiceImpl = class {
4270
4312
  return {
4271
4313
  identity: {
4272
4314
  identityKey: member.key,
4273
- profile: {
4274
- displayName: member.profile?.displayName
4275
- }
4315
+ profile: member.profile ?? {}
4276
4316
  },
4277
4317
  presence: member.removed ? import_services11.SpaceMember.PresenceState.REMOVED : isMe || peers.length > 0 ? import_services11.SpaceMember.PresenceState.ONLINE : import_services11.SpaceMember.PresenceState.OFFLINE,
4278
4318
  peerStates: peers
@@ -4308,6 +4348,9 @@ var ServiceContext = class {
4308
4348
  this._handlerFactories = /* @__PURE__ */ new Map();
4309
4349
  this._instanceId = import_keys10.PublicKey.random().toHex();
4310
4350
  this.metadataStore = new import_echo_pipeline2.MetadataStore(storage.createDirectory("metadata"));
4351
+ this.indexMetadata = new import_echo_schema.IndexMetadataStore({
4352
+ directory: storage.createDirectory("index-metadata")
4353
+ });
4311
4354
  this.snapshotStore = new import_echo_pipeline2.SnapshotStore(storage.createDirectory("snapshots"));
4312
4355
  this.blobStore = new import_teleport_extension_object_sync.BlobStore(storage.createDirectory("blobs"));
4313
4356
  this.keyring = new import_keyring.Keyring(storage.createDirectory("keyring"));
@@ -4330,7 +4373,10 @@ var ServiceContext = class {
4330
4373
  snapshotStore: this.snapshotStore
4331
4374
  });
4332
4375
  this.identityManager = new IdentityManager(this.metadataStore, this.keyring, this.feedStore, this.spaceManager, this._runtimeParams);
4333
- this.automergeHost = new import_echo_pipeline2.AutomergeHost(storage.createDirectory("automerge"));
4376
+ this.automergeHost = new import_echo_pipeline2.AutomergeHost({
4377
+ directory: storage.createDirectory("automerge"),
4378
+ metadata: this.indexMetadata
4379
+ });
4334
4380
  this.invitations = new InvitationsHandler(this.networkManager);
4335
4381
  this._handlerFactories.set(import_services12.Invitation.Kind.DEVICE, () => new DeviceInvitationProtocol(this.keyring, () => this.identityManager.identity ?? (0, import_debug6.failUndefined)(), this._acceptIdentity.bind(this)));
4336
4382
  }
@@ -4338,7 +4384,7 @@ var ServiceContext = class {
4338
4384
  await this._checkStorageVersion();
4339
4385
  (0, import_log13.log)("opening...", void 0, {
4340
4386
  F: __dxlog_file15,
4341
- L: 146,
4387
+ L: 152,
4342
4388
  S: this,
4343
4389
  C: (f, a) => f(...a)
4344
4390
  });
@@ -4346,7 +4392,7 @@ var ServiceContext = class {
4346
4392
  id: this._instanceId
4347
4393
  }), {
4348
4394
  F: __dxlog_file15,
4349
- L: 147,
4395
+ L: 153,
4350
4396
  S: this,
4351
4397
  C: (f, a) => f(...a)
4352
4398
  });
@@ -4362,13 +4408,13 @@ var ServiceContext = class {
4362
4408
  id: this._instanceId
4363
4409
  }), {
4364
4410
  F: __dxlog_file15,
4365
- L: 157,
4411
+ L: 163,
4366
4412
  S: this,
4367
4413
  C: (f, a) => f(...a)
4368
4414
  });
4369
4415
  (0, import_log13.log)("opened", void 0, {
4370
4416
  F: __dxlog_file15,
4371
- L: 158,
4417
+ L: 164,
4372
4418
  S: this,
4373
4419
  C: (f, a) => f(...a)
4374
4420
  });
@@ -4376,7 +4422,7 @@ var ServiceContext = class {
4376
4422
  async close() {
4377
4423
  (0, import_log13.log)("closing...", void 0, {
4378
4424
  F: __dxlog_file15,
4379
- L: 162,
4425
+ L: 168,
4380
4426
  S: this,
4381
4427
  C: (f, a) => f(...a)
4382
4428
  });
@@ -4394,7 +4440,7 @@ var ServiceContext = class {
4394
4440
  await this.metadataStore.close();
4395
4441
  (0, import_log13.log)("closed", void 0, {
4396
4442
  F: __dxlog_file15,
4397
- L: 175,
4443
+ L: 181,
4398
4444
  S: this,
4399
4445
  C: (f, a) => f(...a)
4400
4446
  });
@@ -4408,7 +4454,7 @@ var ServiceContext = class {
4408
4454
  const factory = this._handlerFactories.get(invitation.kind);
4409
4455
  (0, import_invariant14.invariant)(factory, `Unknown invitation kind: ${invitation.kind}`, {
4410
4456
  F: __dxlog_file15,
4411
- L: 186,
4457
+ L: 192,
4412
4458
  S: this,
4413
4459
  A: [
4414
4460
  "factory",
@@ -4440,7 +4486,7 @@ var ServiceContext = class {
4440
4486
  async _initialize(ctx) {
4441
4487
  (0, import_log13.log)("initializing spaces...", void 0, {
4442
4488
  F: __dxlog_file15,
4443
- L: 217,
4489
+ L: 223,
4444
4490
  S: this,
4445
4491
  C: (f, a) => f(...a)
4446
4492
  });
@@ -4463,7 +4509,7 @@ var ServiceContext = class {
4463
4509
  this._handlerFactories.set(import_services12.Invitation.Kind.SPACE, (invitation) => {
4464
4510
  (0, import_invariant14.invariant)(this.dataSpaceManager, "dataSpaceManager not initialized yet", {
4465
4511
  F: __dxlog_file15,
4466
- L: 242,
4512
+ L: 248,
4467
4513
  S: this,
4468
4514
  A: [
4469
4515
  "this.dataSpaceManager",
@@ -4487,7 +4533,7 @@ var ServiceContext = class {
4487
4533
  details: assertion
4488
4534
  }, {
4489
4535
  F: __dxlog_file15,
4490
- L: 258,
4536
+ L: 264,
4491
4537
  S: this,
4492
4538
  C: (f, a) => f(...a)
4493
4539
  });
@@ -4498,7 +4544,7 @@ var ServiceContext = class {
4498
4544
  details: assertion
4499
4545
  }, {
4500
4546
  F: __dxlog_file15,
4501
- L: 262,
4547
+ L: 268,
4502
4548
  S: this,
4503
4549
  C: (f, a) => f(...a)
4504
4550
  });
@@ -4509,7 +4555,7 @@ var ServiceContext = class {
4509
4555
  details: assertion
4510
4556
  }, {
4511
4557
  F: __dxlog_file15,
4512
- L: 267,
4558
+ L: 273,
4513
4559
  S: this,
4514
4560
  C: (f, a) => f(...a)
4515
4561
  });
@@ -4520,7 +4566,7 @@ var ServiceContext = class {
4520
4566
  } catch (err) {
4521
4567
  import_log13.log.catch(err, void 0, {
4522
4568
  F: __dxlog_file15,
4523
- L: 273,
4569
+ L: 279,
4524
4570
  S: this,
4525
4571
  C: (f, a) => f(...a)
4526
4572
  });
@@ -4737,7 +4783,8 @@ var DevicesServiceImpl = class {
4737
4783
  var LoggingServiceImpl = class {
4738
4784
  constructor() {
4739
4785
  this._logs = new import_async17.Event();
4740
- this._started = /* @__PURE__ */ new Date();
4786
+ this._started = Date.now();
4787
+ this._sessionId = import_keys12.PublicKey.random().toHex();
4741
4788
  this._logProcessor = (_config, entry2) => {
4742
4789
  this._logs.emit(entry2);
4743
4790
  };
@@ -4813,7 +4860,12 @@ var LoggingServiceImpl = class {
4813
4860
  meta: {
4814
4861
  // TODO(dmaretskyi): Fix proto.
4815
4862
  file: entry2.meta?.F ?? "",
4816
- line: entry2.meta?.L ?? 0
4863
+ line: entry2.meta?.L ?? 0,
4864
+ scope: {
4865
+ hostSessionId: this._sessionId,
4866
+ uptimeSeconds: (Date.now() - this._started) / 1e3,
4867
+ name: (0, import_util10.getDebugName)(entry2.meta?.S)
4868
+ }
4817
4869
  }
4818
4870
  };
4819
4871
  try {
@@ -5279,8 +5331,8 @@ var ClientServicesHost = class {
5279
5331
  document.change((doc) => {
5280
5332
  (0, import_util9.assignDeep)(doc, [
5281
5333
  "objects",
5282
- (0, import_echo_schema.getAutomergeObjectCore)(obj).id
5283
- ], (0, import_echo_schema.getRawDoc)(obj).handle.docSync());
5334
+ (0, import_echo_schema2.getAutomergeObjectCore)(obj).id
5335
+ ], (0, import_echo_schema2.getRawDoc)(obj).handle.docSync());
5284
5336
  });
5285
5337
  return identity;
5286
5338
  }
@@ -5336,4 +5388,4 @@ ClientServicesHost = _ts_decorate8([
5336
5388
  subscribeToSpaces,
5337
5389
  subscribeToSwarmInfo
5338
5390
  });
5339
- //# sourceMappingURL=chunk-QTXFCLVV.cjs.map
5391
+ //# sourceMappingURL=chunk-UGRBM6TA.cjs.map