@dxos/plugin-client 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/neutral/{AccountContainer-LIMGLO2Y.mjs → AccountContainer-7SF53UON.mjs} +15 -11
- package/dist/lib/neutral/AccountContainer-7SF53UON.mjs.map +7 -0
- package/dist/lib/neutral/ClientPlugin.node.mjs +2 -2
- package/dist/lib/neutral/ClientPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/{DevicesContainer-X26OGLFK.mjs → DevicesContainer-PRWIN36N.mjs} +25 -16
- package/dist/lib/neutral/DevicesContainer-PRWIN36N.mjs.map +7 -0
- package/dist/lib/neutral/{InvitationsContainer-OBBCJ7CJ.mjs → InvitationsContainer-BI5RAWET.mjs} +42 -31
- package/dist/lib/neutral/InvitationsContainer-BI5RAWET.mjs.map +7 -0
- package/dist/lib/neutral/{ProfileContainer-FGS2MVWA.mjs → ProfileContainer-YEAYOTX5.mjs} +21 -20
- package/dist/lib/neutral/ProfileContainer-YEAYOTX5.mjs.map +7 -0
- package/dist/lib/neutral/{RecoveryCredentialsContainer-SL4LYHBE.mjs → RecoveryCredentialsContainer-6BZ2IWX7.mjs} +22 -13
- package/dist/lib/neutral/RecoveryCredentialsContainer-6BZ2IWX7.mjs.map +7 -0
- package/dist/lib/neutral/UsageContainer-2DWCVVE4.mjs +241 -0
- package/dist/lib/neutral/UsageContainer-2DWCVVE4.mjs.map +7 -0
- package/dist/lib/neutral/account-cache-YVQKLNV2.mjs +16 -0
- package/dist/lib/neutral/account-cache-YVQKLNV2.mjs.map +7 -0
- package/dist/lib/neutral/{app-graph-builder-FTXJNX37.mjs → app-graph-builder-RVXTD6OE.mjs} +3 -3
- package/dist/lib/neutral/app-graph-builder-RVXTD6OE.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +4 -4
- package/dist/lib/neutral/capabilities/node.mjs +3 -3
- package/dist/lib/neutral/chunk-A7WDDIWY.mjs +162 -0
- package/dist/lib/neutral/chunk-A7WDDIWY.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-JEF2FQGB.mjs → chunk-JY35S2CN.mjs} +2 -2
- package/dist/lib/neutral/{chunk-JEF2FQGB.mjs.map → chunk-JY35S2CN.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-ZFABGG2E.mjs +8 -0
- package/dist/lib/neutral/containers/index.mjs +6 -6
- package/dist/lib/neutral/{create-agent-U567RM7Z.mjs → create-agent-6UKJMZS5.mjs} +2 -2
- package/dist/lib/neutral/{create-identity-IKN2FJ5B.mjs → create-identity-ULCRB3YH.mjs} +2 -2
- package/dist/lib/neutral/{create-passkey-JAD3ACY7.mjs → create-passkey-I7VDS3AC.mjs} +2 -2
- package/dist/lib/neutral/{create-recovery-code-JZYXR4BY.mjs → create-recovery-code-DH2B6EGP.mjs} +2 -2
- package/dist/lib/neutral/index.mjs +4 -2
- package/dist/lib/neutral/{layer-specs-VQCJLV33.mjs → layer-specs-YI7BVWKZ.mjs} +6 -8
- package/dist/lib/neutral/layer-specs-YI7BVWKZ.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/{navigation-handler-MPJAVHWY.mjs → navigation-handler-MQ6MZXLX.mjs} +2 -2
- package/dist/lib/neutral/{open-usage-24I7RAFL.mjs → open-usage-OJVTPGOY.mjs} +2 -2
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +1 -1
- package/dist/lib/neutral/{redeem-passkey-4DR7GPMU.mjs → redeem-passkey-TYP4XLHO.mjs} +2 -2
- package/dist/lib/neutral/{redeem-token-N5MBQG3I.mjs → redeem-token-2J33R3PV.mjs} +2 -2
- package/dist/lib/neutral/{share-identity-YJIFDIPJ.mjs → share-identity-TOROBLWL.mjs} +2 -2
- package/dist/lib/neutral/testing/index.mjs.map +2 -2
- package/dist/lib/neutral/types/index.mjs +3 -1
- package/dist/types/src/capabilities/account-cache.d.ts +1 -31
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/client.d.ts +1 -2
- package/dist/types/src/capabilities/client.d.ts.map +1 -1
- package/dist/types/src/capabilities/hub-http-client.d.ts +1 -2
- package/dist/types/src/capabilities/hub-http-client.d.ts.map +1 -1
- package/dist/types/src/capabilities/layer-specs.d.ts +1 -2
- package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -1
- package/dist/types/src/capabilities/migrations.d.ts +1 -1
- package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +1 -2
- package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-context.d.ts +1 -6
- package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
- package/dist/types/src/containers/AccountContainer/AccountContainer.d.ts.map +1 -1
- package/dist/types/src/containers/AccountContainer/AccountContainer.stories.d.ts +14 -0
- package/dist/types/src/containers/AccountContainer/AccountContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DevicesContainer/DevicesContainer.d.ts.map +1 -1
- package/dist/types/src/containers/InvitationsContainer/InvitationsContainer.d.ts.map +1 -1
- package/dist/types/src/containers/InvitationsContainer/InvitationsContainer.stories.d.ts +14 -0
- package/dist/types/src/containers/InvitationsContainer/InvitationsContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ProfileContainer/ProfileContainer.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.d.ts.map +1 -1
- package/dist/types/src/containers/UsageContainer/UsageContainer.d.ts.map +1 -1
- package/dist/types/src/containers/UsageContainer/UsageView.d.ts +16 -7
- package/dist/types/src/containers/UsageContainer/UsageView.d.ts.map +1 -1
- package/dist/types/src/containers/UsageContainer/UsageView.stories.d.ts +2 -0
- package/dist/types/src/containers/UsageContainer/UsageView.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/{state/use-hub-http.d.ts → hooks/useHubClient.d.ts} +1 -1
- package/dist/types/src/hooks/useHubClient.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +4 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/initializeIdentity.d.ts.map +1 -1
- package/dist/types/src/{state → types}/account-cache.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +46 -45
- package/src/capabilities/account-cache.ts +1 -3
- package/src/capabilities/app-graph-builder.ts +80 -79
- package/src/capabilities/layer-specs.ts +4 -6
- package/src/commands/account/login/login.ts +2 -2
- package/src/containers/AccountContainer/AccountContainer.stories.tsx +46 -0
- package/src/containers/AccountContainer/AccountContainer.tsx +66 -62
- package/src/containers/DevicesContainer/DevicesContainer.tsx +69 -54
- package/src/containers/InvitationsContainer/InvitationsContainer.stories.tsx +46 -0
- package/src/containers/InvitationsContainer/InvitationsContainer.tsx +64 -61
- package/src/containers/ProfileContainer/ProfileContainer.tsx +37 -27
- package/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.tsx +50 -41
- package/src/containers/UsageContainer/UsageContainer.tsx +11 -10
- package/src/containers/UsageContainer/UsageView.stories.tsx +13 -0
- package/src/containers/UsageContainer/UsageView.tsx +182 -150
- package/src/hooks/index.ts +5 -0
- package/src/testing/initializeIdentity.ts +1 -0
- package/src/types/capabilities.ts +1 -1
- package/src/types/index.ts +1 -0
- package/dist/lib/neutral/AccountContainer-LIMGLO2Y.mjs.map +0 -7
- package/dist/lib/neutral/DevicesContainer-X26OGLFK.mjs.map +0 -7
- package/dist/lib/neutral/InvitationsContainer-OBBCJ7CJ.mjs.map +0 -7
- package/dist/lib/neutral/ProfileContainer-FGS2MVWA.mjs.map +0 -7
- package/dist/lib/neutral/RecoveryCredentialsContainer-SL4LYHBE.mjs.map +0 -7
- package/dist/lib/neutral/UsageContainer-HBPMLIK7.mjs +0 -226
- package/dist/lib/neutral/UsageContainer-HBPMLIK7.mjs.map +0 -7
- package/dist/lib/neutral/account-cache-4EKGEUJI.mjs +0 -43
- package/dist/lib/neutral/account-cache-4EKGEUJI.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-FTXJNX37.mjs.map +0 -7
- package/dist/lib/neutral/chunk-54MDDWCV.mjs +0 -8
- package/dist/lib/neutral/chunk-DA3LZQSD.mjs +0 -136
- package/dist/lib/neutral/chunk-DA3LZQSD.mjs.map +0 -7
- package/dist/lib/neutral/layer-specs-VQCJLV33.mjs.map +0 -7
- package/dist/types/src/state/use-hub-http.d.ts.map +0 -1
- /package/dist/lib/neutral/{chunk-54MDDWCV.mjs.map → chunk-ZFABGG2E.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-agent-U567RM7Z.mjs.map → create-agent-6UKJMZS5.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-identity-IKN2FJ5B.mjs.map → create-identity-ULCRB3YH.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-passkey-JAD3ACY7.mjs.map → create-passkey-I7VDS3AC.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-recovery-code-JZYXR4BY.mjs.map → create-recovery-code-DH2B6EGP.mjs.map} +0 -0
- /package/dist/lib/neutral/{navigation-handler-MPJAVHWY.mjs.map → navigation-handler-MQ6MZXLX.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-usage-24I7RAFL.mjs.map → open-usage-OJVTPGOY.mjs.map} +0 -0
- /package/dist/lib/neutral/{redeem-passkey-4DR7GPMU.mjs.map → redeem-passkey-TYP4XLHO.mjs.map} +0 -0
- /package/dist/lib/neutral/{redeem-token-N5MBQG3I.mjs.map → redeem-token-2J33R3PV.mjs.map} +0 -0
- /package/dist/lib/neutral/{share-identity-YJIFDIPJ.mjs.map → share-identity-TOROBLWL.mjs.map} +0 -0
- /package/dist/types/src/{state → types}/account-cache.d.ts +0 -0
- /package/src/{state/use-hub-http.ts → hooks/useHubClient.ts} +0 -0
- /package/src/{state → types}/account-cache.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ClientPlugin.node.ts", "../../../src/commands/account/index.ts", "../../../src/commands/account/login/login.ts", "../../../src/commands/halo/util.ts", "../../../src/commands/account/logout/logout.ts", "../../../src/commands/config/index.ts", "../../../src/commands/config/view.ts", "../../../src/commands/device/index.ts", "../../../src/commands/device/info/info.ts", "../../../src/commands/device/util.ts", "../../../src/commands/device/list/list.ts", "../../../src/commands/device/update/update.ts", "../../../src/commands/edge/index.ts", "../../../src/commands/edge/status.ts", "../../../src/commands/halo/index.ts", "../../../src/commands/halo/credential/index.ts", "../../../src/commands/halo/credential/add/add.ts", "../../../src/commands/halo/credential/list/list.ts", "../../../src/commands/halo/identity/identity.ts", "../../../src/commands/halo/keys/keys.ts", "../../../src/commands/halo/seed/seed.ts", "../../../src/commands/halo/update/update.ts", "../../../src/commands/profile/index.ts", "../../../src/commands/profile/create.ts", "../../../src/commands/profile/util.ts", "../../../src/commands/profile/delete.ts", "../../../src/commands/profile/import.ts", "../../../src/commands/profile/inspect.ts", "../../../src/commands/profile/list.ts", "../../../src/commands/profile/reset.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\n\nimport { Client, LayerSpecs, Migrations, OperationHandler, SchemaDefs } from '#capabilities';\nimport { meta } from '#meta';\nimport { ClientEvents } from '#types';\nimport { type ClientPluginOptions } from '#types';\n\nimport { account, config, device, edge, halo, profile } from './commands';\n\nexport const ClientPlugin = Plugin.define<ClientPluginOptions>(meta).pipe(\n // TODO(wittjosiah): Could some of these commands make use of operations?\n AppPlugin.addCommandModule({ commands: [account, config, device, edge, halo, profile] }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n Plugin.addModule((options) => ({\n id: Capability.getModuleTag(Client),\n activatesOn: ActivationEvents.Startup,\n firesAfterActivation: [ClientEvents.ClientReady],\n activate: () => Client(options),\n })),\n Plugin.addModule({\n activatesOn: ClientEvents.ClientReady,\n firesBeforeActivation: [AppActivationEvents.SetupSchema],\n activate: SchemaDefs,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.ClientReady,\n firesBeforeActivation: [ClientEvents.SetupMigration],\n activate: Migrations,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: LayerSpecs,\n }),\n Plugin.make,\n);\n\nexport default ClientPlugin;\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { login } from './login';\nimport { logout } from './logout';\n\nexport const account: Command.Command<any, any, any, any> = Command.make('account').pipe(\n Command.withDescription('Log in and out of a DXOS identity.'),\n Command.withSubcommands([login, logout]),\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Args from '@effect/cli/Args';\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, performRecoveryOAuthFlow, print } from '@dxos/cli-util';\nimport { type Client, ClientService } from '@dxos/client';\nimport { Invitation, InvitationEncoder } from '@dxos/client/invitations';\nimport { Context as DxContext } from '@dxos/context';\nimport { HubHttpClient } from '@dxos/edge-client';\nimport { invariant } from '@dxos/invariant';\nimport { ATPROTO_OAUTH_SCOPES, OAuthProvider } from '@dxos/protocols';\n\nimport { printIdentity, waitForState } from '../../halo/util';\n\ntype LoginMethod = 'email' | 'atproto' | 'device-invitation' | 'recovery-code';\n\nconst LOGIN_METHODS: LoginMethod[] = ['email', 'atproto', 'device-invitation', 'recovery-code'];\n\nconst METHOD_CHOICES = [\n { title: 'Email', value: 'email' as const },\n { title: 'AT Protocol', value: 'atproto' as const },\n { title: 'Device invitation', value: 'device-invitation' as const },\n { title: 'Recovery code', value: 'recovery-code' as const },\n];\n\nconst INPUT_PROMPT: Record<LoginMethod, string> = {\n email: 'Email address',\n atproto: 'atproto handle or DID (e.g. alice.bsky.social)',\n 'device-invitation': 'Invitation code or URL',\n 'recovery-code': 'Recovery code (seed phrase)',\n};\n\nexport const login = Command.make(\n 'login',\n {\n method: Options.choice('method', LOGIN_METHODS).pipe(\n Options.withDescription(\n 'Login method (email | atproto | device-invitation | recovery-code). Prompted if omitted.',\n ),\n Options.optional,\n ),\n input: Args.text({ name: 'input' }).pipe(\n Args.withDescription('Method input: email address / atproto handle / invitation code / recovery code.'),\n Args.optional,\n ),\n },\n Effect.fn(function* ({ method, input }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n // TODO(wittjosiah): How to surface this error to the user cleanly?\n invariant(!client.halo.identity.get(), 'Already logged in. Run `dx account logout` first.');\n\n const resolvedMethod: LoginMethod = Option.isSome(method)\n ? method.value\n : yield* Prompt.select({ message: 'Choose a login method:', choices: METHOD_CHOICES }).pipe(Prompt.run);\n\n const resolvedInput = Option.isSome(input)\n ? input.value\n : yield* Prompt.text({ message: `${INPUT_PROMPT[resolvedMethod]}:` }).pipe(Prompt.run);\n\n const identity = yield* Match.value(resolvedMethod).pipe(\n Match.when('atproto', () => loginWithAtproto(client, resolvedInput)),\n Match.when('email', () => loginWithEmail(client, resolvedInput)),\n Match.when('recovery-code', () => loginWithRecoveryCode(client, resolvedInput)),\n Match.when('device-invitation', () => loginWithDeviceInvitation(client, resolvedInput)),\n Match.exhaustive,\n );\n\n if (json) {\n yield* Console.log(\n JSON.stringify({ identityDid: identity.did, displayName: identity.profile?.displayName }, null, 2),\n );\n } else {\n yield* Console.log('Logged in successfully');\n yield* Console.log(print(printIdentity({ identityDid: identity.did, profile: identity.profile })));\n }\n }),\n).pipe(Command.withDescription('Log in to an existing DXOS identity (same methods as Composer).'));\n\n/**\n * atproto / Bluesky OAuth login: runs the gate recovery flow (local server + browser) and redeems\n * the resulting one-time `recoveryProof` to admit this device into the existing identity's HALO.\n */\nconst loginWithAtproto = (client: Client, handle: string) =>\n Effect.gen(function* () {\n const edgeBaseUrl = client.config.values.runtime?.services?.edge?.url;\n invariant(edgeBaseUrl, 'Edge services not configured (runtime.services.edge.url).');\n const { recoveryProof } = yield* performRecoveryOAuthFlow({\n edgeBaseUrl,\n provider: OAuthProvider.ATPROTO,\n scopes: ATPROTO_OAUTH_SCOPES,\n loginHint: handle,\n });\n return yield* Effect.tryPromise(() => client.halo.recoverIdentity({ recoveryProof }));\n });\n\n/** Recovery-code (seed phrase) login. */\nconst loginWithRecoveryCode = (client: Client, recoveryCode: string) =>\n Effect.tryPromise(() => client.halo.recoverIdentity({ recoveryCode }));\n\n/**\n * Email login: hub-service inlines a one-time `token` for test emails and emails it out-of-band\n * otherwise. Redeems the token to admit this device into HALO.\n */\nconst loginWithEmail = (client: Client, email: string) =>\n Effect.gen(function* () {\n const hubUrl = client.config.values?.runtime?.app?.env?.DX_HUB_URL;\n invariant(hubUrl, 'Hub URL not configured (runtime.app.env.DX_HUB_URL).');\n const hub = new HubHttpClient(hubUrl);\n const { token: inlineToken } = yield* Effect.tryPromise(() => hub.login(DxContext.default(), { email }));\n let token = inlineToken;\n if (!token) {\n yield* Console.log(`A login link was sent to ${email}. Paste the token from the email below.`);\n token = yield* Prompt.text({ message: 'Login token' }).pipe(Prompt.run);\n }\n return yield* Effect.tryPromise(() => client.halo.recoverIdentity({ token }));\n });\n\n/**\n * Device-invitation login: joins an existing identity from another authorized device.\n *\n * NOTE: p2p networking does not work in bun — this method will likely hang waiting for the peer.\n */\nconst loginWithDeviceInvitation = (client: Client, encoded: string) =>\n Effect.gen(function* () {\n let code = encoded;\n if (code.startsWith('http') || code.startsWith('socket')) {\n code = new URL(code).searchParams.get('deviceInvitationCode') ?? code;\n }\n const invitation = client.halo.join(InvitationEncoder.decode(code));\n yield* waitForState(invitation, Invitation.State.READY_FOR_AUTHENTICATION);\n const authCode = yield* Prompt.text({ message: 'Enter the authentication code' }).pipe(Prompt.run);\n yield* Effect.tryPromise(() => invitation.authenticate(authCode));\n yield* waitForState(invitation, Invitation.State.SUCCESS);\n const identity = client.halo.identity.get();\n invariant(identity, 'Device invitation completed but no identity is present.');\n return identity;\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\n\nimport { FormBuilder } from '@dxos/cli-util';\nimport { type AuthenticatingInvitationObservable, Invitation } from '@dxos/client/invitations';\n\n/**\n * Pretty prints an identity with ANSI colors.\n */\nexport const printIdentity = (identity: { identityDid: string; profile?: { displayName?: string } }) =>\n FormBuilder.make({ title: 'Identity' }).pipe(\n FormBuilder.set('identityDid', identity.identityDid),\n FormBuilder.set('displayName', identity.profile?.displayName ?? '<none>'),\n FormBuilder.build,\n );\n\nconst TERMINAL_FAILURE_STATES = new Set([\n Invitation.State.CANCELLED,\n Invitation.State.TIMEOUT,\n Invitation.State.ERROR,\n Invitation.State.EXPIRED,\n]);\n\n/** Await an authenticating invitation reaching the given state. */\nexport const waitForState = (invitation: AuthenticatingInvitationObservable, state: Invitation.State) =>\n Effect.async<void, Error>((resume) => {\n const subscription = invitation.subscribe((inv) => {\n if (inv.state === state) {\n resume(Effect.void);\n } else if (TERMINAL_FAILURE_STATES.has(inv.state!)) {\n resume(Effect.fail(new Error(`Invitation failed with state: ${Invitation.State[inv.state!]}`)));\n }\n });\n return Effect.sync(() => subscription.unsubscribe());\n }).pipe(Effect.timeout(Duration.minutes(3)));\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Error from '@effect/platform/Error';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { DX_DATA, getProfilePath } from '@dxos/client-protocol';\nimport { ConfigService } from '@dxos/config';\n\nexport const logout = Command.make(\n 'logout',\n {\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt.')),\n },\n Effect.fnUntraced(function* ({ force }) {\n const fs = yield* FileSystem.FileSystem;\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const path = config.values.runtime?.client?.storage?.dataRoot ?? getProfilePath(DX_DATA, profile);\n if (!force) {\n const confirmed = yield* Prompt.confirm({\n message: `Log out of profile (${profile})? This removes the local identity and data; spaces re-sync on next login.`,\n initial: false,\n }).pipe(Prompt.run);\n if (!confirmed) {\n return;\n }\n }\n\n yield* fs.remove(path, { recursive: true }).pipe(\n Effect.catchIf(\n (e): e is Error.SystemError => e._tag === 'SystemError' && e.reason === 'NotFound',\n () => Effect.void,\n ),\n );\n if (json) {\n yield* Console.log(JSON.stringify({ profile, loggedOut: true }, null, 2));\n } else {\n yield* Console.log(`Logged out of profile (${profile}).`);\n }\n }),\n).pipe(Command.withDescription('Log out of the current profile (clears the local identity and data).'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { view } from './view';\n\nexport const config = Command.make('config').pipe(\n Command.withDescription('Config commands.'),\n Command.withSubcommands([view]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Yaml from 'yaml';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ConfigService } from '@dxos/client';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\n\nexport const view = Command.make(\n 'view',\n {},\n Effect.fnUntraced(function* () {\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const configPath = getProfileConfigPath(DX_CONFIG, profile);\n\n if (json) {\n yield* Console.log(JSON.stringify(config.values, null, 2));\n } else {\n yield* Console.log(`Path: ${configPath}`);\n yield* Console.log(Yaml.stringify(config.values));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { info } from './info';\nimport { list } from './list';\nimport { update } from './update';\n\nexport const device = Command.make('device').pipe(\n Command.withDescription('Manage HALO devices.'),\n Command.withSubcommands([info, list, update]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { DeviceType } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { printDevice } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const device = client.halo.device;\n if (!device) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'No device found' }, null, 2));\n } else {\n yield* Console.log('No device found.');\n }\n return;\n }\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n deviceKey: device.deviceKey.toHex(),\n profile: {\n ...device.profile,\n type: device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN',\n },\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printDevice(device)));\n }\n});\n\nexport const info = Command.make('info', {}, handler).pipe(Command.withDescription('Show device info.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FormBuilder } from '@dxos/cli-util';\nimport { Device, DeviceKind, DeviceType } from '@dxos/client/halo';\n\nconst maybeTruncateKey = (key: { toHex(): string; truncate(): string }, truncate = false) =>\n truncate ? key.truncate() : key.toHex();\n\nconst getDeviceTitle = (device: Device): string => {\n if (device.profile?.label) {\n return device.profile.label;\n }\n const platform = device.profile?.platform ?? 'Unknown';\n const os = device.profile?.os ?? 'Unknown';\n return `${platform} on ${os}`;\n};\n\nexport const mapDevices = (devices: Device[], truncateKeys = false) => {\n return devices.map((device) => ({\n label: device.profile?.label,\n type: device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN',\n key: maybeTruncateKey(device.deviceKey, truncateKeys),\n kind: DeviceKind[device.kind],\n platform: device.profile?.platform,\n platformVersion: device.profile?.platformVersion,\n architecture: device.profile?.architecture,\n os: device.profile?.os,\n osVersion: device.profile?.osVersion,\n presence: device?.kind === DeviceKind.CURRENT ? 'THIS DEVICE' : Device.PresenceState[device.presence],\n }));\n};\n\nexport const printDevice = (device: Device) =>\n FormBuilder.make({ title: getDeviceTitle(device) }).pipe(\n FormBuilder.set('deviceKey', device.deviceKey.truncate()),\n FormBuilder.set('label', device.profile?.label ?? '<none>'),\n FormBuilder.set('type', device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN'),\n FormBuilder.set('kind', DeviceKind[device.kind]),\n FormBuilder.set(\n 'presence',\n device?.kind === DeviceKind.CURRENT ? 'THIS DEVICE' : Device.PresenceState[device.presence],\n ),\n FormBuilder.set('platform', device.profile?.platform ?? '<none>'),\n FormBuilder.set('platformVersion', device.profile?.platformVersion ?? '<none>'),\n FormBuilder.set('architecture', device.profile?.architecture ?? '<none>'),\n FormBuilder.set('os', device.profile?.os ?? '<none>'),\n FormBuilder.set('osVersion', device.profile?.osVersion ?? '<none>'),\n FormBuilder.build,\n );\n\nexport const printDevices = (devices: Device[]) => {\n return devices.map(printDevice);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { printList } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { mapDevices, printDevices } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const devices = client.halo.devices.get();\n\n if (json) {\n yield* Console.log(JSON.stringify(mapDevices(devices), null, 2));\n } else {\n const formatted = printDevices(devices);\n yield* Console.log(printList(formatted));\n }\n});\n\nexport const list = Command.make('list', {}, handler).pipe(Command.withDescription('List devices.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printDevice } from '../util';\n\nexport const handler = Effect.fn(function* ({ label }: { label: string }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const device = client.halo.device;\n if (!device) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'No device found' }, null, 2));\n } else {\n yield* Console.log('No device found.');\n }\n return;\n }\n\n const updatedProfile = {\n ...device.profile,\n label,\n };\n\n const devicesService = client.services.services.DevicesService;\n if (!devicesService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'DevicesService not found' }, null, 2));\n } else {\n yield* Console.log('DevicesService not found.');\n }\n return;\n }\n\n const updatedDevice = yield* Effect.tryPromise(() => devicesService.updateDevice(updatedProfile));\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n deviceKey: updatedDevice.deviceKey.toHex(),\n profile: updatedDevice.profile,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printDevice(updatedDevice)));\n }\n});\n\nexport const update = Command.make(\n 'update',\n {\n label: Options.text('label').pipe(Options.withDescription('The device label.')),\n },\n handler,\n).pipe(Command.withDescription('Update device label.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { status } from './status';\n\nexport const edge = Command.make('edge').pipe(\n Command.withDescription('EDGE commands.'),\n Command.withSubcommands([status]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { createEdgeIdentity } from '@dxos/client/edge';\nimport { Context } from '@dxos/context';\n\nexport const getStatus = () =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n const identity = createEdgeIdentity(client);\n client.edge.http.setIdentity(identity);\n const status = yield* Effect.tryPromise(() => client.edge.http.getStatus(Context.default()));\n\n if (yield* CommandConfig.isJson) {\n yield* Console.log(JSON.stringify(status, null, 2));\n } else if (status.problems.length > 0) {\n for (const problem of status.problems) {\n yield* Console.error(problem);\n }\n } else {\n yield* Console.log('No problems found.');\n }\n }).pipe(\n // TODO(wittjosiah): Tagged error.\n Effect.catchSome((error) => {\n if (error instanceof Error && error.message === 'Identity not available') {\n // TODO(wittjosiah): Error coloring for logs.\n return Option.some(Console.error(error.message));\n } else {\n return Option.none();\n }\n }),\n );\n\n// TODO(wittjosiah): Admin functionality to provide to specify an identity.\nexport const status = Command.make('status', {}, getStatus).pipe(\n Command.withDescription('Get the EDGE status for the current identity.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { credential } from './credential';\nimport { identity } from './identity';\nimport { keys } from './keys';\nimport { seed } from './seed';\nimport { update } from './update';\n\n// `create`, `join`, and `recover` are superseded by `dx account login`, which logs in to an\n// existing identity via the same methods as Composer (email / atproto / device-invitation /\n// recovery-code). Note: `join` was omitted and the `device-invitation` login method may hang —\n// both rely on p2p networking which does not work in bun.\n\nexport const halo: Command.Command<any, any, any, any> = Command.make('halo').pipe(\n Command.withDescription('Manage HALO identity.'),\n Command.withSubcommands([credential, identity, keys, seed, update]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { add } from './add';\nimport { list } from './list';\n\nexport const credential = Command.make('credential').pipe(\n Command.withDescription('Manage HALO credentials.'),\n Command.withSubcommands([add, list]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Args from '@effect/cli/Args';\nimport * as Command from '@effect/cli/Command';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { invariant } from '@dxos/invariant';\nimport { schema } from '@dxos/protocols/proto';\n\nexport const handler = Effect.fn(function* ({ credential }: { credential: Option.Option<string> }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n\n let credentialHex = Option.getOrUndefined(credential);\n if (!credentialHex) {\n credentialHex = yield* Prompt.text({ message: 'Enter credential (hex string)' }).pipe(Prompt.run);\n }\n\n invariant(credentialHex, 'Invalid credential.');\n\n const identity = client.halo.identity;\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Profile not initialized' }, null, 2));\n } else {\n yield* Console.log('Profile not initialized.');\n }\n return;\n }\n\n yield* Effect.gen(function* () {\n const codec = schema.getCodecForType('dxos.halo.credentials.Credential');\n const credentialBytes = yield* Effect.try({\n try: () => Buffer.from(credentialHex, 'hex'),\n catch: (error) => new Error(`Failed to parse hex string: ${error}`),\n });\n\n const verifyError = codec.protoType.verify(credentialBytes);\n if (verifyError) {\n yield* Effect.fail(new Error(verifyError));\n }\n\n const credentialObj = yield* Effect.try({\n try: () => codec.decode(credentialBytes),\n catch: (error) => new Error(`Failed to decode credential: ${error}`),\n });\n\n yield* Effect.tryPromise({\n try: () => client.halo.writeCredentials([credentialObj]),\n catch: (error) => new Error(`Failed to write credential: ${error}`),\n });\n\n if (json) {\n yield* Console.log(JSON.stringify({ success: true }, null, 2));\n } else {\n yield* Console.log('Credential added successfully.');\n }\n }).pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n error: 'Invalid credential',\n message: error instanceof Error ? error.message : String(error),\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log('Invalid credential.');\n }\n yield* Effect.fail(error);\n }),\n ),\n );\n});\n\nexport const add = Command.make(\n 'add',\n {\n credential: Args.text({ name: 'credential' }).pipe(\n Args.withDescription('Credential as hex string.'),\n Args.optional,\n ),\n },\n handler,\n).pipe(Command.withDescription('Import credential into HALO.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, Common, FormBuilder, getSpace, printList } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport type { Credential } from '@dxos/client/halo';\nimport { type Key } from '@dxos/echo';\n\nconst mapCredentials = (credentials: Credential[]) => {\n return credentials.map((credential) => ({\n id: credential.id?.toHex() ?? '<unknown>',\n issuer: credential.issuer?.toHex() ?? '<unknown>',\n subject: credential.subject?.id?.toHex() ?? '<unknown>',\n type: credential.subject.assertion['@type'],\n assertion: credential.subject.assertion,\n }));\n};\n\nconst printCredential = (credential: Credential) => {\n const type = credential.subject.assertion['@type'] ?? '<unknown>';\n return FormBuilder.make({ title: type }).pipe(\n FormBuilder.option('id', Option.fromNullable(credential.id?.truncate())),\n FormBuilder.option('issuer', Option.fromNullable(credential.issuer?.truncate())),\n FormBuilder.option('subject', Option.fromNullable(credential.subject?.id?.truncate())),\n FormBuilder.build,\n );\n};\n\nexport const handler = Effect.fn(function* ({\n type,\n spaceId,\n timeout,\n delay,\n}: {\n type: Option.Option<string>;\n spaceId: Option.Option<Key.SpaceId>;\n timeout: number;\n delay: number;\n}) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n let credentials: Credential[];\n\n if (Option.isSome(spaceId)) {\n // If space ID was provided, get credentials from that space.\n const space = yield* getSpace(spaceId.value);\n credentials = yield* Effect.tryPromise(() => space.internal.getCredentials());\n } else {\n // Get credentials from HALO\n const identity = client.halo.identity;\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Profile not initialized' }, null, 2));\n } else {\n yield* Console.log('Profile not initialized.');\n }\n return;\n }\n\n // Wait for at least one credential\n const latch = yield* Effect.makeLatch();\n const subscription = client.halo.credentials.subscribe((creds) => {\n if (creds.length > 0) {\n Effect.runSync(latch.open);\n }\n });\n\n yield* latch.await.pipe(\n Effect.timeout(Duration.millis(timeout)),\n Effect.catchAll(() => Effect.void),\n Effect.ensuring(\n Effect.sync(() => {\n subscription.unsubscribe();\n }),\n ),\n );\n\n // Wait a bit more to ensure all credentials are loaded\n yield* Effect.sleep(Duration.millis(delay));\n\n credentials = client.halo.queryCredentials({ type: Option.getOrUndefined(type) });\n }\n\n if (json) {\n yield* Console.log(JSON.stringify(mapCredentials(credentials), null, 2));\n } else {\n const formatted = credentials.map(printCredential);\n yield* Console.log(printList(formatted));\n }\n});\n\nexport const list = Command.make(\n 'list',\n {\n type: Options.text('type').pipe(Options.withDescription('Filter by credential type.'), Options.optional),\n spaceId: Common.spaceId.pipe(Options.withDescription('Space ID to show credentials from.'), Options.optional),\n timeout: Options.integer('timeout').pipe(\n Options.withDescription('Time in milliseconds to wait for at least one credential before listing.'),\n Options.withDefault(500),\n ),\n delay: Options.integer('delay').pipe(\n Options.withDescription('Delay in milliseconds before listing.'),\n Options.withDefault(250),\n ),\n },\n handler,\n).pipe(Command.withDescription('List HALO credentials.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printIdentity } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Identity not initialized' }, null, 2));\n } else {\n yield* Console.log('Identity not initialized.');\n }\n } else {\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityDid: identity.did,\n displayName: identity.profile?.displayName,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printIdentity({ identityDid: identity.did, profile: identity.profile })));\n }\n }\n});\n\nexport const identity = Command.make('identity', {}, handler).pipe(\n Command.withDescription('Get the current identity.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { FormBuilder, print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n const device = client.halo.device;\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityKey: identity?.identityKey.toHex(),\n deviceKey: device?.deviceKey.toHex(),\n },\n null,\n 2,\n ),\n );\n } else {\n const builder = FormBuilder.make({ title: 'HALO Keys' }).pipe(\n FormBuilder.option('identityKey', Option.fromNullable(identity?.identityKey.truncate())),\n FormBuilder.option('deviceKey', Option.fromNullable(device?.deviceKey.truncate())),\n );\n yield* Console.log(print(FormBuilder.build(builder)));\n }\n});\n\nexport const keys = Command.make('keys', {}, handler).pipe(Command.withDescription('Show HALO keys.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identityService = client.services.services.IdentityService;\n if (!identityService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'IdentityService not found' }, null, 2));\n } else {\n yield* Console.log('IdentityService not found.');\n }\n return;\n }\n\n const result = yield* Effect.tryPromise(() => identityService.createRecoveryCredential({}));\n\n if (json) {\n yield* Console.log(JSON.stringify({ recoveryCode: result.recoveryCode }, null, 2));\n } else {\n yield* Console.log(result.recoveryCode);\n }\n});\n\nexport const seed = Command.make('seed', {}, handler).pipe(\n Command.withDescription('Generate a seedphrase that can be used for identity recovery.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printIdentity } from '../util';\n\nexport const handler = Effect.fn(function* ({ displayName }: { displayName: string }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Identity not initialized' }, null, 2));\n } else {\n yield* Console.log('Identity not initialized.');\n }\n return;\n }\n\n const identityService = client.services.services.IdentityService;\n if (!identityService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'IdentityService not found' }, null, 2));\n } else {\n yield* Console.log('IdentityService not found.');\n }\n return;\n }\n\n const updatedIdentity = yield* Effect.tryPromise(() =>\n identityService.updateProfile({\n displayName,\n }),\n );\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityDid: updatedIdentity.did,\n displayName: updatedIdentity.profile?.displayName,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printIdentity({ identityDid: updatedIdentity.did, profile: updatedIdentity.profile })));\n }\n});\n\nexport const update = Command.make(\n 'update',\n {\n displayName: Options.text('displayName').pipe(Options.withDescription('The display name of the identity.')),\n },\n handler,\n).pipe(Command.withDescription('Update identity profile.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { create } from './create';\nimport { del } from './delete';\nimport { importCommand } from './import';\nimport { inspect } from './inspect';\nimport { list } from './list';\nimport { reset } from './reset';\n\nexport const profile = Command.make('profile').pipe(\n Command.withDescription('Profile commands.'),\n Command.withSubcommands([create, del, importCommand, inspect, list, reset]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Record from 'effect/Record';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\nimport { trim } from '@dxos/util';\n\nimport { printProfileCreated } from './util';\n\nconst TEMPLATES = {\n default: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge-production.dxos.workers.dev\n `,\n main: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge-main.dxos.workers.dev\n `,\n dev: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge.dxos.workers.dev\n `,\n local: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: http://localhost:8787\n `,\n} as const;\n\nexport const create = Command.make(\n 'create',\n {\n template: Options.choice('template', Record.keys(TEMPLATES)).pipe(\n Options.withDescription('Template to use'),\n Options.withDefault('default'),\n ),\n name: Options.text('name').pipe(Options.withDescription('Profile name'), Options.optional),\n },\n Effect.fnUntraced(function* ({ template, name }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const profileName = name.pipe(Option.getOrElse(() => template));\n const configPath = getProfileConfigPath(DX_CONFIG, profileName);\n if (yield* fs.exists(configPath)) {\n throw new Error(`Profile ${profileName} already exists`);\n }\n\n yield* fs.makeDirectory(path.dirname(configPath), { recursive: true });\n yield* fs.writeFileString(configPath, TEMPLATES[template]);\n if (json) {\n yield* Console.log(JSON.stringify({ name: profileName, path: configPath }, null, 2));\n } else {\n yield* Console.log(print(printProfileCreated(profileName, configPath)));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FormBuilder } from '@dxos/cli-util';\n\nexport type ProfileInfo = {\n name: string;\n isCurrent: boolean;\n fullPath: string;\n storagePath: string;\n edge?: string;\n};\n\n/**\n * Pretty prints profile creation result with ANSI colors.\n */\nexport const printProfileCreated = (name: string, path: string) =>\n FormBuilder.make({ title: 'Profile created' }).pipe(\n FormBuilder.set('name', name),\n FormBuilder.set('path', path),\n FormBuilder.build,\n );\n\n/**\n * Pretty prints profile deletion result with ANSI colors.\n */\nexport const printProfileDeleted = (name: string) =>\n FormBuilder.make({ title: 'Profile deleted' }).pipe(FormBuilder.set('name', name), FormBuilder.build);\n\n/**\n * Pretty prints profile reset result with ANSI colors.\n */\nexport const printProfileReset = (profile: string) =>\n FormBuilder.make({ title: 'Profile reset' }).pipe(FormBuilder.set('profile', profile), FormBuilder.build);\n\n/**\n * Pretty prints a profile with ANSI colors.\n */\nexport const printProfile = (profile: ProfileInfo) => {\n const title = profile.isCurrent ? `${profile.name} (current)` : profile.name;\n return FormBuilder.make({ title }).pipe(\n FormBuilder.set('fullPath', profile.fullPath),\n FormBuilder.set('storagePath', profile.storagePath),\n FormBuilder.set('edge', profile.edge ?? '<none>'),\n FormBuilder.build,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\n\nimport { printProfileDeleted } from './util';\n\nexport const del = Command.make(\n 'delete',\n {\n name: Options.text('name').pipe(Options.withDescription('Profile name'), Options.optional),\n },\n Effect.fnUntraced(function* ({ name }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const profileName = name.pipe(Option.getOrElse(() => 'default'));\n const configPath = getProfileConfigPath(DX_CONFIG, profileName);\n const pluginsPath = `${DX_CONFIG}/plugins/${profileName}.yml`;\n yield* fs.remove(configPath).pipe(Effect.ignore);\n yield* fs.remove(pluginsPath).pipe(Effect.ignore);\n if (json) {\n yield* Console.log(JSON.stringify({ name: profileName, deleted: true }, null, 2));\n } else {\n yield* Console.log(print(printProfileDeleted(profileName)));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ConfigService } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport type { Runtime } from '@dxos/protocols/proto/dxos/config';\n\nexport const handler = Effect.fn(function* ({\n file,\n dataDir,\n force,\n}: {\n file: string;\n dataDir: Option.Option<string>;\n force: boolean;\n}) {\n const dataDirValue = Option.getOrUndefined(dataDir);\n const { json, profile } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const config = yield* ConfigService;\n\n const { createLevel, createStorageObjects, importProfileData, decodeProfileArchive } = yield* Effect.promise(\n () => import('@dxos/client-services'),\n );\n\n let storageConfig: Runtime.Client.Storage;\n if (!dataDirValue) {\n if (!force) {\n yield* Console.log(`Will overwrite profile: ${profile}`);\n const confirmed = yield* Prompt.confirm({\n message: `Delete all data? (Profile: ${profile})`,\n initial: false,\n }).pipe(Prompt.run);\n if (!confirmed) {\n return;\n }\n }\n storageConfig = config.values.runtime!.client!.storage!;\n } else {\n const fullPath = path.resolve(dataDirValue);\n yield* Console.log(`Importing into: ${fullPath}`);\n storageConfig = {\n persistent: true,\n dataRoot: fullPath,\n };\n }\n\n if (yield* fs.exists(storageConfig.dataRoot!)) {\n log.error('data directory already exists', { path: storageConfig.dataRoot! });\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Data directory already exists' }, null, 2));\n } else {\n yield* Console.log('Data directory already exists.');\n }\n return;\n }\n\n const data = yield* fs.readFile(file);\n\n const archive = decodeProfileArchive(data);\n yield* Console.log(`Importing archive with ${archive.storage.length} entries`);\n\n const { storage } = createStorageObjects(storageConfig);\n const level = yield* Effect.tryPromise({\n try: () => createLevel(storageConfig),\n catch: (error) => new Error(`Failed to create level: ${error}`),\n });\n\n yield* Console.log('Beginning profile import...');\n yield* Effect.tryPromise({\n try: () => importProfileData({ storage, level }, archive),\n catch: (error) => new Error(`Failed to import profile data: ${error}`),\n });\n yield* Console.log('Profile import complete');\n\n if (json) {\n yield* Console.log(JSON.stringify({ success: true, profile, entries: archive.storage.length }, null, 2));\n }\n});\n\nexport const importCommand = Command.make(\n 'import',\n {\n file: Options.text('file').pipe(Options.withDescription('Archive filename.'), Options.withAlias('f')),\n dataDir: Options.text('data-dir').pipe(Options.withDescription('Storage directory.'), Options.optional),\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt.')),\n },\n handler,\n).pipe(Command.withDescription('Import profile.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig, FormBuilder, print } from '@dxos/cli-util';\nimport { ProfileArchiveEntryType } from '@dxos/protocols';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const handler = Effect.fn(function* ({ file, storage }: { file: string; storage: boolean }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n\n const { decodeProfileArchive } = yield* Effect.promise(() => import('@dxos/client-services'));\n\n const data = yield* fs.readFile(file);\n\n const archive = decodeProfileArchive(data);\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n meta: archive.meta,\n ...(storage ? { storage: archive.storage } : {}),\n },\n null,\n 2,\n ),\n );\n } else {\n const builder = FormBuilder.make({ title: 'Profile Archive' }).pipe(\n FormBuilder.when(\n archive.meta,\n FormBuilder.each(Object.entries(archive.meta ?? {}), ([key, value]) => FormBuilder.set(key, String(value))),\n ),\n FormBuilder.build,\n );\n yield* Console.log(print(builder));\n\n if (storage) {\n yield* Console.log('\\nStorage entries:\\n');\n for (const entry of archive.storage) {\n const key =\n typeof entry.key === 'string' ? entry.key : JSON.stringify(arrayToBuffer(entry.key).toString()).slice(1, -1);\n yield* Console.log(` ${ProfileArchiveEntryType[entry.type]} ${key}`);\n }\n }\n }\n});\n\nexport const inspect = Command.make(\n 'inspect',\n {\n file: Options.text('file').pipe(Options.withDescription('Archive filename.'), Options.withAlias('f')),\n storage: Options.boolean('storage', { ifPresent: true }).pipe(Options.withDescription('List storage entries.')),\n },\n handler,\n).pipe(Command.withDescription('Inspect profile archive.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Yaml from 'yaml';\n\nimport { CommandConfig, printList } from '@dxos/cli-util';\nimport { Config } from '@dxos/client';\nimport { DX_CONFIG, DX_DATA, getProfilePath } from '@dxos/client-protocol';\n\nimport { printProfile } from './util';\n\nexport const list = Command.make(\n 'list',\n {},\n Effect.fnUntraced(function* () {\n const { profile: currentProfile } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const profileDir = path.join(DX_CONFIG, 'profile');\n const entries = yield* fs.readDirectory(profileDir);\n const profileFiles = entries.filter((entry) => entry.endsWith('.yml'));\n const profiles = yield* Effect.forEach(profileFiles, (filename) =>\n Effect.gen(function* () {\n const name = filename.slice(0, -4);\n const configPath = path.join(profileDir, filename);\n const configContent = yield* fs\n .readFileString(configPath)\n .pipe(Effect.catchTag('SystemError', () => Effect.succeed('{}')));\n const configValues = Yaml.parse(configContent) ?? {};\n const config = new Config(configValues);\n return {\n name,\n isCurrent: name === currentProfile,\n fullPath: configPath,\n storagePath: getProfilePath(configValues?.runtime?.client?.storage?.dataRoot ?? DX_DATA, name),\n edge: config.values.runtime?.services?.edge?.url,\n };\n }),\n );\n\n const { json } = yield* CommandConfig;\n if (json) {\n yield* Console.log(JSON.stringify(profiles, null, 2));\n } else {\n const formatted = profiles.map(printProfile);\n yield* Console.log(printList(formatted));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_DATA, getProfilePath } from '@dxos/client-protocol';\nimport { ConfigService } from '@dxos/config';\n\nimport { printProfileReset } from './util';\n\nexport const reset = Command.make(\n 'reset',\n {\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt')),\n },\n Effect.fnUntraced(function* ({ force }) {\n const fs = yield* FileSystem.FileSystem;\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const path = config.values.runtime?.client?.storage?.dataRoot ?? getProfilePath(DX_DATA, profile);\n if (!force) {\n const confirmed = yield* Prompt.confirm({\n message: `Are you sure you want to reset the profile (${profile})?`,\n initial: false,\n });\n if (!confirmed) {\n return;\n }\n }\n\n yield* fs.remove(path, { recursive: true });\n if (json) {\n yield* Console.log(JSON.stringify({ profile, reset: true }, null, 2));\n } else {\n yield* Console.log(print(printProfileReset(profile)));\n }\n }),\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ActivationEvents", "Capability", "Plugin", "AppActivationEvents", "AppPlugin", "Client", "LayerSpecs", "Migrations", "OperationHandler", "SchemaDefs", "meta", "ClientEvents", "Command", "Args", "Command", "Options", "Prompt", "Console", "Effect", "Match", "Option", "CommandConfig", "performRecoveryOAuthFlow", "print", "ClientService", "Invitation", "InvitationEncoder", "Context", "DxContext", "HubHttpClient", "invariant", "ATPROTO_OAUTH_SCOPES", "OAuthProvider", "Duration", "Effect", "FormBuilder", "Invitation", "printIdentity", "identity", "make", "title", "pipe", "set", "identityDid", "profile", "displayName", "build", "TERMINAL_FAILURE_STATES", "Set", "State", "CANCELLED", "TIMEOUT", "ERROR", "EXPIRED", "waitForState", "invitation", "state", "async", "resume", "subscription", "subscribe", "inv", "void", "has", "fail", "Error", "sync", "unsubscribe", "timeout", "minutes", "LOGIN_METHODS", "atproto", "Command", "input", "Args", "withDescription", "Effect", "CommandConfig", "client", "ClientService", "invariant", "message", "choices", "METHOD_CHOICES", "pipe", "Prompt", "resolvedInput", "INPUT_PROMPT", "identity", "Match", "resolvedMethod", "Console", "stringify", "identityDid", "displayName", "profile", "edgeBaseUrl", "recoveryProof", "performRecoveryOAuthFlow", "provider", "OAuthProvider", "ATPROTO", "scopes", "loginHint", "handle", "hub", "HubHttpClient", "hubUrl", "token", "inlineToken", "DxContext", "default", "email", "tryPromise", "code", "startsWith", "invitation", "InvitationEncoder", "authCode", "text", "Invitation", "run", "waitForState", "halo", "get", "Command", "Options", "Prompt", "FileSystem", "Console", "Effect", "CommandConfig", "DX_DATA", "getProfilePath", "ConfigService", "logout", "make", "force", "boolean", "ifPresent", "pipe", "withDescription", "fnUntraced", "fs", "config", "json", "profile", "path", "values", "runtime", "client", "storage", "dataRoot", "confirmed", "confirm", "message", "initial", "run", "remove", "recursive", "catchIf", "e", "_tag", "reason", "void", "log", "JSON", "stringify", "loggedOut", "account", "make", "pipe", "withDescription", "withSubcommands", "login", "logout", "Command", "Command", "Console", "Effect", "Yaml", "CommandConfig", "ConfigService", "DX_CONFIG", "getProfileConfigPath", "view", "make", "fnUntraced", "config", "json", "profile", "configPath", "log", "JSON", "stringify", "values", "config", "make", "pipe", "withDescription", "withSubcommands", "view", "Command", "Command", "Console", "Effect", "CommandConfig", "print", "ClientService", "DeviceType", "FormBuilder", "Device", "DeviceKind", "DeviceType", "maybeTruncateKey", "key", "truncate", "toHex", "getDeviceTitle", "device", "profile", "label", "platform", "os", "mapDevices", "devices", "truncateKeys", "map", "type", "deviceKey", "kind", "platformVersion", "architecture", "osVersion", "presence", "CURRENT", "PresenceState", "printDevice", "make", "title", "pipe", "set", "build", "printDevices", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "device", "halo", "log", "JSON", "stringify", "error", "deviceKey", "toHex", "profile", "type", "DeviceType", "print", "printDevice", "info", "make", "pipe", "withDescription", "Command", "Console", "Effect", "CommandConfig", "printList", "ClientService", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "devices", "halo", "get", "log", "JSON", "stringify", "mapDevices", "formatted", "printDevices", "printList", "list", "make", "pipe", "withDescription", "Command", "Options", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "label", "json", "CommandConfig", "client", "ClientService", "device", "halo", "log", "JSON", "stringify", "error", "updatedProfile", "profile", "devicesService", "services", "DevicesService", "updatedDevice", "tryPromise", "updateDevice", "deviceKey", "toHex", "print", "printDevice", "update", "make", "text", "pipe", "withDescription", "device", "make", "pipe", "withDescription", "withSubcommands", "info", "list", "update", "Command", "Command", "Console", "Effect", "Option", "CommandConfig", "ClientService", "createEdgeIdentity", "Context", "__dxlog_file", "getStatus", "client", "http", "setIdentity", "status", "tryPromise", "isJson", "stringify", "problems", "problem", "error", "some", "message", "none", "edge", "make", "pipe", "withDescription", "withSubcommands", "status", "Command", "Command", "Args", "Command", "Prompt", "Console", "Effect", "Option", "CommandConfig", "ClientService", "invariant", "schema", "__dxlog_file", "handler", "client", "credentialHex", "credential", "run", "identity", "error", "credentialBytes", "try", "Buffer", "from", "catch", "Error", "verifyError", "codec", "protoType", "fail", "credentialObj", "tryPromise", "json", "success", "stringify", "name", "withDescription", "pipe", "Command", "Options", "Console", "Duration", "Effect", "Option", "CommandConfig", "Common", "FormBuilder", "getSpace", "printList", "ClientService", "mapCredentials", "credentials", "map", "credential", "id", "toHex", "issuer", "subject", "type", "assertion", "printCredential", "make", "title", "pipe", "option", "fromNullable", "truncate", "build", "handler", "fn", "spaceId", "timeout", "delay", "json", "client", "isSome", "space", "value", "tryPromise", "internal", "getCredentials", "identity", "halo", "log", "JSON", "stringify", "error", "latch", "makeLatch", "subscription", "subscribe", "creds", "length", "runSync", "open", "await", "millis", "catchAll", "void", "ensuring", "sync", "unsubscribe", "sleep", "queryCredentials", "getOrUndefined", "formatted", "list", "text", "withDescription", "optional", "integer", "withDefault", "credential", "make", "pipe", "withDescription", "withSubcommands", "add", "list", "Command", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "identity", "halo", "get", "log", "JSON", "stringify", "error", "identityDid", "did", "displayName", "profile", "print", "printIdentity", "make", "pipe", "withDescription", "Command", "Console", "Effect", "Option", "CommandConfig", "FormBuilder", "print", "ClientService", "handler", "fn", "json", "client", "identity", "halo", "get", "device", "log", "JSON", "stringify", "identityKey", "toHex", "deviceKey", "builder", "make", "title", "pipe", "option", "fromNullable", "truncate", "build", "keys", "withDescription", "Command", "Console", "Effect", "CommandConfig", "ClientService", "handler", "fn", "json", "client", "identityService", "services", "IdentityService", "log", "JSON", "stringify", "error", "result", "tryPromise", "createRecoveryCredential", "recoveryCode", "seed", "make", "pipe", "withDescription", "Command", "Options", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "displayName", "json", "CommandConfig", "client", "ClientService", "identity", "halo", "get", "log", "JSON", "stringify", "error", "identityService", "services", "IdentityService", "updatedIdentity", "tryPromise", "updateProfile", "identityDid", "did", "profile", "print", "printIdentity", "update", "make", "text", "pipe", "withDescription", "halo", "make", "pipe", "withDescription", "withSubcommands", "credential", "identity", "keys", "seed", "update", "Command", "Command", "Options", "FileSystem", "Path", "Console", "Effect", "Option", "Record", "CommandConfig", "print", "DX_CONFIG", "getProfileConfigPath", "trim", "FormBuilder", "printProfileCreated", "name", "path", "make", "title", "pipe", "set", "build", "printProfileDeleted", "printProfileReset", "profile", "printProfile", "isCurrent", "fullPath", "storagePath", "edge", "TEMPLATES", "default", "trim", "main", "dev", "local", "create", "make", "template", "choice", "keys", "pipe", "withDescription", "withDefault", "name", "text", "optional", "fnUntraced", "json", "CommandConfig", "fs", "FileSystem", "path", "Path", "profileName", "getOrElse", "configPath", "getProfileConfigPath", "DX_CONFIG", "exists", "Error", "makeDirectory", "dirname", "recursive", "writeFileString", "log", "JSON", "stringify", "print", "printProfileCreated", "Command", "Options", "FileSystem", "Console", "Effect", "Option", "CommandConfig", "print", "DX_CONFIG", "getProfileConfigPath", "del", "make", "name", "text", "pipe", "withDescription", "optional", "fnUntraced", "json", "CommandConfig", "fs", "FileSystem", "profileName", "getOrElse", "configPath", "getProfileConfigPath", "DX_CONFIG", "pluginsPath", "remove", "ignore", "log", "JSON", "stringify", "deleted", "print", "printProfileDeleted", "Command", "Options", "Prompt", "FileSystem", "Path", "Console", "Effect", "Option", "CommandConfig", "ConfigService", "log", "__dxlog_file", "handler", "json", "fs", "path", "profile", "config", "createLevel", "createStorageObjects", "storageConfig", "dataDirValue", "confirmed", "initial", "pipe", "fullPath", "resolve", "persistent", "dataRoot", "JSON", "error", "try", "catch", "Error", "importProfileData", "storage", "level", "archive", "success", "entries", "dataDir", "withDescription", "force", "boolean", "Command", "Options", "FileSystem", "Console", "Effect", "CommandConfig", "FormBuilder", "print", "ProfileArchiveEntryType", "arrayToBuffer", "handler", "fn", "file", "storage", "json", "fs", "decodeProfileArchive", "promise", "data", "readFile", "archive", "log", "JSON", "stringify", "meta", "builder", "make", "title", "pipe", "when", "each", "Object", "entries", "key", "value", "set", "String", "build", "entry", "toString", "slice", "type", "inspect", "text", "withDescription", "withAlias", "boolean", "ifPresent", "Command", "FileSystem", "Path", "Console", "Effect", "Yaml", "CommandConfig", "printList", "Config", "DX_CONFIG", "DX_DATA", "getProfilePath", "list", "make", "fnUntraced", "profile", "currentProfile", "CommandConfig", "fs", "FileSystem", "path", "Path", "profileDir", "join", "DX_CONFIG", "entries", "readDirectory", "profileFiles", "filter", "entry", "endsWith", "profiles", "forEach", "filename", "gen", "name", "slice", "configPath", "configContent", "readFileString", "pipe", "catchTag", "succeed", "configValues", "parse", "config", "Config", "isCurrent", "fullPath", "storagePath", "getProfilePath", "runtime", "client", "storage", "dataRoot", "DX_DATA", "edge", "values", "services", "url", "json", "log", "JSON", "stringify", "formatted", "map", "printProfile", "printList", "Command", "Options", "Prompt", "FileSystem", "Console", "Effect", "CommandConfig", "print", "DX_DATA", "getProfilePath", "ConfigService", "reset", "make", "force", "boolean", "ifPresent", "pipe", "withDescription", "fnUntraced", "fs", "FileSystem", "config", "ConfigService", "json", "profile", "CommandConfig", "path", "values", "runtime", "client", "storage", "dataRoot", "getProfilePath", "DX_DATA", "confirmed", "confirm", "message", "initial", "remove", "recursive", "log", "JSON", "stringify", "print", "printProfileReset", "profile", "make", "pipe", "withDescription", "withSubcommands", "create", "del", "importCommand", "inspect", "list", "reset", "ClientPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addCommandModule", "commands", "account", "config", "device", "edge", "halo", "profile", "addOperationHandlerModule", "activate", "OperationHandler", "addModule", "options", "id", "Capability", "getModuleTag", "Client", "activatesOn", "ActivationEvents", "Startup", "firesAfterActivation", "ClientEvents", "ClientReady", "firesBeforeActivation", "AppActivationEvents", "SetupSchema", "SchemaDefs", "SetupMigration", "Migrations", "SetupProcessManager", "LayerSpecs", "make"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\n\nimport { Client, LayerSpecs, Migrations, OperationHandler, SchemaDefs } from '#capabilities';\nimport { meta } from '#meta';\nimport { ClientEvents } from '#types';\nimport { type ClientPluginOptions } from '#types';\n\nimport { account, config, device, edge, halo, profile } from './commands';\n\nexport const ClientPlugin = Plugin.define<ClientPluginOptions>(meta).pipe(\n // TODO(wittjosiah): Could some of these commands make use of operations?\n AppPlugin.addCommandModule({ commands: [account, config, device, edge, halo, profile] }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n Plugin.addModule((options) => ({\n id: Capability.getModuleTag(Client),\n activatesOn: ActivationEvents.Startup,\n firesAfterActivation: [ClientEvents.ClientReady],\n activate: () => Client(options),\n })),\n Plugin.addModule({\n activatesOn: ClientEvents.ClientReady,\n firesBeforeActivation: [AppActivationEvents.SetupSchema],\n activate: SchemaDefs,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.ClientReady,\n firesBeforeActivation: [ClientEvents.SetupMigration],\n activate: Migrations,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: LayerSpecs,\n }),\n Plugin.make,\n);\n\nexport default ClientPlugin;\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { login } from './login';\nimport { logout } from './logout';\n\nexport const account: Command.Command<any, any, any, any> = Command.make('account').pipe(\n Command.withDescription('Log in and out of a DXOS identity.'),\n Command.withSubcommands([login, logout]),\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Args from '@effect/cli/Args';\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, performRecoveryOAuthFlow, print } from '@dxos/cli-util';\nimport { type Client, ClientService } from '@dxos/client';\nimport { Invitation, InvitationEncoder } from '@dxos/client/invitations';\nimport { Context as DxContext } from '@dxos/context';\nimport { HubHttpClient } from '@dxos/edge-client';\nimport { invariant } from '@dxos/invariant';\nimport { ATPROTO_OAUTH_SCOPES, OAuthProvider } from '@dxos/protocols';\n\nimport { printIdentity, waitForState } from '../../halo/util';\n\ntype LoginMethod = 'email' | 'atproto' | 'device-invitation' | 'recovery-code';\n\nconst LOGIN_METHODS: LoginMethod[] = ['email', 'atproto', 'device-invitation', 'recovery-code'];\n\nconst METHOD_CHOICES = [\n { title: 'Email', value: 'email' as const },\n { title: 'AT Protocol', value: 'atproto' as const },\n { title: 'Device invitation', value: 'device-invitation' as const },\n { title: 'Recovery code', value: 'recovery-code' as const },\n];\n\nconst INPUT_PROMPT: Record<LoginMethod, string> = {\n 'email': 'Email address',\n 'atproto': 'atproto handle or DID (e.g. alice.bsky.social)',\n 'device-invitation': 'Invitation code or URL',\n 'recovery-code': 'Recovery code (seed phrase)',\n};\n\nexport const login = Command.make(\n 'login',\n {\n method: Options.choice('method', LOGIN_METHODS).pipe(\n Options.withDescription(\n 'Login method (email | atproto | device-invitation | recovery-code). Prompted if omitted.',\n ),\n Options.optional,\n ),\n input: Args.text({ name: 'input' }).pipe(\n Args.withDescription('Method input: email address / atproto handle / invitation code / recovery code.'),\n Args.optional,\n ),\n },\n Effect.fn(function* ({ method, input }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n // TODO(wittjosiah): How to surface this error to the user cleanly?\n invariant(!client.halo.identity.get(), 'Already logged in. Run `dx account logout` first.');\n\n const resolvedMethod: LoginMethod = Option.isSome(method)\n ? method.value\n : yield* Prompt.select({ message: 'Choose a login method:', choices: METHOD_CHOICES }).pipe(Prompt.run);\n\n const resolvedInput = Option.isSome(input)\n ? input.value\n : yield* Prompt.text({ message: `${INPUT_PROMPT[resolvedMethod]}:` }).pipe(Prompt.run);\n\n const identity = yield* Match.value(resolvedMethod).pipe(\n Match.when('atproto', () => loginWithAtproto(client, resolvedInput)),\n Match.when('email', () => loginWithEmail(client, resolvedInput)),\n Match.when('recovery-code', () => loginWithRecoveryCode(client, resolvedInput)),\n Match.when('device-invitation', () => loginWithDeviceInvitation(client, resolvedInput)),\n Match.exhaustive,\n );\n\n if (json) {\n yield* Console.log(\n JSON.stringify({ identityDid: identity.did, displayName: identity.profile?.displayName }, null, 2),\n );\n } else {\n yield* Console.log('Logged in successfully');\n yield* Console.log(print(printIdentity({ identityDid: identity.did, profile: identity.profile })));\n }\n }),\n).pipe(Command.withDescription('Log in to an existing DXOS identity (same methods as Composer).'));\n\n/**\n * atproto / Bluesky OAuth login: runs the gate recovery flow (local server + browser) and redeems\n * the resulting one-time `recoveryProof` to admit this device into the existing identity's HALO.\n */\nconst loginWithAtproto = (client: Client, handle: string) =>\n Effect.gen(function* () {\n const edgeBaseUrl = client.config.values.runtime?.services?.edge?.url;\n invariant(edgeBaseUrl, 'Edge services not configured (runtime.services.edge.url).');\n const { recoveryProof } = yield* performRecoveryOAuthFlow({\n edgeBaseUrl,\n provider: OAuthProvider.ATPROTO,\n scopes: ATPROTO_OAUTH_SCOPES,\n loginHint: handle,\n });\n return yield* Effect.tryPromise(() => client.halo.recoverIdentity({ recoveryProof }));\n });\n\n/** Recovery-code (seed phrase) login. */\nconst loginWithRecoveryCode = (client: Client, recoveryCode: string) =>\n Effect.tryPromise(() => client.halo.recoverIdentity({ recoveryCode }));\n\n/**\n * Email login: hub-service inlines a one-time `token` for test emails and emails it out-of-band\n * otherwise. Redeems the token to admit this device into HALO.\n */\nconst loginWithEmail = (client: Client, email: string) =>\n Effect.gen(function* () {\n const hubUrl = client.config.values?.runtime?.app?.env?.DX_HUB_URL;\n invariant(hubUrl, 'Hub URL not configured (runtime.app.env.DX_HUB_URL).');\n const hub = new HubHttpClient(hubUrl);\n const { token: inlineToken } = yield* Effect.tryPromise(() => hub.login(DxContext.default(), { email }));\n let token = inlineToken;\n if (!token) {\n yield* Console.log(`A login link was sent to ${email}. Paste the token from the email below.`);\n token = yield* Prompt.text({ message: 'Login token' }).pipe(Prompt.run);\n }\n return yield* Effect.tryPromise(() => client.halo.recoverIdentity({ token }));\n });\n\n/**\n * Device-invitation login: joins an existing identity from another authorized device.\n *\n * NOTE: p2p networking does not work in bun — this method will likely hang waiting for the peer.\n */\nconst loginWithDeviceInvitation = (client: Client, encoded: string) =>\n Effect.gen(function* () {\n let code = encoded;\n if (code.startsWith('http') || code.startsWith('socket')) {\n code = new URL(code).searchParams.get('deviceInvitationCode') ?? code;\n }\n const invitation = client.halo.join(InvitationEncoder.decode(code));\n yield* waitForState(invitation, Invitation.State.READY_FOR_AUTHENTICATION);\n const authCode = yield* Prompt.text({ message: 'Enter the authentication code' }).pipe(Prompt.run);\n yield* Effect.tryPromise(() => invitation.authenticate(authCode));\n yield* waitForState(invitation, Invitation.State.SUCCESS);\n const identity = client.halo.identity.get();\n invariant(identity, 'Device invitation completed but no identity is present.');\n return identity;\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\n\nimport { FormBuilder } from '@dxos/cli-util';\nimport { type AuthenticatingInvitationObservable, Invitation } from '@dxos/client/invitations';\n\n/**\n * Pretty prints an identity with ANSI colors.\n */\nexport const printIdentity = (identity: { identityDid: string; profile?: { displayName?: string } }) =>\n FormBuilder.make({ title: 'Identity' }).pipe(\n FormBuilder.set('identityDid', identity.identityDid),\n FormBuilder.set('displayName', identity.profile?.displayName ?? '<none>'),\n FormBuilder.build,\n );\n\nconst TERMINAL_FAILURE_STATES = new Set([\n Invitation.State.CANCELLED,\n Invitation.State.TIMEOUT,\n Invitation.State.ERROR,\n Invitation.State.EXPIRED,\n]);\n\n/** Await an authenticating invitation reaching the given state. */\nexport const waitForState = (invitation: AuthenticatingInvitationObservable, state: Invitation.State) =>\n Effect.async<void, Error>((resume) => {\n const subscription = invitation.subscribe((inv) => {\n if (inv.state === state) {\n resume(Effect.void);\n } else if (TERMINAL_FAILURE_STATES.has(inv.state!)) {\n resume(Effect.fail(new Error(`Invitation failed with state: ${Invitation.State[inv.state!]}`)));\n }\n });\n return Effect.sync(() => subscription.unsubscribe());\n }).pipe(Effect.timeout(Duration.minutes(3)));\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Error from '@effect/platform/Error';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { DX_DATA, getProfilePath } from '@dxos/client-protocol';\nimport { ConfigService } from '@dxos/config';\n\nexport const logout = Command.make(\n 'logout',\n {\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt.')),\n },\n Effect.fnUntraced(function* ({ force }) {\n const fs = yield* FileSystem.FileSystem;\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const path = config.values.runtime?.client?.storage?.dataRoot ?? getProfilePath(DX_DATA, profile);\n if (!force) {\n const confirmed = yield* Prompt.confirm({\n message: `Log out of profile (${profile})? This removes the local identity and data; spaces re-sync on next login.`,\n initial: false,\n }).pipe(Prompt.run);\n if (!confirmed) {\n return;\n }\n }\n\n yield* fs.remove(path, { recursive: true }).pipe(\n Effect.catchIf(\n (e): e is Error.SystemError => e._tag === 'SystemError' && e.reason === 'NotFound',\n () => Effect.void,\n ),\n );\n if (json) {\n yield* Console.log(JSON.stringify({ profile, loggedOut: true }, null, 2));\n } else {\n yield* Console.log(`Logged out of profile (${profile}).`);\n }\n }),\n).pipe(Command.withDescription('Log out of the current profile (clears the local identity and data).'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { view } from './view';\n\nexport const config = Command.make('config').pipe(\n Command.withDescription('Config commands.'),\n Command.withSubcommands([view]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Yaml from 'yaml';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ConfigService } from '@dxos/client';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\n\nexport const view = Command.make(\n 'view',\n {},\n Effect.fnUntraced(function* () {\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const configPath = getProfileConfigPath(DX_CONFIG, profile);\n\n if (json) {\n yield* Console.log(JSON.stringify(config.values, null, 2));\n } else {\n yield* Console.log(`Path: ${configPath}`);\n yield* Console.log(Yaml.stringify(config.values));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { info } from './info';\nimport { list } from './list';\nimport { update } from './update';\n\nexport const device = Command.make('device').pipe(\n Command.withDescription('Manage HALO devices.'),\n Command.withSubcommands([info, list, update]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { DeviceType } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { printDevice } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const device = client.halo.device;\n if (!device) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'No device found' }, null, 2));\n } else {\n yield* Console.log('No device found.');\n }\n return;\n }\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n deviceKey: device.deviceKey.toHex(),\n profile: {\n ...device.profile,\n type: device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN',\n },\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printDevice(device)));\n }\n});\n\nexport const info = Command.make('info', {}, handler).pipe(Command.withDescription('Show device info.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FormBuilder } from '@dxos/cli-util';\nimport { Device, DeviceKind, DeviceType } from '@dxos/client/halo';\n\nconst maybeTruncateKey = (key: { toHex(): string; truncate(): string }, truncate = false) =>\n truncate ? key.truncate() : key.toHex();\n\nconst getDeviceTitle = (device: Device): string => {\n if (device.profile?.label) {\n return device.profile.label;\n }\n const platform = device.profile?.platform ?? 'Unknown';\n const os = device.profile?.os ?? 'Unknown';\n return `${platform} on ${os}`;\n};\n\nexport const mapDevices = (devices: Device[], truncateKeys = false) => {\n return devices.map((device) => ({\n label: device.profile?.label,\n type: device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN',\n key: maybeTruncateKey(device.deviceKey, truncateKeys),\n kind: DeviceKind[device.kind],\n platform: device.profile?.platform,\n platformVersion: device.profile?.platformVersion,\n architecture: device.profile?.architecture,\n os: device.profile?.os,\n osVersion: device.profile?.osVersion,\n presence: device?.kind === DeviceKind.CURRENT ? 'THIS DEVICE' : Device.PresenceState[device.presence],\n }));\n};\n\nexport const printDevice = (device: Device) =>\n FormBuilder.make({ title: getDeviceTitle(device) }).pipe(\n FormBuilder.set('deviceKey', device.deviceKey.truncate()),\n FormBuilder.set('label', device.profile?.label ?? '<none>'),\n FormBuilder.set('type', device.profile?.type ? DeviceType[device.profile?.type] : 'UNKNOWN'),\n FormBuilder.set('kind', DeviceKind[device.kind]),\n FormBuilder.set(\n 'presence',\n device?.kind === DeviceKind.CURRENT ? 'THIS DEVICE' : Device.PresenceState[device.presence],\n ),\n FormBuilder.set('platform', device.profile?.platform ?? '<none>'),\n FormBuilder.set('platformVersion', device.profile?.platformVersion ?? '<none>'),\n FormBuilder.set('architecture', device.profile?.architecture ?? '<none>'),\n FormBuilder.set('os', device.profile?.os ?? '<none>'),\n FormBuilder.set('osVersion', device.profile?.osVersion ?? '<none>'),\n FormBuilder.build,\n );\n\nexport const printDevices = (devices: Device[]) => {\n return devices.map(printDevice);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { printList } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { mapDevices, printDevices } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const devices = client.halo.devices.get();\n\n if (json) {\n yield* Console.log(JSON.stringify(mapDevices(devices), null, 2));\n } else {\n const formatted = printDevices(devices);\n yield* Console.log(printList(formatted));\n }\n});\n\nexport const list = Command.make('list', {}, handler).pipe(Command.withDescription('List devices.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printDevice } from '../util';\n\nexport const handler = Effect.fn(function* ({ label }: { label: string }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const device = client.halo.device;\n if (!device) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'No device found' }, null, 2));\n } else {\n yield* Console.log('No device found.');\n }\n return;\n }\n\n const updatedProfile = {\n ...device.profile,\n label,\n };\n\n const devicesService = client.services.services.DevicesService;\n if (!devicesService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'DevicesService not found' }, null, 2));\n } else {\n yield* Console.log('DevicesService not found.');\n }\n return;\n }\n\n const updatedDevice = yield* Effect.tryPromise(() => devicesService.updateDevice(updatedProfile));\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n deviceKey: updatedDevice.deviceKey.toHex(),\n profile: updatedDevice.profile,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printDevice(updatedDevice)));\n }\n});\n\nexport const update = Command.make(\n 'update',\n {\n label: Options.text('label').pipe(Options.withDescription('The device label.')),\n },\n handler,\n).pipe(Command.withDescription('Update device label.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { status } from './status';\n\nexport const edge = Command.make('edge').pipe(\n Command.withDescription('EDGE commands.'),\n Command.withSubcommands([status]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { createEdgeIdentity } from '@dxos/client/edge';\nimport { Context } from '@dxos/context';\n\nexport const getStatus = () =>\n Effect.gen(function* () {\n const client = yield* ClientService;\n const identity = createEdgeIdentity(client);\n client.edge.http.setIdentity(identity);\n const status = yield* Effect.tryPromise(() => client.edge.http.getStatus(Context.default()));\n\n if (yield* CommandConfig.isJson) {\n yield* Console.log(JSON.stringify(status, null, 2));\n } else if (status.problems.length > 0) {\n for (const problem of status.problems) {\n yield* Console.error(problem);\n }\n } else {\n yield* Console.log('No problems found.');\n }\n }).pipe(\n // TODO(wittjosiah): Tagged error.\n Effect.catchSome((error) => {\n if (error instanceof Error && error.message === 'Identity not available') {\n // TODO(wittjosiah): Error coloring for logs.\n return Option.some(Console.error(error.message));\n } else {\n return Option.none();\n }\n }),\n );\n\n// TODO(wittjosiah): Admin functionality to provide to specify an identity.\nexport const status = Command.make('status', {}, getStatus).pipe(\n Command.withDescription('Get the EDGE status for the current identity.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { credential } from './credential';\nimport { identity } from './identity';\nimport { keys } from './keys';\nimport { seed } from './seed';\nimport { update } from './update';\n\n// `create`, `join`, and `recover` are superseded by `dx account login`, which logs in to an\n// existing identity via the same methods as Composer (email / atproto / device-invitation /\n// recovery-code). Note: `join` was omitted and the `device-invitation` login method may hang —\n// both rely on p2p networking which does not work in bun.\n\nexport const halo: Command.Command<any, any, any, any> = Command.make('halo').pipe(\n Command.withDescription('Manage HALO identity.'),\n Command.withSubcommands([credential, identity, keys, seed, update]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { add } from './add';\nimport { list } from './list';\n\nexport const credential = Command.make('credential').pipe(\n Command.withDescription('Manage HALO credentials.'),\n Command.withSubcommands([add, list]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Args from '@effect/cli/Args';\nimport * as Command from '@effect/cli/Command';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport { invariant } from '@dxos/invariant';\nimport { schema } from '@dxos/protocols/proto';\n\nexport const handler = Effect.fn(function* ({ credential }: { credential: Option.Option<string> }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n\n let credentialHex = Option.getOrUndefined(credential);\n if (!credentialHex) {\n credentialHex = yield* Prompt.text({ message: 'Enter credential (hex string)' }).pipe(Prompt.run);\n }\n\n invariant(credentialHex, 'Invalid credential.');\n\n const identity = client.halo.identity;\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Profile not initialized' }, null, 2));\n } else {\n yield* Console.log('Profile not initialized.');\n }\n return;\n }\n\n yield* Effect.gen(function* () {\n const codec = schema.getCodecForType('dxos.halo.credentials.Credential');\n const credentialBytes = yield* Effect.try({\n try: () => Buffer.from(credentialHex, 'hex'),\n catch: (error) => new Error(`Failed to parse hex string: ${error}`),\n });\n\n const verifyError = codec.protoType.verify(credentialBytes);\n if (verifyError) {\n yield* Effect.fail(new Error(verifyError));\n }\n\n const credentialObj = yield* Effect.try({\n try: () => codec.decode(credentialBytes),\n catch: (error) => new Error(`Failed to decode credential: ${error}`),\n });\n\n yield* Effect.tryPromise({\n try: () => client.halo.writeCredentials([credentialObj]),\n catch: (error) => new Error(`Failed to write credential: ${error}`),\n });\n\n if (json) {\n yield* Console.log(JSON.stringify({ success: true }, null, 2));\n } else {\n yield* Console.log('Credential added successfully.');\n }\n }).pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n error: 'Invalid credential',\n message: error instanceof Error ? error.message : String(error),\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log('Invalid credential.');\n }\n yield* Effect.fail(error);\n }),\n ),\n );\n});\n\nexport const add = Command.make(\n 'add',\n {\n credential: Args.text({ name: 'credential' }).pipe(\n Args.withDescription('Credential as hex string.'),\n Args.optional,\n ),\n },\n handler,\n).pipe(Command.withDescription('Import credential into HALO.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, Common, FormBuilder, getSpace, printList } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\nimport type { Credential } from '@dxos/client/halo';\nimport { type Key } from '@dxos/echo';\n\nconst mapCredentials = (credentials: Credential[]) => {\n return credentials.map((credential) => ({\n id: credential.id?.toHex() ?? '<unknown>',\n issuer: credential.issuer?.toHex() ?? '<unknown>',\n subject: credential.subject?.id?.toHex() ?? '<unknown>',\n type: credential.subject.assertion['@type'],\n assertion: credential.subject.assertion,\n }));\n};\n\nconst printCredential = (credential: Credential) => {\n const type = credential.subject.assertion['@type'] ?? '<unknown>';\n return FormBuilder.make({ title: type }).pipe(\n FormBuilder.option('id', Option.fromNullable(credential.id?.truncate())),\n FormBuilder.option('issuer', Option.fromNullable(credential.issuer?.truncate())),\n FormBuilder.option('subject', Option.fromNullable(credential.subject?.id?.truncate())),\n FormBuilder.build,\n );\n};\n\nexport const handler = Effect.fn(function* ({\n type,\n spaceId,\n timeout,\n delay,\n}: {\n type: Option.Option<string>;\n spaceId: Option.Option<Key.SpaceId>;\n timeout: number;\n delay: number;\n}) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n let credentials: Credential[];\n\n if (Option.isSome(spaceId)) {\n // If space ID was provided, get credentials from that space.\n const space = yield* getSpace(spaceId.value);\n credentials = yield* Effect.tryPromise(() => space.internal.getCredentials());\n } else {\n // Get credentials from HALO\n const identity = client.halo.identity;\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Profile not initialized' }, null, 2));\n } else {\n yield* Console.log('Profile not initialized.');\n }\n return;\n }\n\n // Wait for at least one credential\n const latch = yield* Effect.makeLatch();\n const subscription = client.halo.credentials.subscribe((creds) => {\n if (creds.length > 0) {\n Effect.runSync(latch.open);\n }\n });\n\n yield* latch.await.pipe(\n Effect.timeout(Duration.millis(timeout)),\n Effect.catchAll(() => Effect.void),\n Effect.ensuring(\n Effect.sync(() => {\n subscription.unsubscribe();\n }),\n ),\n );\n\n // Wait a bit more to ensure all credentials are loaded\n yield* Effect.sleep(Duration.millis(delay));\n\n credentials = client.halo.queryCredentials({ type: Option.getOrUndefined(type) });\n }\n\n if (json) {\n yield* Console.log(JSON.stringify(mapCredentials(credentials), null, 2));\n } else {\n const formatted = credentials.map(printCredential);\n yield* Console.log(printList(formatted));\n }\n});\n\nexport const list = Command.make(\n 'list',\n {\n type: Options.text('type').pipe(Options.withDescription('Filter by credential type.'), Options.optional),\n spaceId: Common.spaceId.pipe(Options.withDescription('Space ID to show credentials from.'), Options.optional),\n timeout: Options.integer('timeout').pipe(\n Options.withDescription('Time in milliseconds to wait for at least one credential before listing.'),\n Options.withDefault(500),\n ),\n delay: Options.integer('delay').pipe(\n Options.withDescription('Delay in milliseconds before listing.'),\n Options.withDefault(250),\n ),\n },\n handler,\n).pipe(Command.withDescription('List HALO credentials.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printIdentity } from '../util';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Identity not initialized' }, null, 2));\n } else {\n yield* Console.log('Identity not initialized.');\n }\n } else {\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityDid: identity.did,\n displayName: identity.profile?.displayName,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printIdentity({ identityDid: identity.did, profile: identity.profile })));\n }\n }\n});\n\nexport const identity = Command.make('identity', {}, handler).pipe(\n Command.withDescription('Get the current identity.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { FormBuilder, print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n const device = client.halo.device;\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityKey: identity?.identityKey.toHex(),\n deviceKey: device?.deviceKey.toHex(),\n },\n null,\n 2,\n ),\n );\n } else {\n const builder = FormBuilder.make({ title: 'HALO Keys' }).pipe(\n FormBuilder.option('identityKey', Option.fromNullable(identity?.identityKey.truncate())),\n FormBuilder.option('deviceKey', Option.fromNullable(device?.deviceKey.truncate())),\n );\n yield* Console.log(print(FormBuilder.build(builder)));\n }\n});\n\nexport const keys = Command.make('keys', {}, handler).pipe(Command.withDescription('Show HALO keys.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nexport const handler = Effect.fn(function* () {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identityService = client.services.services.IdentityService;\n if (!identityService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'IdentityService not found' }, null, 2));\n } else {\n yield* Console.log('IdentityService not found.');\n }\n return;\n }\n\n const result = yield* Effect.tryPromise(() => identityService.createRecoveryCredential({}));\n\n if (json) {\n yield* Console.log(JSON.stringify({ recoveryCode: result.recoveryCode }, null, 2));\n } else {\n yield* Console.log(result.recoveryCode);\n }\n});\n\nexport const seed = Command.make('seed', {}, handler).pipe(\n Command.withDescription('Generate a seedphrase that can be used for identity recovery.'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { print } from '@dxos/cli-util';\nimport { ClientService } from '@dxos/client';\n\nimport { printIdentity } from '../util';\n\nexport const handler = Effect.fn(function* ({ displayName }: { displayName: string }) {\n const { json } = yield* CommandConfig;\n const client = yield* ClientService;\n const identity = client.halo.identity.get();\n if (!identity) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Identity not initialized' }, null, 2));\n } else {\n yield* Console.log('Identity not initialized.');\n }\n return;\n }\n\n const identityService = client.services.services.IdentityService;\n if (!identityService) {\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'IdentityService not found' }, null, 2));\n } else {\n yield* Console.log('IdentityService not found.');\n }\n return;\n }\n\n const updatedIdentity = yield* Effect.tryPromise(() =>\n identityService.updateProfile({\n displayName,\n }),\n );\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n identityDid: updatedIdentity.did,\n displayName: updatedIdentity.profile?.displayName,\n },\n null,\n 2,\n ),\n );\n } else {\n yield* Console.log(print(printIdentity({ identityDid: updatedIdentity.did, profile: updatedIdentity.profile })));\n }\n});\n\nexport const update = Command.make(\n 'update',\n {\n displayName: Options.text('displayName').pipe(Options.withDescription('The display name of the identity.')),\n },\n handler,\n).pipe(Command.withDescription('Update identity profile.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\n\nimport { create } from './create';\nimport { del } from './delete';\nimport { importCommand } from './import';\nimport { inspect } from './inspect';\nimport { list } from './list';\nimport { reset } from './reset';\n\nexport const profile = Command.make('profile').pipe(\n Command.withDescription('Profile commands.'),\n Command.withSubcommands([create, del, importCommand, inspect, list, reset]),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Record from 'effect/Record';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\nimport { trim } from '@dxos/util';\n\nimport { printProfileCreated } from './util';\n\nconst TEMPLATES = {\n default: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge-production.dxos.workers.dev\n `,\n main: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge-main.dxos.workers.dev\n `,\n dev: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: https://edge.dxos.workers.dev\n `,\n local: trim`\n version: 1\n runtime:\n client:\n storage:\n persistent: true\n services:\n edge:\n url: http://localhost:8787\n `,\n} as const;\n\nexport const create = Command.make(\n 'create',\n {\n template: Options.choice('template', Record.keys(TEMPLATES)).pipe(\n Options.withDescription('Template to use'),\n Options.withDefault('default'),\n ),\n name: Options.text('name').pipe(Options.withDescription('Profile name'), Options.optional),\n },\n Effect.fnUntraced(function* ({ template, name }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const profileName = name.pipe(Option.getOrElse(() => template));\n const configPath = getProfileConfigPath(DX_CONFIG, profileName);\n if (yield* fs.exists(configPath)) {\n throw new Error(`Profile ${profileName} already exists`);\n }\n\n yield* fs.makeDirectory(path.dirname(configPath), { recursive: true });\n yield* fs.writeFileString(configPath, TEMPLATES[template]);\n if (json) {\n yield* Console.log(JSON.stringify({ name: profileName, path: configPath }, null, 2));\n } else {\n yield* Console.log(print(printProfileCreated(profileName, configPath)));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FormBuilder } from '@dxos/cli-util';\n\nexport type ProfileInfo = {\n name: string;\n isCurrent: boolean;\n fullPath: string;\n storagePath: string;\n edge?: string;\n};\n\n/**\n * Pretty prints profile creation result with ANSI colors.\n */\nexport const printProfileCreated = (name: string, path: string) =>\n FormBuilder.make({ title: 'Profile created' }).pipe(\n FormBuilder.set('name', name),\n FormBuilder.set('path', path),\n FormBuilder.build,\n );\n\n/**\n * Pretty prints profile deletion result with ANSI colors.\n */\nexport const printProfileDeleted = (name: string) =>\n FormBuilder.make({ title: 'Profile deleted' }).pipe(FormBuilder.set('name', name), FormBuilder.build);\n\n/**\n * Pretty prints profile reset result with ANSI colors.\n */\nexport const printProfileReset = (profile: string) =>\n FormBuilder.make({ title: 'Profile reset' }).pipe(FormBuilder.set('profile', profile), FormBuilder.build);\n\n/**\n * Pretty prints a profile with ANSI colors.\n */\nexport const printProfile = (profile: ProfileInfo) => {\n const title = profile.isCurrent ? `${profile.name} (current)` : profile.name;\n return FormBuilder.make({ title }).pipe(\n FormBuilder.set('fullPath', profile.fullPath),\n FormBuilder.set('storagePath', profile.storagePath),\n FormBuilder.set('edge', profile.edge ?? '<none>'),\n FormBuilder.build,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_CONFIG, getProfileConfigPath } from '@dxos/client-protocol';\n\nimport { printProfileDeleted } from './util';\n\nexport const del = Command.make(\n 'delete',\n {\n name: Options.text('name').pipe(Options.withDescription('Profile name'), Options.optional),\n },\n Effect.fnUntraced(function* ({ name }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const profileName = name.pipe(Option.getOrElse(() => 'default'));\n const configPath = getProfileConfigPath(DX_CONFIG, profileName);\n const pluginsPath = `${DX_CONFIG}/plugins/${profileName}.yml`;\n yield* fs.remove(configPath).pipe(Effect.ignore);\n yield* fs.remove(pluginsPath).pipe(Effect.ignore);\n if (json) {\n yield* Console.log(JSON.stringify({ name: profileName, deleted: true }, null, 2));\n } else {\n yield* Console.log(print(printProfileDeleted(profileName)));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { CommandConfig } from '@dxos/cli-util';\nimport { ConfigService } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport type { Runtime } from '@dxos/protocols/proto/dxos/config';\n\nexport const handler = Effect.fn(function* ({\n file,\n dataDir,\n force,\n}: {\n file: string;\n dataDir: Option.Option<string>;\n force: boolean;\n}) {\n const dataDirValue = Option.getOrUndefined(dataDir);\n const { json, profile } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const config = yield* ConfigService;\n\n const { createLevel, createStorageObjects, importProfileData, decodeProfileArchive } = yield* Effect.promise(\n () => import('@dxos/client-services'),\n );\n\n let storageConfig: Runtime.Client.Storage;\n if (!dataDirValue) {\n if (!force) {\n yield* Console.log(`Will overwrite profile: ${profile}`);\n const confirmed = yield* Prompt.confirm({\n message: `Delete all data? (Profile: ${profile})`,\n initial: false,\n }).pipe(Prompt.run);\n if (!confirmed) {\n return;\n }\n }\n storageConfig = config.values.runtime!.client!.storage!;\n } else {\n const fullPath = path.resolve(dataDirValue);\n yield* Console.log(`Importing into: ${fullPath}`);\n storageConfig = {\n persistent: true,\n dataRoot: fullPath,\n };\n }\n\n if (yield* fs.exists(storageConfig.dataRoot!)) {\n log.error('data directory already exists', { path: storageConfig.dataRoot! });\n if (json) {\n yield* Console.log(JSON.stringify({ error: 'Data directory already exists' }, null, 2));\n } else {\n yield* Console.log('Data directory already exists.');\n }\n return;\n }\n\n const data = yield* fs.readFile(file);\n\n const archive = decodeProfileArchive(data);\n yield* Console.log(`Importing archive with ${archive.storage.length} entries`);\n\n const { storage } = createStorageObjects(storageConfig);\n const level = yield* Effect.tryPromise({\n try: () => createLevel(storageConfig),\n catch: (error) => new Error(`Failed to create level: ${error}`),\n });\n\n yield* Console.log('Beginning profile import...');\n yield* Effect.tryPromise({\n try: () => importProfileData({ storage, level }, archive),\n catch: (error) => new Error(`Failed to import profile data: ${error}`),\n });\n yield* Console.log('Profile import complete');\n\n if (json) {\n yield* Console.log(JSON.stringify({ success: true, profile, entries: archive.storage.length }, null, 2));\n }\n});\n\nexport const importCommand = Command.make(\n 'import',\n {\n file: Options.text('file').pipe(Options.withDescription('Archive filename.'), Options.withAlias('f')),\n dataDir: Options.text('data-dir').pipe(Options.withDescription('Storage directory.'), Options.optional),\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt.')),\n },\n handler,\n).pipe(Command.withDescription('Import profile.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig, FormBuilder, print } from '@dxos/cli-util';\nimport { ProfileArchiveEntryType } from '@dxos/protocols';\nimport { arrayToBuffer } from '@dxos/util';\n\nexport const handler = Effect.fn(function* ({ file, storage }: { file: string; storage: boolean }) {\n const { json } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n\n const { decodeProfileArchive } = yield* Effect.promise(() => import('@dxos/client-services'));\n\n const data = yield* fs.readFile(file);\n\n const archive = decodeProfileArchive(data);\n\n if (json) {\n yield* Console.log(\n JSON.stringify(\n {\n meta: archive.meta,\n ...(storage ? { storage: archive.storage } : {}),\n },\n null,\n 2,\n ),\n );\n } else {\n const builder = FormBuilder.make({ title: 'Profile Archive' }).pipe(\n FormBuilder.when(\n archive.meta,\n FormBuilder.each(Object.entries(archive.meta ?? {}), ([key, value]) => FormBuilder.set(key, String(value))),\n ),\n FormBuilder.build,\n );\n yield* Console.log(print(builder));\n\n if (storage) {\n yield* Console.log('\\nStorage entries:\\n');\n for (const entry of archive.storage) {\n const key =\n typeof entry.key === 'string' ? entry.key : JSON.stringify(arrayToBuffer(entry.key).toString()).slice(1, -1);\n yield* Console.log(` ${ProfileArchiveEntryType[entry.type]} ${key}`);\n }\n }\n }\n});\n\nexport const inspect = Command.make(\n 'inspect',\n {\n file: Options.text('file').pipe(Options.withDescription('Archive filename.'), Options.withAlias('f')),\n storage: Options.boolean('storage', { ifPresent: true }).pipe(Options.withDescription('List storage entries.')),\n },\n handler,\n).pipe(Command.withDescription('Inspect profile archive.'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Path from '@effect/platform/Path';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\nimport * as Yaml from 'yaml';\n\nimport { CommandConfig, printList } from '@dxos/cli-util';\nimport { Config } from '@dxos/client';\nimport { DX_CONFIG, DX_DATA, getProfilePath } from '@dxos/client-protocol';\n\nimport { printProfile } from './util';\n\nexport const list = Command.make(\n 'list',\n {},\n Effect.fnUntraced(function* () {\n const { profile: currentProfile } = yield* CommandConfig;\n const fs = yield* FileSystem.FileSystem;\n const path = yield* Path.Path;\n const profileDir = path.join(DX_CONFIG, 'profile');\n const entries = yield* fs.readDirectory(profileDir);\n const profileFiles = entries.filter((entry) => entry.endsWith('.yml'));\n const profiles = yield* Effect.forEach(profileFiles, (filename) =>\n Effect.gen(function* () {\n const name = filename.slice(0, -4);\n const configPath = path.join(profileDir, filename);\n const configContent = yield* fs\n .readFileString(configPath)\n .pipe(Effect.catchTag('SystemError', () => Effect.succeed('{}')));\n const configValues = Yaml.parse(configContent) ?? {};\n const config = new Config(configValues);\n return {\n name,\n isCurrent: name === currentProfile,\n fullPath: configPath,\n storagePath: getProfilePath(configValues?.runtime?.client?.storage?.dataRoot ?? DX_DATA, name),\n edge: config.values.runtime?.services?.edge?.url,\n };\n }),\n );\n\n const { json } = yield* CommandConfig;\n if (json) {\n yield* Console.log(JSON.stringify(profiles, null, 2));\n } else {\n const formatted = profiles.map(printProfile);\n yield* Console.log(printList(formatted));\n }\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Command from '@effect/cli/Command';\nimport * as Options from '@effect/cli/Options';\nimport * as Prompt from '@effect/cli/Prompt';\nimport * as FileSystem from '@effect/platform/FileSystem';\nimport * as Console from 'effect/Console';\nimport * as Effect from 'effect/Effect';\n\nimport { CommandConfig, print } from '@dxos/cli-util';\nimport { DX_DATA, getProfilePath } from '@dxos/client-protocol';\nimport { ConfigService } from '@dxos/config';\n\nimport { printProfileReset } from './util';\n\nexport const reset = Command.make(\n 'reset',\n {\n force: Options.boolean('force', { ifPresent: true }).pipe(Options.withDescription('Skip confirmation prompt')),\n },\n Effect.fnUntraced(function* ({ force }) {\n const fs = yield* FileSystem.FileSystem;\n const config = yield* ConfigService;\n const { json, profile } = yield* CommandConfig;\n const path = config.values.runtime?.client?.storage?.dataRoot ?? getProfilePath(DX_DATA, profile);\n if (!force) {\n const confirmed = yield* Prompt.confirm({\n message: `Are you sure you want to reset the profile (${profile})?`,\n initial: false,\n });\n if (!confirmed) {\n return;\n }\n }\n\n yield* fs.remove(path, { recursive: true });\n if (json) {\n yield* Console.log(JSON.stringify({ profile, reset: true }, null, 2));\n } else {\n yield* Console.log(print(printProfileReset(profile)));\n }\n }),\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ActivationEvents", "Capability", "Plugin", "AppActivationEvents", "AppPlugin", "Client", "LayerSpecs", "Migrations", "OperationHandler", "SchemaDefs", "meta", "ClientEvents", "Command", "Args", "Command", "Options", "Prompt", "Console", "Effect", "Match", "Option", "CommandConfig", "performRecoveryOAuthFlow", "print", "ClientService", "Invitation", "InvitationEncoder", "Context", "DxContext", "HubHttpClient", "invariant", "ATPROTO_OAUTH_SCOPES", "OAuthProvider", "Duration", "Effect", "FormBuilder", "Invitation", "printIdentity", "identity", "make", "title", "pipe", "set", "identityDid", "profile", "displayName", "build", "TERMINAL_FAILURE_STATES", "Set", "State", "CANCELLED", "TIMEOUT", "ERROR", "EXPIRED", "waitForState", "invitation", "state", "async", "resume", "subscription", "subscribe", "inv", "void", "has", "fail", "Error", "sync", "unsubscribe", "timeout", "minutes", "LOGIN_METHODS", "Command", "input", "Args", "withDescription", "Effect", "CommandConfig", "client", "ClientService", "invariant", "message", "choices", "METHOD_CHOICES", "pipe", "Prompt", "resolvedInput", "INPUT_PROMPT", "identity", "Match", "resolvedMethod", "Console", "stringify", "identityDid", "displayName", "profile", "edgeBaseUrl", "recoveryProof", "performRecoveryOAuthFlow", "provider", "OAuthProvider", "ATPROTO", "scopes", "loginHint", "handle", "hub", "HubHttpClient", "hubUrl", "token", "inlineToken", "DxContext", "default", "email", "tryPromise", "code", "startsWith", "invitation", "InvitationEncoder", "authCode", "text", "Invitation", "run", "waitForState", "halo", "get", "Command", "Options", "Prompt", "FileSystem", "Console", "Effect", "CommandConfig", "DX_DATA", "getProfilePath", "ConfigService", "logout", "make", "force", "boolean", "ifPresent", "pipe", "withDescription", "fnUntraced", "fs", "config", "json", "profile", "path", "values", "runtime", "client", "storage", "dataRoot", "confirmed", "confirm", "message", "initial", "run", "remove", "recursive", "catchIf", "e", "_tag", "reason", "void", "log", "JSON", "stringify", "loggedOut", "account", "make", "pipe", "withDescription", "withSubcommands", "login", "logout", "Command", "Command", "Console", "Effect", "Yaml", "CommandConfig", "ConfigService", "DX_CONFIG", "getProfileConfigPath", "view", "make", "fnUntraced", "config", "json", "profile", "configPath", "log", "JSON", "stringify", "values", "config", "make", "pipe", "withDescription", "withSubcommands", "view", "Command", "Command", "Console", "Effect", "CommandConfig", "print", "ClientService", "DeviceType", "FormBuilder", "Device", "DeviceKind", "DeviceType", "maybeTruncateKey", "key", "truncate", "toHex", "getDeviceTitle", "device", "profile", "label", "platform", "os", "mapDevices", "devices", "truncateKeys", "map", "type", "deviceKey", "kind", "platformVersion", "architecture", "osVersion", "presence", "CURRENT", "PresenceState", "printDevice", "make", "title", "pipe", "set", "build", "printDevices", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "device", "halo", "log", "JSON", "stringify", "error", "deviceKey", "toHex", "profile", "type", "DeviceType", "print", "printDevice", "info", "make", "pipe", "withDescription", "Command", "Console", "Effect", "CommandConfig", "printList", "ClientService", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "devices", "halo", "get", "log", "JSON", "stringify", "mapDevices", "formatted", "printDevices", "printList", "list", "make", "pipe", "withDescription", "Command", "Options", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "label", "json", "CommandConfig", "client", "ClientService", "device", "halo", "log", "JSON", "stringify", "error", "updatedProfile", "profile", "devicesService", "services", "DevicesService", "updatedDevice", "tryPromise", "updateDevice", "deviceKey", "toHex", "print", "printDevice", "update", "make", "text", "pipe", "withDescription", "device", "make", "pipe", "withDescription", "withSubcommands", "info", "list", "update", "Command", "Command", "Console", "Effect", "Option", "CommandConfig", "ClientService", "createEdgeIdentity", "Context", "__dxlog_file", "getStatus", "client", "http", "setIdentity", "status", "tryPromise", "isJson", "stringify", "problems", "problem", "error", "some", "message", "none", "edge", "make", "pipe", "withDescription", "withSubcommands", "status", "Command", "Command", "Args", "Command", "Prompt", "Console", "Effect", "Option", "CommandConfig", "ClientService", "invariant", "schema", "__dxlog_file", "handler", "client", "credentialHex", "credential", "run", "identity", "error", "credentialBytes", "try", "Buffer", "from", "catch", "Error", "verifyError", "codec", "protoType", "fail", "credentialObj", "tryPromise", "json", "success", "stringify", "name", "withDescription", "pipe", "Command", "Options", "Console", "Duration", "Effect", "Option", "CommandConfig", "Common", "FormBuilder", "getSpace", "printList", "ClientService", "mapCredentials", "credentials", "map", "credential", "id", "toHex", "issuer", "subject", "type", "assertion", "printCredential", "make", "title", "pipe", "option", "fromNullable", "truncate", "build", "handler", "fn", "spaceId", "timeout", "delay", "json", "client", "isSome", "space", "value", "tryPromise", "internal", "getCredentials", "identity", "halo", "log", "JSON", "stringify", "error", "latch", "makeLatch", "subscription", "subscribe", "creds", "length", "runSync", "open", "await", "millis", "catchAll", "void", "ensuring", "sync", "unsubscribe", "sleep", "queryCredentials", "getOrUndefined", "formatted", "list", "text", "withDescription", "optional", "integer", "withDefault", "credential", "make", "pipe", "withDescription", "withSubcommands", "add", "list", "Command", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "json", "CommandConfig", "client", "ClientService", "identity", "halo", "get", "log", "JSON", "stringify", "error", "identityDid", "did", "displayName", "profile", "print", "printIdentity", "make", "pipe", "withDescription", "Command", "Console", "Effect", "Option", "CommandConfig", "FormBuilder", "print", "ClientService", "handler", "fn", "json", "client", "identity", "halo", "get", "device", "log", "JSON", "stringify", "identityKey", "toHex", "deviceKey", "builder", "make", "title", "pipe", "option", "fromNullable", "truncate", "build", "keys", "withDescription", "Command", "Console", "Effect", "CommandConfig", "ClientService", "handler", "fn", "json", "client", "identityService", "services", "IdentityService", "log", "JSON", "stringify", "error", "result", "tryPromise", "createRecoveryCredential", "recoveryCode", "seed", "make", "pipe", "withDescription", "Command", "Options", "Console", "Effect", "CommandConfig", "print", "ClientService", "handler", "fn", "displayName", "json", "CommandConfig", "client", "ClientService", "identity", "halo", "get", "log", "JSON", "stringify", "error", "identityService", "services", "IdentityService", "updatedIdentity", "tryPromise", "updateProfile", "identityDid", "did", "profile", "print", "printIdentity", "update", "make", "text", "pipe", "withDescription", "halo", "make", "pipe", "withDescription", "withSubcommands", "credential", "identity", "keys", "seed", "update", "Command", "Command", "Options", "FileSystem", "Path", "Console", "Effect", "Option", "Record", "CommandConfig", "print", "DX_CONFIG", "getProfileConfigPath", "trim", "FormBuilder", "printProfileCreated", "name", "path", "make", "title", "pipe", "set", "build", "printProfileDeleted", "printProfileReset", "profile", "printProfile", "isCurrent", "fullPath", "storagePath", "edge", "TEMPLATES", "default", "trim", "main", "dev", "local", "create", "make", "template", "choice", "keys", "pipe", "withDescription", "withDefault", "name", "text", "optional", "fnUntraced", "json", "CommandConfig", "fs", "FileSystem", "path", "Path", "profileName", "getOrElse", "configPath", "getProfileConfigPath", "DX_CONFIG", "exists", "Error", "makeDirectory", "dirname", "recursive", "writeFileString", "log", "JSON", "stringify", "print", "printProfileCreated", "Command", "Options", "FileSystem", "Console", "Effect", "Option", "CommandConfig", "print", "DX_CONFIG", "getProfileConfigPath", "del", "make", "name", "text", "pipe", "withDescription", "optional", "fnUntraced", "json", "CommandConfig", "fs", "FileSystem", "profileName", "getOrElse", "configPath", "getProfileConfigPath", "DX_CONFIG", "pluginsPath", "remove", "ignore", "log", "JSON", "stringify", "deleted", "print", "printProfileDeleted", "Command", "Options", "Prompt", "FileSystem", "Path", "Console", "Effect", "Option", "CommandConfig", "ConfigService", "log", "__dxlog_file", "handler", "json", "fs", "path", "profile", "config", "createLevel", "createStorageObjects", "storageConfig", "dataDirValue", "confirmed", "initial", "pipe", "fullPath", "resolve", "persistent", "dataRoot", "JSON", "error", "try", "catch", "Error", "importProfileData", "storage", "level", "archive", "success", "entries", "dataDir", "withDescription", "force", "boolean", "Command", "Options", "FileSystem", "Console", "Effect", "CommandConfig", "FormBuilder", "print", "ProfileArchiveEntryType", "arrayToBuffer", "handler", "fn", "file", "storage", "json", "fs", "decodeProfileArchive", "promise", "data", "readFile", "archive", "log", "JSON", "stringify", "meta", "builder", "make", "title", "pipe", "when", "each", "Object", "entries", "key", "value", "set", "String", "build", "entry", "toString", "slice", "type", "inspect", "text", "withDescription", "withAlias", "boolean", "ifPresent", "Command", "FileSystem", "Path", "Console", "Effect", "Yaml", "CommandConfig", "printList", "Config", "DX_CONFIG", "DX_DATA", "getProfilePath", "list", "make", "fnUntraced", "profile", "currentProfile", "CommandConfig", "fs", "FileSystem", "path", "Path", "profileDir", "join", "DX_CONFIG", "entries", "readDirectory", "profileFiles", "filter", "entry", "endsWith", "profiles", "forEach", "filename", "gen", "name", "slice", "configPath", "configContent", "readFileString", "pipe", "catchTag", "succeed", "configValues", "parse", "config", "Config", "isCurrent", "fullPath", "storagePath", "getProfilePath", "runtime", "client", "storage", "dataRoot", "DX_DATA", "edge", "values", "services", "url", "json", "log", "JSON", "stringify", "formatted", "map", "printProfile", "printList", "Command", "Options", "Prompt", "FileSystem", "Console", "Effect", "CommandConfig", "print", "DX_DATA", "getProfilePath", "ConfigService", "reset", "make", "force", "boolean", "ifPresent", "pipe", "withDescription", "fnUntraced", "fs", "FileSystem", "config", "ConfigService", "json", "profile", "CommandConfig", "path", "values", "runtime", "client", "storage", "dataRoot", "getProfilePath", "DX_DATA", "confirmed", "confirm", "message", "initial", "remove", "recursive", "log", "JSON", "stringify", "print", "printProfileReset", "profile", "make", "pipe", "withDescription", "withSubcommands", "create", "del", "importCommand", "inspect", "list", "reset", "ClientPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addCommandModule", "commands", "account", "config", "device", "edge", "halo", "profile", "addOperationHandlerModule", "activate", "OperationHandler", "addModule", "options", "id", "Capability", "getModuleTag", "Client", "activatesOn", "ActivationEvents", "Startup", "firesAfterActivation", "ClientEvents", "ClientReady", "firesBeforeActivation", "AppActivationEvents", "SetupSchema", "SchemaDefs", "SetupMigration", "Migrations", "SetupProcessManager", "LayerSpecs", "make"]
|
|
7
7
|
}
|