@dxos/client-services 0.9.1-main.c7dcc2e112 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-7KG6VMEU.mjs → chunk-XU5R2BMF.mjs} +60 -54
- package/dist/lib/browser/chunk-XU5R2BMF.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +3 -3
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-KG56NFCZ.mjs → chunk-H5YTUD35.mjs} +60 -54
- package/dist/lib/node-esm/chunk-H5YTUD35.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +3 -3
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/packlets/invitations/invitations-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts +1 -1
- package/dist/types/src/packlets/services/service-context.d.ts.map +1 -1
- package/dist/types/src/packlets/services/sqlite-storage.d.ts +1 -1
- package/dist/types/src/packlets/services/sqlite-storage.d.ts.map +1 -1
- package/dist/types/src/packlets/space-export/serialized-space-writer.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts +1 -1
- package/dist/types/src/packlets/spaces/data-space-manager.d.ts.map +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts +1 -1
- package/dist/types/src/packlets/spaces/spaces-service.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +1 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -42
- package/src/packlets/agents/edge-agent-manager.ts +2 -2
- package/src/packlets/identity/identity-manager.test.ts +1 -1
- package/src/packlets/identity/identity.test.ts +4 -4
- package/src/packlets/identity/identity.ts +7 -7
- package/src/packlets/invitations/invitations-manager.ts +1 -1
- package/src/packlets/services/feed-syncer.test.ts +1 -1
- package/src/packlets/services/feed-syncer.ts +2 -2
- package/src/packlets/services/service-context.ts +3 -3
- package/src/packlets/services/service-host.ts +1 -1
- package/src/packlets/services/sqlite-storage.ts +18 -8
- package/src/packlets/space-export/serialized-space-writer.ts +1 -1
- package/src/packlets/space-export/space-archive.test.ts +8 -8
- package/src/packlets/spaces/data-space-manager.test.ts +1 -1
- package/src/packlets/spaces/data-space-manager.ts +2 -2
- package/src/packlets/spaces/data-space.ts +8 -8
- package/src/packlets/spaces/edge-feed-replicator.ts +1 -1
- package/src/packlets/spaces/genesis.ts +20 -20
- package/src/packlets/spaces/spaces-service.ts +3 -3
- package/src/packlets/storage/profile-archive-sqlite.test.ts +1 -1
- package/src/packlets/testing/credential-utils.ts +2 -2
- package/src/version.ts +5 -1
- package/dist/lib/browser/chunk-7KG6VMEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KG56NFCZ.mjs.map +0 -7
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ServiceContext,
|
|
8
8
|
SpaceInvitationProtocol,
|
|
9
9
|
SqliteStorage
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-XU5R2BMF.mjs";
|
|
11
11
|
import "../chunk-XJRPB3GA.mjs";
|
|
12
12
|
import "../chunk-QCWEHHJW.mjs";
|
|
13
13
|
|
|
@@ -20,9 +20,9 @@ var createMockCredential = async ({ signer, issuer }) => createCredential({
|
|
|
20
20
|
subject: new PublicKey(Buffer.from("test")),
|
|
21
21
|
assertion: {
|
|
22
22
|
"@type": "example.testing.rpc.MessageWithAny",
|
|
23
|
-
payload: {
|
|
23
|
+
"payload": {
|
|
24
24
|
"@type": "google.protobuf.Any",
|
|
25
|
-
value: Buffer.from("test")
|
|
25
|
+
"value": Buffer.from("test")
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
});
|
|
@@ -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 { type AuthenticatingInvitation, type CancellableInvitation, InvitationEncoder } from '@dxos/client-protocol';\nimport { Context } from '@dxos/context';\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 PerformInvitationProps = {\n host: ServiceContext | InvitationHost;\n guest: ServiceContext | InvitationGuest;\n guestDeviceProfile?: DeviceProfileDocument;\n options?: Partial<Invitation>;\n hooks?: {\n host?: PerformInvitationCallbacks<CancellableInvitation>;\n guest?: PerformInvitationCallbacks<AuthenticatingInvitation>;\n };\n codeInputDelay?: number;\n};\n\nexport type Result = { invitation?: Invitation; error?: Error };\n\n// TODO(burdon): Make async.\n// TODO(burdon): Rename startInvitation.\n/**\n *\n */\nexport const performInvitation = ({\n host,\n guest,\n guestDeviceProfile,\n options,\n hooks,\n codeInputDelay,\n}: PerformInvitationProps): [Promise<Result>, Promise<Result>] => {\n let guestError = false;\n let guestConnected = false;\n let wereConnected = false;\n const hostComplete = new Trigger<Result>();\n const guestComplete = new Trigger<Result>();\n const authCode = new Trigger<string>();\n\n void createInvitation(host, options).then((hostObservable) => {\n hostObservable.subscribe(\n async (hostInvitation: Invitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (guestConnected) {\n if (wereConnected) {\n hostComplete.wake({ invitation: hostInvitation });\n }\n break;\n }\n\n guestConnected = true;\n if (hooks?.host?.onConnecting?.(hostObservable)) {\n break;\n }\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 const code = await authCode.wait();\n if (codeInputDelay == null) {\n await guestObservable.authenticate(code);\n } else {\n setTimeout(async () => {\n if (!guestError) {\n await guestObservable.authenticate(code);\n }\n }, codeInputDelay);\n }\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 guestError = true;\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 wereConnected = true;\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\n return [hostComplete.wait(), guestComplete.wait()];\n};\n\nexport const createInvitation = async (\n host: ServiceContext | InvitationHost,\n options?: Partial<Invitation>,\n): Promise<CancellableInvitation> => {\n options ??= {\n authMethod: Invitation.AuthMethod.NONE,\n ...(options ?? {}),\n };\n\n if (host instanceof ServiceContext) {\n return host.invitationsManager.createInvitation(new Context(), {\n kind: Invitation.Kind.SPACE,\n ...options,\n });\n }\n\n return host.share(options);\n};\n\nexport const acceptInvitation = (\n guest: ServiceContext | InvitationGuest,\n invitation: Invitation,\n guestDeviceProfile?: DeviceProfileDocument,\n): AuthenticatingInvitation => {\n invitation = sanitizeInvitation(invitation);\n\n if (guest instanceof ServiceContext) {\n return guest.invitationsManager.acceptInvitation(new Context(), {\n invitation,\n deviceProfile: guestDeviceProfile,\n });\n }\n\n return guest.join(invitation, guestDeviceProfile);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Reactivity from '@effect/experimental/Reactivity';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator, createCredentialSignerWithChain } from '@dxos/credentials';\nimport { failUndefined } from '@dxos/debug';\nimport { EchoHost, MeshEchoReplicator, SpaceManager, valueEncoding } from '@dxos/echo-host';\nimport { SqliteMetadataStore } from '@dxos/echo-host';\nimport { RuntimeProvider } from '@dxos/effect';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { SqliteKeyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext, type SignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, SwarmNetworkManager } from '@dxos/network-manager';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { StorageType } from '@dxos/random-access-storage';\nimport { layerMemory as sqliteLayerMemory } from '@dxos/sql-sqlite/platform';\nimport * as SqlTransaction from '@dxos/sql-sqlite/SqlTransaction';\nimport { SqliteBlobStore } from '@dxos/teleport-extension-object-sync';\n\nimport { InvitationsHandler, InvitationsManager, SpaceInvitationProtocol } from '../invitations';\nimport { ClientServicesHost, ServiceContext, type ServiceContextRuntimeProps } from '../services';\nimport { SqliteStorage } from '../services/sqlite-storage';\nimport { DataSpaceManager, type DataSpaceManagerRuntimeProps, 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 runtime: ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n ).runtimeEffect,\n });\n};\n\nexport const createServiceContext = async ({\n signalManagerFactory = async () => {\n const signalContext = new MemorySignalManagerContext();\n return new MemorySignalManager(signalContext);\n },\n runtimeProps,\n}: {\n signalManagerFactory?: () => Promise<SignalManager>;\n runtimeProps?: ServiceContextRuntimeProps;\n} = {}) => {\n const signalManager = await signalManagerFactory();\n const networkManager = new SwarmNetworkManager({\n signalManager,\n transportFactory: MemoryTransportFactory,\n });\n\n const runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n ).runtimeEffect;\n\n return new ServiceContext(networkManager, signalManager, undefined, undefined, runtime, {\n invitationConnectionDefaultProps: { teleport: { controlHeartbeatInterval: 200 } },\n ...runtimeProps,\n });\n};\n\nexport const createPeers = async (numPeers: number, signalManagerFactory?: () => Promise<SignalManager>) => {\n if (!signalManagerFactory) {\n const signalContext = new MemorySignalManagerContext();\n signalManagerFactory = async () => new MemorySignalManager(signalContext);\n }\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = await createServiceContext({ signalManagerFactory });\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\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(): Promise<void> {\n await this._ctx.dispose();\n }\n}\n\nexport type TestPeerOpts = {\n dataStore?: StorageType;\n dataSpaceProps?: DataSpaceManagerRuntimeProps;\n};\n\nexport type TestPeerProps = {\n feedStore?: FeedStore<any>;\n metadataStore?: SqliteMetadataStore;\n keyring?: SqliteKeyring;\n networkManager?: SwarmNetworkManager;\n spaceManager?: SpaceManager;\n dataSpaceManager?: DataSpaceManager;\n signingContext?: SigningContext;\n blobStore?: SqliteBlobStore;\n echoHost?: EchoHost;\n meshEchoReplicator?: MeshEchoReplicator;\n invitationsManager?: InvitationsManager;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n private readonly _runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n );\n private readonly _feedStorage = new SqliteStorage({ runtime: this._runtime.runtimeEffect });\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 keyring() {\n return (this._props.keyring ??= new SqliteKeyring({ runtime: this._runtime.runtimeEffect }));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this._feedStorage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding,\n },\n }),\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new SqliteMetadataStore({ runtime: this._runtime.runtimeEffect }));\n }\n\n get blobStore() {\n return (this._props.blobStore ??= new SqliteBlobStore({ runtime: this._runtime.runtimeEffect }));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new SwarmNetworkManager({\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 blobStore: this.blobStore,\n }));\n }\n\n get identity() {\n return this._props.signingContext ?? failUndefined();\n }\n\n get echoHost() {\n return (this._props.echoHost ??= new EchoHost({\n runtime: this._runtime.runtimeEffect,\n }));\n }\n\n get meshEchoReplicator() {\n return (this._props.meshEchoReplicator ??= new MeshEchoReplicator());\n }\n\n get dataSpaceManager(): DataSpaceManager {\n return (this._props.dataSpaceManager ??= new DataSpaceManager({\n spaceManager: this.spaceManager,\n metadataStore: this.metadataStore,\n keyring: this.keyring,\n signingContext: this.identity,\n feedStore: this.feedStore,\n echoHost: this.echoHost,\n invitationsManager: this.invitationsManager,\n edgeConnection: undefined,\n meshReplicator: this.meshEchoReplicator,\n echoEdgeReplicator: undefined,\n runtimeProps: this._opts.dataSpaceProps,\n }));\n }\n\n get invitationsManager() {\n return (this._props.invitationsManager ??= new InvitationsManager(\n new InvitationsHandler(this.networkManager),\n (invitation) => {\n if (invitation.kind === Invitation.Kind.SPACE) {\n return new SpaceInvitationProtocol(this.dataSpaceManager, this.identity!, this.keyring, invitation.spaceKey!);\n } else {\n throw new Error('not implemented');\n }\n },\n this.metadataStore,\n ));\n }\n\n async createIdentity(): Promise<void> {\n await this.migrate();\n this._props.signingContext ??= await createSigningContext(this.keyring);\n this.networkManager.setPeerInfo({\n identityKey: this._props.signingContext.identityKey.toHex(),\n peerKey: this._props.signingContext.deviceKey.toHex(),\n });\n }\n\n async migrate(): Promise<void> {\n await RuntimeProvider.runPromise(this._runtime.runtimeEffect)(\n Effect.all([this.metadataStore.migrate, this.blobStore.migrate, this.keyring.migrate, this._feedStorage.migrate]),\n );\n }\n\n async destroy(): Promise<void> {\n await this._runtime.dispose();\n }\n}\n\nexport const createSigningContext = async (keyring: SqliteKeyring): 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,MAKNJ,iBAAiB;EACfG;EACAC;EACAC,SAAS,IAAIJ,UAAUK,OAAOC,KAAK,MAAA,CAAA;EACnCC,WAAW;IACT,SAAS;
|
|
6
|
-
"names": ["createCredential", "PublicKey", "createMockCredential", "signer", "issuer", "subject", "Buffer", "from", "assertion", "
|
|
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 { type AuthenticatingInvitation, type CancellableInvitation, InvitationEncoder } from '@dxos/client-protocol';\nimport { Context } from '@dxos/context';\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 PerformInvitationProps = {\n host: ServiceContext | InvitationHost;\n guest: ServiceContext | InvitationGuest;\n guestDeviceProfile?: DeviceProfileDocument;\n options?: Partial<Invitation>;\n hooks?: {\n host?: PerformInvitationCallbacks<CancellableInvitation>;\n guest?: PerformInvitationCallbacks<AuthenticatingInvitation>;\n };\n codeInputDelay?: number;\n};\n\nexport type Result = { invitation?: Invitation; error?: Error };\n\n// TODO(burdon): Make async.\n// TODO(burdon): Rename startInvitation.\n/**\n *\n */\nexport const performInvitation = ({\n host,\n guest,\n guestDeviceProfile,\n options,\n hooks,\n codeInputDelay,\n}: PerformInvitationProps): [Promise<Result>, Promise<Result>] => {\n let guestError = false;\n let guestConnected = false;\n let wereConnected = false;\n const hostComplete = new Trigger<Result>();\n const guestComplete = new Trigger<Result>();\n const authCode = new Trigger<string>();\n\n void createInvitation(host, options).then((hostObservable) => {\n hostObservable.subscribe(\n async (hostInvitation: Invitation) => {\n switch (hostInvitation.state) {\n case Invitation.State.CONNECTING: {\n if (guestConnected) {\n if (wereConnected) {\n hostComplete.wake({ invitation: hostInvitation });\n }\n break;\n }\n\n guestConnected = true;\n if (hooks?.host?.onConnecting?.(hostObservable)) {\n break;\n }\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 const code = await authCode.wait();\n if (codeInputDelay == null) {\n await guestObservable.authenticate(code);\n } else {\n setTimeout(async () => {\n if (!guestError) {\n await guestObservable.authenticate(code);\n }\n }, codeInputDelay);\n }\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 guestError = true;\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 wereConnected = true;\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\n return [hostComplete.wait(), guestComplete.wait()];\n};\n\nexport const createInvitation = async (\n host: ServiceContext | InvitationHost,\n options?: Partial<Invitation>,\n): Promise<CancellableInvitation> => {\n options ??= {\n authMethod: Invitation.AuthMethod.NONE,\n ...(options ?? {}),\n };\n\n if (host instanceof ServiceContext) {\n return host.invitationsManager.createInvitation(new Context(), {\n kind: Invitation.Kind.SPACE,\n ...options,\n });\n }\n\n return host.share(options);\n};\n\nexport const acceptInvitation = (\n guest: ServiceContext | InvitationGuest,\n invitation: Invitation,\n guestDeviceProfile?: DeviceProfileDocument,\n): AuthenticatingInvitation => {\n invitation = sanitizeInvitation(invitation);\n\n if (guest instanceof ServiceContext) {\n return guest.invitationsManager.acceptInvitation(new Context(), {\n invitation,\n deviceProfile: guestDeviceProfile,\n });\n }\n\n return guest.join(invitation, guestDeviceProfile);\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport * as Reactivity from '@effect/experimental/Reactivity';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { type Config } from '@dxos/config';\nimport { Context } from '@dxos/context';\nimport { CredentialGenerator, createCredentialSignerWithChain } from '@dxos/credentials';\nimport { failUndefined } from '@dxos/debug';\nimport { EchoHost, MeshEchoReplicator, SpaceManager, valueEncoding } from '@dxos/echo-host';\nimport { SqliteMetadataStore } from '@dxos/echo-host';\nimport { RuntimeProvider } from '@dxos/effect';\nimport { FeedFactory, FeedStore } from '@dxos/feed-store';\nimport { SqliteKeyring } from '@dxos/keyring';\nimport { MemorySignalManager, MemorySignalManagerContext, type SignalManager } from '@dxos/messaging';\nimport { MemoryTransportFactory, SwarmNetworkManager } from '@dxos/network-manager';\nimport { Invitation } from '@dxos/protocols/proto/dxos/client/services';\nimport { StorageType } from '@dxos/random-access-storage';\nimport { layerMemory as sqliteLayerMemory } from '@dxos/sql-sqlite/platform';\nimport * as SqlTransaction from '@dxos/sql-sqlite/SqlTransaction';\nimport { SqliteBlobStore } from '@dxos/teleport-extension-object-sync';\n\nimport { InvitationsHandler, InvitationsManager, SpaceInvitationProtocol } from '../invitations';\nimport { ClientServicesHost, ServiceContext, type ServiceContextRuntimeProps } from '../services';\nimport { SqliteStorage } from '../services/sqlite-storage';\nimport { DataSpaceManager, type DataSpaceManagerRuntimeProps, 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 runtime: ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n ).runtimeEffect,\n });\n};\n\nexport const createServiceContext = async ({\n signalManagerFactory = async () => {\n const signalContext = new MemorySignalManagerContext();\n return new MemorySignalManager(signalContext);\n },\n runtimeProps,\n}: {\n signalManagerFactory?: () => Promise<SignalManager>;\n runtimeProps?: ServiceContextRuntimeProps;\n} = {}) => {\n const signalManager = await signalManagerFactory();\n const networkManager = new SwarmNetworkManager({\n signalManager,\n transportFactory: MemoryTransportFactory,\n });\n\n const runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n ).runtimeEffect;\n\n return new ServiceContext(networkManager, signalManager, undefined, undefined, runtime, {\n invitationConnectionDefaultProps: { teleport: { controlHeartbeatInterval: 200 } },\n ...runtimeProps,\n });\n};\n\nexport const createPeers = async (numPeers: number, signalManagerFactory?: () => Promise<SignalManager>) => {\n if (!signalManagerFactory) {\n const signalContext = new MemorySignalManagerContext();\n signalManagerFactory = async () => new MemorySignalManager(signalContext);\n }\n return await Promise.all(\n Array.from(Array(numPeers)).map(async () => {\n const peer = await createServiceContext({ signalManagerFactory });\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\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(): Promise<void> {\n await this._ctx.dispose();\n }\n}\n\nexport type TestPeerOpts = {\n dataStore?: StorageType;\n dataSpaceProps?: DataSpaceManagerRuntimeProps;\n};\n\nexport type TestPeerProps = {\n feedStore?: FeedStore<any>;\n metadataStore?: SqliteMetadataStore;\n keyring?: SqliteKeyring;\n networkManager?: SwarmNetworkManager;\n spaceManager?: SpaceManager;\n dataSpaceManager?: DataSpaceManager;\n signingContext?: SigningContext;\n blobStore?: SqliteBlobStore;\n echoHost?: EchoHost;\n meshEchoReplicator?: MeshEchoReplicator;\n invitationsManager?: InvitationsManager;\n};\n\nexport class TestPeer {\n private _props: TestPeerProps = {};\n private readonly _runtime = ManagedRuntime.make(\n SqlTransaction.layer\n .pipe(Layer.provideMerge(sqliteLayerMemory), Layer.provideMerge(Reactivity.layer))\n .pipe(Layer.orDie),\n );\n private readonly _feedStorage = new SqliteStorage({ runtime: this._runtime.runtimeEffect });\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 keyring() {\n return (this._props.keyring ??= new SqliteKeyring({ runtime: this._runtime.runtimeEffect }));\n }\n\n get feedStore() {\n return (this._props.feedStore ??= new FeedStore({\n factory: new FeedFactory({\n root: this._feedStorage.createDirectory('feeds'),\n signer: this.keyring,\n hypercore: {\n valueEncoding,\n },\n }),\n }));\n }\n\n get metadataStore() {\n return (this._props.metadataStore ??= new SqliteMetadataStore({ runtime: this._runtime.runtimeEffect }));\n }\n\n get blobStore() {\n return (this._props.blobStore ??= new SqliteBlobStore({ runtime: this._runtime.runtimeEffect }));\n }\n\n get networkManager() {\n return (this._props.networkManager ??= new SwarmNetworkManager({\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 blobStore: this.blobStore,\n }));\n }\n\n get identity() {\n return this._props.signingContext ?? failUndefined();\n }\n\n get echoHost() {\n return (this._props.echoHost ??= new EchoHost({\n runtime: this._runtime.runtimeEffect,\n }));\n }\n\n get meshEchoReplicator() {\n return (this._props.meshEchoReplicator ??= new MeshEchoReplicator());\n }\n\n get dataSpaceManager(): DataSpaceManager {\n return (this._props.dataSpaceManager ??= new DataSpaceManager({\n spaceManager: this.spaceManager,\n metadataStore: this.metadataStore,\n keyring: this.keyring,\n signingContext: this.identity,\n feedStore: this.feedStore,\n echoHost: this.echoHost,\n invitationsManager: this.invitationsManager,\n edgeConnection: undefined,\n meshReplicator: this.meshEchoReplicator,\n echoEdgeReplicator: undefined,\n runtimeProps: this._opts.dataSpaceProps,\n }));\n }\n\n get invitationsManager() {\n return (this._props.invitationsManager ??= new InvitationsManager(\n new InvitationsHandler(this.networkManager),\n (invitation) => {\n if (invitation.kind === Invitation.Kind.SPACE) {\n return new SpaceInvitationProtocol(this.dataSpaceManager, this.identity!, this.keyring, invitation.spaceKey!);\n } else {\n throw new Error('not implemented');\n }\n },\n this.metadataStore,\n ));\n }\n\n async createIdentity(): Promise<void> {\n await this.migrate();\n this._props.signingContext ??= await createSigningContext(this.keyring);\n this.networkManager.setPeerInfo({\n identityKey: this._props.signingContext.identityKey.toHex(),\n peerKey: this._props.signingContext.deviceKey.toHex(),\n });\n }\n\n async migrate(): Promise<void> {\n await RuntimeProvider.runPromise(this._runtime.runtimeEffect)(\n Effect.all([this.metadataStore.migrate, this.blobStore.migrate, this.keyring.migrate, this._feedStorage.migrate]),\n );\n }\n\n async destroy(): Promise<void> {\n await this._runtime.dispose();\n }\n}\n\nexport const createSigningContext = async (keyring: SqliteKeyring): 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", "subject", "Buffer", "from", "assertion", "Trigger", "InvitationEncoder", "Context", "invariant", "Invitation", "guestConnected", "wereConnected", "guestComplete", "authCode", "Trigger", "createInvitation", "host", "options", "hostObservable", "subscribe", "hostInvitation", "Invitation", "State", "CONNECTING", "hostComplete", "invitation", "guestObservable", "guestInvitation", "hooks", "guest", "invariant", "onConnected", "authenticate", "setTimeout", "codeInputDelay", "onAuthenticating", "error", "guestError", "authMethod", "AuthMethod", "NONE", "acceptInvitation", "ServiceContext", "invitationsManager", "deviceProfile", "guestDeviceProfile", "Reactivity", "Effect", "Layer", "ManagedRuntime", "Context", "CredentialGenerator", "createCredentialSignerWithChain", "failUndefined", "EchoHost", "MeshEchoReplicator", "SpaceManager", "valueEncoding", "SqliteMetadataStore", "RuntimeProvider", "FeedFactory", "FeedStore", "SqliteKeyring", "MemorySignalManager", "MemorySignalManagerContext", "MemoryTransportFactory", "SwarmNetworkManager", "Invitation", "StorageType", "layerMemory", "sqliteLayerMemory", "SqlTransaction", "SqliteBlobStore", "__dxlog_file", "config", "signalManager", "MemorySignalManager", "transportFactory", "runtime", "ManagedRuntime", "SqlTransaction", "Layer", "signalContext", "runtimeProps", "signalManagerFactory", "networkManager", "MemoryTransportFactory", "invitationConnectionDefaultProps", "teleport", "MemorySignalManagerContext", "Array", "Context", "peer", "_ctx", "createPeer", "peerOptions", "TestPeer", "destroy", "_props", "_runtime", "_feedStorage", "_signalContext", "props", "keyring", "feedStore", "factory", "root", "createDirectory", "signer", "hypercore", "valueEncoding", "metadataStore", "blobStore", "spaceManager", "identity", "echoHost", "meshEchoReplicator", "dataSpaceManager", "signingContext", "invitationsManager", "edgeConnection", "meshReplicator", "echoEdgeReplicator", "_opts", "kind", "SpaceInvitationProtocol", "spaceKey", "Invitation", "Error", "createIdentity", "identityKey", "toHex", "peerKey", "migrate", "deviceKey", "createKey", "credentialSigner", "recordCredential", "getProfile"]
|
|
7
7
|
}
|
|
@@ -414,7 +414,7 @@ import { SpaceMember } from "@dxos/protocols/proto/dxos/client/services";
|
|
|
414
414
|
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
415
415
|
|
|
416
416
|
// src/version.ts
|
|
417
|
-
var DXOS_VERSION = "0.
|
|
417
|
+
var DXOS_VERSION = "0.10.0";
|
|
418
418
|
|
|
419
419
|
// src/packlets/services/platform.ts
|
|
420
420
|
import { Platform } from "@dxos/protocols/proto/dxos/client/services";
|
|
@@ -908,7 +908,7 @@ var EdgeFeedReplicator = class extends Resource {
|
|
|
908
908
|
}, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 202, S: this });
|
|
909
909
|
await this._messenger.send(ctx, buf.create(RouterMessageSchema, {
|
|
910
910
|
source: {
|
|
911
|
-
|
|
911
|
+
identityDid: this._messenger.identityDid,
|
|
912
912
|
peerKey: this._messenger.peerKey
|
|
913
913
|
},
|
|
914
914
|
serviceId: `${EdgeService.FEED_REPLICATOR}:${this._spaceId}`,
|
|
@@ -1153,9 +1153,9 @@ var spaceGenesis = async (keyring, signingContext, space, automergeRoot, tags, m
|
|
|
1153
1153
|
subject: space.key,
|
|
1154
1154
|
assertion: {
|
|
1155
1155
|
"@type": "dxos.halo.credentials.SpaceGenesis",
|
|
1156
|
-
spaceKey: space.key,
|
|
1157
|
-
tags: tags ?? [],
|
|
1158
|
-
membershipPolicy: membershipPolicy ?? MembershipPolicy.INVITE
|
|
1156
|
+
"spaceKey": space.key,
|
|
1157
|
+
"tags": tags ?? [],
|
|
1158
|
+
"membershipPolicy": membershipPolicy ?? MembershipPolicy.INVITE
|
|
1159
1159
|
}
|
|
1160
1160
|
}),
|
|
1161
1161
|
await createCredential({
|
|
@@ -1164,41 +1164,41 @@ var spaceGenesis = async (keyring, signingContext, space, automergeRoot, tags, m
|
|
|
1164
1164
|
subject: signingContext.identityKey,
|
|
1165
1165
|
assertion: {
|
|
1166
1166
|
"@type": "dxos.halo.credentials.SpaceMember",
|
|
1167
|
-
spaceKey: space.key,
|
|
1168
|
-
role: SpaceMember2.Role.OWNER,
|
|
1169
|
-
profile: signingContext.getProfile(),
|
|
1170
|
-
genesisFeedKey: space.controlFeedKey ?? failUndefined(),
|
|
1171
|
-
tags: tags ?? []
|
|
1167
|
+
"spaceKey": space.key,
|
|
1168
|
+
"role": SpaceMember2.Role.OWNER,
|
|
1169
|
+
"profile": signingContext.getProfile(),
|
|
1170
|
+
"genesisFeedKey": space.controlFeedKey ?? failUndefined(),
|
|
1171
|
+
"tags": tags ?? []
|
|
1172
1172
|
}
|
|
1173
1173
|
}),
|
|
1174
1174
|
await signingContext.credentialSigner.createCredential({
|
|
1175
1175
|
subject: space.controlFeedKey ?? failUndefined(),
|
|
1176
1176
|
assertion: {
|
|
1177
1177
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
1178
|
-
spaceKey: space.key,
|
|
1179
|
-
identityKey: signingContext.identityKey,
|
|
1180
|
-
deviceKey: signingContext.deviceKey,
|
|
1181
|
-
designation: AdmittedFeed.Designation.CONTROL
|
|
1178
|
+
"spaceKey": space.key,
|
|
1179
|
+
"identityKey": signingContext.identityKey,
|
|
1180
|
+
"deviceKey": signingContext.deviceKey,
|
|
1181
|
+
"designation": AdmittedFeed.Designation.CONTROL
|
|
1182
1182
|
}
|
|
1183
1183
|
}),
|
|
1184
1184
|
await signingContext.credentialSigner.createCredential({
|
|
1185
1185
|
subject: space.dataFeedKey ?? failUndefined(),
|
|
1186
1186
|
assertion: {
|
|
1187
1187
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
1188
|
-
spaceKey: space.key,
|
|
1189
|
-
identityKey: signingContext.identityKey,
|
|
1190
|
-
deviceKey: signingContext.deviceKey,
|
|
1191
|
-
designation: AdmittedFeed.Designation.DATA
|
|
1188
|
+
"spaceKey": space.key,
|
|
1189
|
+
"identityKey": signingContext.identityKey,
|
|
1190
|
+
"deviceKey": signingContext.deviceKey,
|
|
1191
|
+
"designation": AdmittedFeed.Designation.DATA
|
|
1192
1192
|
}
|
|
1193
1193
|
}),
|
|
1194
1194
|
await signingContext.credentialSigner.createCredential({
|
|
1195
1195
|
subject: space.key ?? failUndefined(),
|
|
1196
1196
|
assertion: {
|
|
1197
1197
|
"@type": "dxos.halo.credentials.Epoch",
|
|
1198
|
-
number: 0,
|
|
1199
|
-
previousId: void 0,
|
|
1200
|
-
timeframe: new Timeframe(),
|
|
1201
|
-
snapshotCid: void 0,
|
|
1198
|
+
"number": 0,
|
|
1199
|
+
"previousId": void 0,
|
|
1200
|
+
"timeframe": new Timeframe(),
|
|
1201
|
+
"snapshotCid": void 0,
|
|
1202
1202
|
automergeRoot
|
|
1203
1203
|
}
|
|
1204
1204
|
})
|
|
@@ -1458,7 +1458,7 @@ var DataSpaceManager = class extends Resource2 {
|
|
|
1458
1458
|
assertion: {
|
|
1459
1459
|
"@type": "dxos.halo.credentials.SpaceDeleted",
|
|
1460
1460
|
spaceKey,
|
|
1461
|
-
deletedAt: /* @__PURE__ */ new Date()
|
|
1461
|
+
"deletedAt": /* @__PURE__ */ new Date()
|
|
1462
1462
|
}
|
|
1463
1463
|
});
|
|
1464
1464
|
await this._signingContext.recordCredential(credential);
|
|
@@ -2933,7 +2933,7 @@ var Identity = class {
|
|
|
2933
2933
|
subject: deviceKey,
|
|
2934
2934
|
assertion: {
|
|
2935
2935
|
"@type": "dxos.halo.credentials.AuthorizedDevice",
|
|
2936
|
-
identityKey: this.identityKey,
|
|
2936
|
+
"identityKey": this.identityKey,
|
|
2937
2937
|
deviceKey
|
|
2938
2938
|
}
|
|
2939
2939
|
});
|
|
@@ -2943,20 +2943,20 @@ var Identity = class {
|
|
|
2943
2943
|
subject: controlFeedKey,
|
|
2944
2944
|
assertion: {
|
|
2945
2945
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
2946
|
-
spaceKey: this.haloSpaceKey,
|
|
2946
|
+
"spaceKey": this.haloSpaceKey,
|
|
2947
2947
|
deviceKey,
|
|
2948
|
-
identityKey: this.identityKey,
|
|
2949
|
-
designation: AdmittedFeed2.Designation.CONTROL
|
|
2948
|
+
"identityKey": this.identityKey,
|
|
2949
|
+
"designation": AdmittedFeed2.Designation.CONTROL
|
|
2950
2950
|
}
|
|
2951
2951
|
}),
|
|
2952
2952
|
await signer.createCredential({
|
|
2953
2953
|
subject: dataFeedKey,
|
|
2954
2954
|
assertion: {
|
|
2955
2955
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
2956
|
-
spaceKey: this.haloSpaceKey,
|
|
2956
|
+
"spaceKey": this.haloSpaceKey,
|
|
2957
2957
|
deviceKey,
|
|
2958
|
-
identityKey: this.identityKey,
|
|
2959
|
-
designation: AdmittedFeed2.Designation.DATA
|
|
2958
|
+
"identityKey": this.identityKey,
|
|
2959
|
+
"designation": AdmittedFeed2.Designation.DATA
|
|
2960
2960
|
}
|
|
2961
2961
|
})
|
|
2962
2962
|
].map((credential) => ({
|
|
@@ -4206,10 +4206,10 @@ var DataSpace = class {
|
|
|
4206
4206
|
subject: controlFeed.key,
|
|
4207
4207
|
assertion: {
|
|
4208
4208
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
4209
|
-
spaceKey: this.key,
|
|
4210
|
-
deviceKey: this._signingContext.deviceKey,
|
|
4211
|
-
identityKey: this._signingContext.identityKey,
|
|
4212
|
-
designation: AdmittedFeed4.Designation.CONTROL
|
|
4209
|
+
"spaceKey": this.key,
|
|
4210
|
+
"deviceKey": this._signingContext.deviceKey,
|
|
4211
|
+
"identityKey": this._signingContext.identityKey,
|
|
4212
|
+
"designation": AdmittedFeed4.Designation.CONTROL
|
|
4213
4213
|
}
|
|
4214
4214
|
}));
|
|
4215
4215
|
}
|
|
@@ -4223,10 +4223,10 @@ var DataSpace = class {
|
|
|
4223
4223
|
subject: dataFeed.key,
|
|
4224
4224
|
assertion: {
|
|
4225
4225
|
"@type": "dxos.halo.credentials.AdmittedFeed",
|
|
4226
|
-
spaceKey: this.key,
|
|
4227
|
-
deviceKey: this._signingContext.deviceKey,
|
|
4228
|
-
identityKey: this._signingContext.identityKey,
|
|
4229
|
-
designation: AdmittedFeed4.Designation.DATA
|
|
4226
|
+
"spaceKey": this.key,
|
|
4227
|
+
"deviceKey": this._signingContext.deviceKey,
|
|
4228
|
+
"identityKey": this._signingContext.identityKey,
|
|
4229
|
+
"designation": AdmittedFeed4.Designation.DATA
|
|
4230
4230
|
}
|
|
4231
4231
|
}));
|
|
4232
4232
|
}
|
|
@@ -5980,7 +5980,7 @@ var SpaceInvitationProtocol = class {
|
|
|
5980
5980
|
|
|
5981
5981
|
// src/packlets/invitations/invitations-manager.ts
|
|
5982
5982
|
import { Event as Event8, PushStream, TimeoutError as TimeoutError3, Trigger as Trigger5 } from "@dxos/async";
|
|
5983
|
-
import {
|
|
5983
|
+
import { AuthenticatingInvitation, AUTHENTICATION_CODE_LENGTH, CancellableInvitation, INVITATION_TIMEOUT as INVITATION_TIMEOUT2 } from "@dxos/client-protocol";
|
|
5984
5984
|
import { generatePasscode } from "@dxos/credentials";
|
|
5985
5985
|
import { hasInvitationExpired } from "@dxos/echo-host";
|
|
5986
5986
|
import { invariant as invariant20 } from "@dxos/invariant";
|
|
@@ -6464,7 +6464,7 @@ var FeedSyncer = class extends Resource7 {
|
|
|
6464
6464
|
this.#edgeClient.onReconnected(async () => {
|
|
6465
6465
|
log20("feed sync edge reconnected", {
|
|
6466
6466
|
peerKey: this.#edgeClient.peerKey,
|
|
6467
|
-
|
|
6467
|
+
identityDid: this.#edgeClient.identityDid
|
|
6468
6468
|
}, { "~LogMeta": "~LogMeta", F: __dxlog_file25, L: 174, S: this });
|
|
6469
6469
|
if (this.#backgroundSync) {
|
|
6470
6470
|
this.#resetSpacesToPoll();
|
|
@@ -6646,7 +6646,7 @@ var FeedSyncer = class extends Resource7 {
|
|
|
6646
6646
|
}, { "~LogMeta": "~LogMeta", F: __dxlog_file25, L: 346, S: this });
|
|
6647
6647
|
yield* Effect.tryPromise(async () => this.#edgeClient.send(ctx, createBuf(MessageSchema, {
|
|
6648
6648
|
source: {
|
|
6649
|
-
|
|
6649
|
+
identityDid: this.#edgeClient.identityDid,
|
|
6650
6650
|
peerKey: this.#edgeClient.peerKey
|
|
6651
6651
|
},
|
|
6652
6652
|
serviceId,
|
|
@@ -6789,7 +6789,7 @@ var EdgeAgentManager = class extends Resource8 {
|
|
|
6789
6789
|
invariant22(this._edgeHttpClient, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file26, L: 42, S: this, A: ["this._edgeHttpClient", ""] });
|
|
6790
6790
|
invariant22(this._edgeFeatures?.agents, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file26, L: 43, S: this, A: ["this._edgeFeatures?.agents", ""] });
|
|
6791
6791
|
const response = await this._edgeHttpClient.createAgent(ctx, {
|
|
6792
|
-
|
|
6792
|
+
identityDid: this._identity.did,
|
|
6793
6793
|
haloSpaceId: this._identity.haloSpaceId,
|
|
6794
6794
|
haloSpaceKey: this._identity.haloSpaceKey.toHex()
|
|
6795
6795
|
});
|
|
@@ -6846,7 +6846,7 @@ var EdgeAgentManager = class extends Resource8 {
|
|
|
6846
6846
|
try {
|
|
6847
6847
|
log21("fetching agent status", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file26, L: 100, S: this });
|
|
6848
6848
|
const { agent } = await this._edgeHttpClient.getAgentStatus(ctx, {
|
|
6849
|
-
|
|
6849
|
+
ownerIdentityDid: this._identity.did
|
|
6850
6850
|
});
|
|
6851
6851
|
const wasAgentCreatedDuringQuery = this._agentStatus === EdgeAgentStatus.ACTIVE;
|
|
6852
6852
|
if (!wasAgentCreatedDuringQuery) {
|
|
@@ -6992,7 +6992,7 @@ import { Mutex as Mutex5, Trigger as Trigger6 } from "@dxos/async";
|
|
|
6992
6992
|
import { Resource as Resource9 } from "@dxos/context";
|
|
6993
6993
|
import { getCredentialAssertion as getCredentialAssertion5 } from "@dxos/credentials";
|
|
6994
6994
|
import { failUndefined as failUndefined2, warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
6995
|
-
import { EchoEdgeReplicator, EchoEdgeSubductionReplicator, EchoHost, MeshEchoReplicator,
|
|
6995
|
+
import { EchoEdgeReplicator, EchoEdgeSubductionReplicator, EchoHost, MeshEchoReplicator, SpaceManager, SqliteMetadataStore, runSqliteHealthCheck, valueEncoding } from "@dxos/echo-host";
|
|
6996
6996
|
import { createChainEdgeIdentity, createEphemeralEdgeIdentity } from "@dxos/edge-client";
|
|
6997
6997
|
import { RuntimeProvider as RuntimeProvider3 } from "@dxos/effect";
|
|
6998
6998
|
import { FeedFactory, FeedStore } from "@dxos/feed-store";
|
|
@@ -7318,11 +7318,17 @@ var SqliteRandomAccessFile = class extends BaseEventEmitter {
|
|
|
7318
7318
|
}
|
|
7319
7319
|
async _loadFromDb() {
|
|
7320
7320
|
const filePath = this.filePath;
|
|
7321
|
-
|
|
7322
|
-
const
|
|
7323
|
-
|
|
7324
|
-
|
|
7325
|
-
|
|
7321
|
+
try {
|
|
7322
|
+
const rows = await RuntimeProvider2.runPromise(this.runtime)(Effect2.gen(function* () {
|
|
7323
|
+
const sql = yield* SqlClient.SqlClient;
|
|
7324
|
+
return yield* sql`SELECT data FROM hypercore_files WHERE path = ${filePath}`;
|
|
7325
|
+
}));
|
|
7326
|
+
this.#buffer = rows.length > 0 ? Buffer.from(rows[0].data) : Buffer.alloc(0);
|
|
7327
|
+
} catch (err) {
|
|
7328
|
+
if (!this.#closed) {
|
|
7329
|
+
throw err;
|
|
7330
|
+
}
|
|
7331
|
+
}
|
|
7326
7332
|
this.#loaded = true;
|
|
7327
7333
|
}
|
|
7328
7334
|
async _saveToDb() {
|
|
@@ -7409,7 +7415,7 @@ var SqliteStorage = class {
|
|
|
7409
7415
|
path TEXT PRIMARY KEY,
|
|
7410
7416
|
data BLOB NOT NULL DEFAULT x''
|
|
7411
7417
|
)`;
|
|
7412
|
-
log23("hypercore_files table ready", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file29, L:
|
|
7418
|
+
log23("hypercore_files table ready", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file29, L: 251, S: this });
|
|
7413
7419
|
}).pipe(Effect2.withSpan("SqliteStorage.migrate")))();
|
|
7414
7420
|
get size() {
|
|
7415
7421
|
return this.#files.size;
|
|
@@ -7460,7 +7466,7 @@ var SqliteStorage = class {
|
|
|
7460
7466
|
});
|
|
7461
7467
|
}
|
|
7462
7468
|
async reset() {
|
|
7463
|
-
log23("SqliteStorage: clearing all hypercore files", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file29, L:
|
|
7469
|
+
log23("SqliteStorage: clearing all hypercore files", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file29, L: 303, S: this });
|
|
7464
7470
|
await RuntimeProvider2.runPromise(this.#runtime)(Effect2.gen(function* () {
|
|
7465
7471
|
const sql = yield* SqlClient.SqlClient;
|
|
7466
7472
|
yield* sql`DELETE FROM hypercore_files`;
|
|
@@ -7967,7 +7973,7 @@ var ServiceContext = class extends Resource9 {
|
|
|
7967
7973
|
this._edgeConnection?.setIdentity(edgeIdentity);
|
|
7968
7974
|
this._edgeHttpClient?.setIdentity(edgeIdentity);
|
|
7969
7975
|
this.networkManager.setPeerInfo({
|
|
7970
|
-
|
|
7976
|
+
identityDid: edgeIdentity.identityDid,
|
|
7971
7977
|
peerKey: edgeIdentity.peerKey
|
|
7972
7978
|
});
|
|
7973
7979
|
log24("_setNetworkIdentity: done", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file30, L: 527, S: this });
|
|
@@ -8628,7 +8634,7 @@ var ClientServicesHost = class {
|
|
|
8628
8634
|
transportFactory,
|
|
8629
8635
|
signalManager,
|
|
8630
8636
|
peerInfo: this._edgeConnection ? {
|
|
8631
|
-
|
|
8637
|
+
identityDid: this._edgeConnection.identityDid,
|
|
8632
8638
|
peerKey: this._edgeConnection.peerKey
|
|
8633
8639
|
} : void 0
|
|
8634
8640
|
});
|
|
@@ -8828,4 +8834,4 @@ export {
|
|
|
8828
8834
|
ServiceRegistry,
|
|
8829
8835
|
ClientServicesHost
|
|
8830
8836
|
};
|
|
8831
|
-
//# sourceMappingURL=chunk-
|
|
8837
|
+
//# sourceMappingURL=chunk-H5YTUD35.mjs.map
|