@dxos/plugin-client 0.8.4-main.c85a9c8dae → 0.8.4-main.d05673bc65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/lib/browser/{DevicesContainer-46MEG3F5.mjs → DevicesContainer-3N7ANEJ7.mjs} +3 -3
  2. package/dist/lib/browser/{JoinDialog-2RCYK4O5.mjs → JoinDialog-VTTK7NHO.mjs} +3 -3
  3. package/dist/lib/browser/{ProfileContainer-XYRCOQ5I.mjs → ProfileContainer-XV7OXJC2.mjs} +2 -2
  4. package/dist/lib/browser/{RecoveryCodeDialog-EX2CLFND.mjs → RecoveryCodeDialog-WO34OZEJ.mjs} +2 -2
  5. package/dist/lib/browser/{RecoveryCredentialsContainer-RWTEIHOB.mjs → RecoveryCredentialsContainer-G22FSTIX.mjs} +4 -4
  6. package/dist/lib/browser/{RecoveryCredentialsContainer-RWTEIHOB.mjs.map → RecoveryCredentialsContainer-G22FSTIX.mjs.map} +1 -1
  7. package/dist/lib/browser/{app-graph-builder-QJWFLYZE.mjs → app-graph-builder-GGJKFY3X.mjs} +4 -4
  8. package/dist/lib/browser/{app-graph-builder-QJWFLYZE.mjs.map → app-graph-builder-GGJKFY3X.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-DPAXDXMK.mjs → chunk-FVEKZBM7.mjs} +31 -31
  10. package/dist/lib/browser/{chunk-DPAXDXMK.mjs.map → chunk-FVEKZBM7.mjs.map} +1 -1
  11. package/dist/lib/browser/{chunk-4XYOOXAH.mjs → chunk-GSVYEYVS.mjs} +4 -4
  12. package/dist/lib/browser/chunk-HSFDKP5D.mjs +15 -0
  13. package/dist/lib/browser/{chunk-VYX3ROUX.mjs.map → chunk-HSFDKP5D.mjs.map} +1 -1
  14. package/dist/lib/browser/{chunk-N2GMSVDQ.mjs → chunk-JHSBBOCI.mjs} +2 -2
  15. package/dist/lib/browser/{chunk-N2GMSVDQ.mjs.map → chunk-JHSBBOCI.mjs.map} +1 -1
  16. package/dist/lib/browser/cli/index.mjs +35 -27
  17. package/dist/lib/browser/cli/index.mjs.map +3 -3
  18. package/dist/lib/browser/{client-Z25GQ5YC.mjs → client-BXCP3EUE.mjs} +3 -3
  19. package/dist/lib/browser/index.mjs +7 -7
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{migrations-HLHRMOW6.mjs → migrations-GKUA2ARL.mjs} +3 -3
  22. package/dist/lib/browser/{operation-resolver-6QW3BKA5.mjs → operation-resolver-VSWA74RS.mjs} +14 -14
  23. package/dist/lib/browser/operation-resolver-VSWA74RS.mjs.map +7 -0
  24. package/dist/lib/browser/{react-context-E7TAJMDK.mjs → react-context-GZ3T5UON.mjs} +3 -3
  25. package/dist/lib/browser/{react-surface-L5A2LBFE.mjs → react-surface-5VZP34X3.mjs} +9 -9
  26. package/dist/lib/browser/{schema-defs-5WDZWVEI.mjs → schema-defs-KAG6HQMI.mjs} +3 -3
  27. package/dist/lib/browser/types/index.mjs +2 -2
  28. package/dist/lib/node-esm/{DevicesContainer-WQ3DQA45.mjs → DevicesContainer-V7HEUPO7.mjs} +3 -3
  29. package/dist/lib/node-esm/{JoinDialog-KLTNJY5F.mjs → JoinDialog-XVKW4SLT.mjs} +3 -3
  30. package/dist/lib/node-esm/{ProfileContainer-XI425QK5.mjs → ProfileContainer-B5LJ6TMU.mjs} +2 -2
  31. package/dist/lib/node-esm/{RecoveryCodeDialog-AISRNJUM.mjs → RecoveryCodeDialog-YIRGXM7N.mjs} +2 -2
  32. package/dist/lib/node-esm/{RecoveryCredentialsContainer-3TKQRPQK.mjs → RecoveryCredentialsContainer-MVJEFNXX.mjs} +4 -4
  33. package/dist/lib/node-esm/{RecoveryCredentialsContainer-3TKQRPQK.mjs.map → RecoveryCredentialsContainer-MVJEFNXX.mjs.map} +1 -1
  34. package/dist/lib/node-esm/{app-graph-builder-6JD6BZAI.mjs → app-graph-builder-PTNZ46NN.mjs} +4 -4
  35. package/dist/lib/node-esm/{app-graph-builder-6JD6BZAI.mjs.map → app-graph-builder-PTNZ46NN.mjs.map} +1 -1
  36. package/dist/lib/node-esm/{chunk-RGULICLJ.mjs → chunk-BOTJSPCT.mjs} +2 -2
  37. package/dist/lib/node-esm/{chunk-RGULICLJ.mjs.map → chunk-BOTJSPCT.mjs.map} +1 -1
  38. package/dist/lib/node-esm/{chunk-VEUNEDN5.mjs → chunk-DT2ZNOGU.mjs} +31 -31
  39. package/dist/lib/node-esm/{chunk-VEUNEDN5.mjs.map → chunk-DT2ZNOGU.mjs.map} +1 -1
  40. package/dist/lib/node-esm/{chunk-H2CCMM4Z.mjs → chunk-OFJUOKY7.mjs} +4 -4
  41. package/dist/lib/node-esm/chunk-VLNCZYIC.mjs +16 -0
  42. package/dist/lib/node-esm/{chunk-HKSNTZF5.mjs.map → chunk-VLNCZYIC.mjs.map} +1 -1
  43. package/dist/lib/node-esm/cli/index.mjs +35 -27
  44. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  45. package/dist/lib/node-esm/{client-5AIPYSBT.mjs → client-EGZHGRRC.mjs} +3 -3
  46. package/dist/lib/node-esm/index.mjs +7 -7
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/{migrations-O5KG2GGN.mjs → migrations-4NEKCBGU.mjs} +3 -3
  49. package/dist/lib/node-esm/{operation-resolver-GSH7AOTZ.mjs → operation-resolver-4GWB3YZG.mjs} +14 -14
  50. package/dist/lib/node-esm/operation-resolver-4GWB3YZG.mjs.map +7 -0
  51. package/dist/lib/node-esm/{react-context-OMJSBS23.mjs → react-context-T2ORT5CC.mjs} +3 -3
  52. package/dist/lib/node-esm/{react-surface-N3BSPMMX.mjs → react-surface-B65OUZYI.mjs} +9 -9
  53. package/dist/lib/node-esm/{schema-defs-ENOYSDP3.mjs → schema-defs-GXQ47JZN.mjs} +3 -3
  54. package/dist/lib/node-esm/types/index.mjs +2 -2
  55. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  56. package/dist/types/src/cli/commands/profile/create.d.ts +2 -1
  57. package/dist/types/src/cli/commands/profile/create.d.ts.map +1 -1
  58. package/dist/types/src/cli/commands/profile/delete.d.ts +1 -1
  59. package/dist/types/src/cli/commands/profile/delete.d.ts.map +1 -1
  60. package/dist/types/src/cli/commands/profile/list.d.ts.map +1 -1
  61. package/dist/types/src/containers/DevicesContainer/DevicesContainer.stories.d.ts +1 -1
  62. package/dist/types/src/types/schema.d.ts +30 -30
  63. package/dist/types/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +28 -28
  65. package/src/capabilities/app-graph-builder/app-graph-builder.ts +1 -1
  66. package/src/capabilities/operation-resolver/operation-resolver.ts +5 -3
  67. package/src/cli/commands/profile/create.ts +9 -6
  68. package/src/cli/commands/profile/delete.ts +5 -2
  69. package/src/cli/commands/profile/list.ts +13 -11
  70. package/src/constants.ts +3 -3
  71. package/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.tsx +1 -1
  72. package/src/meta.ts +1 -1
  73. package/src/types/capabilities.ts +3 -3
  74. package/src/types/events.ts +5 -5
  75. package/src/types/schema.ts +21 -21
  76. package/dist/lib/browser/chunk-VYX3ROUX.mjs +0 -15
  77. package/dist/lib/browser/operation-resolver-6QW3BKA5.mjs.map +0 -7
  78. package/dist/lib/node-esm/chunk-HKSNTZF5.mjs +0 -16
  79. package/dist/lib/node-esm/operation-resolver-GSH7AOTZ.mjs.map +0 -7
  80. /package/dist/lib/browser/{DevicesContainer-46MEG3F5.mjs.map → DevicesContainer-3N7ANEJ7.mjs.map} +0 -0
  81. /package/dist/lib/browser/{JoinDialog-2RCYK4O5.mjs.map → JoinDialog-VTTK7NHO.mjs.map} +0 -0
  82. /package/dist/lib/browser/{ProfileContainer-XYRCOQ5I.mjs.map → ProfileContainer-XV7OXJC2.mjs.map} +0 -0
  83. /package/dist/lib/browser/{RecoveryCodeDialog-EX2CLFND.mjs.map → RecoveryCodeDialog-WO34OZEJ.mjs.map} +0 -0
  84. /package/dist/lib/browser/{chunk-4XYOOXAH.mjs.map → chunk-GSVYEYVS.mjs.map} +0 -0
  85. /package/dist/lib/browser/{client-Z25GQ5YC.mjs.map → client-BXCP3EUE.mjs.map} +0 -0
  86. /package/dist/lib/browser/{migrations-HLHRMOW6.mjs.map → migrations-GKUA2ARL.mjs.map} +0 -0
  87. /package/dist/lib/browser/{react-context-E7TAJMDK.mjs.map → react-context-GZ3T5UON.mjs.map} +0 -0
  88. /package/dist/lib/browser/{react-surface-L5A2LBFE.mjs.map → react-surface-5VZP34X3.mjs.map} +0 -0
  89. /package/dist/lib/browser/{schema-defs-5WDZWVEI.mjs.map → schema-defs-KAG6HQMI.mjs.map} +0 -0
  90. /package/dist/lib/node-esm/{DevicesContainer-WQ3DQA45.mjs.map → DevicesContainer-V7HEUPO7.mjs.map} +0 -0
  91. /package/dist/lib/node-esm/{JoinDialog-KLTNJY5F.mjs.map → JoinDialog-XVKW4SLT.mjs.map} +0 -0
  92. /package/dist/lib/node-esm/{ProfileContainer-XI425QK5.mjs.map → ProfileContainer-B5LJ6TMU.mjs.map} +0 -0
  93. /package/dist/lib/node-esm/{RecoveryCodeDialog-AISRNJUM.mjs.map → RecoveryCodeDialog-YIRGXM7N.mjs.map} +0 -0
  94. /package/dist/lib/node-esm/{chunk-H2CCMM4Z.mjs.map → chunk-OFJUOKY7.mjs.map} +0 -0
  95. /package/dist/lib/node-esm/{client-5AIPYSBT.mjs.map → client-EGZHGRRC.mjs.map} +0 -0
  96. /package/dist/lib/node-esm/{migrations-O5KG2GGN.mjs.map → migrations-4NEKCBGU.mjs.map} +0 -0
  97. /package/dist/lib/node-esm/{react-context-OMJSBS23.mjs.map → react-context-T2ORT5CC.mjs.map} +0 -0
  98. /package/dist/lib/node-esm/{react-surface-N3BSPMMX.mjs.map → react-surface-B65OUZYI.mjs.map} +0 -0
  99. /package/dist/lib/node-esm/{schema-defs-ENOYSDP3.mjs.map → schema-defs-GXQ47JZN.mjs.map} +0 -0
@@ -2,19 +2,19 @@ import {
2
2
  JOIN_DIALOG,
3
3
  RECOVERY_CODE_DIALOG,
4
4
  RESET_DIALOG
5
- } from "./chunk-VYX3ROUX.mjs";
5
+ } from "./chunk-HSFDKP5D.mjs";
6
6
  import {
7
7
  Account,
8
8
  ClientCapabilities,
9
9
  ClientEvents,
10
10
  ClientOperation
11
- } from "./chunk-DPAXDXMK.mjs";
12
- import "./chunk-N2GMSVDQ.mjs";
11
+ } from "./chunk-FVEKZBM7.mjs";
12
+ import "./chunk-JHSBBOCI.mjs";
13
13
 
14
14
  // src/capabilities/operation-resolver/operation-resolver.ts
15
15
  import * as Effect from "effect/Effect";
16
16
  import { Capabilities, Capability } from "@dxos/app-framework";
17
- import { LayoutOperation } from "@dxos/app-toolkit";
17
+ import { LayoutOperation, getSpacePath } from "@dxos/app-toolkit";
18
18
  import { PublicKey } from "@dxos/client";
19
19
  import { runAndForwardErrors } from "@dxos/effect";
20
20
  import { invariant } from "@dxos/invariant";
@@ -64,11 +64,11 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
64
64
  operation: ClientOperation.ShareIdentity,
65
65
  handler: Effect.fnUntraced(function* () {
66
66
  yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
67
- subject: Account.id
67
+ subject: getSpacePath(Account.id)
68
68
  });
69
69
  yield* Operation.invoke(LayoutOperation.Open, {
70
70
  subject: [
71
- Account.Profile
71
+ `${getSpacePath(Account.id)}/${Account.Profile}`
72
72
  ]
73
73
  });
74
74
  yield* Operation.schedule(ObservabilityOperation.SendEvent, {
@@ -115,7 +115,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
115
115
  const client = yield* Capability.get(ClientCapabilities.Client);
116
116
  invariant(client.services.services.EdgeAgentService, "Missing EdgeAgentService", {
117
117
  F: __dxlog_file,
118
- L: 113,
118
+ L: 115,
119
119
  S: this,
120
120
  A: [
121
121
  "client.services.services.EdgeAgentService",
@@ -136,7 +136,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
136
136
  const client = yield* Capability.get(ClientCapabilities.Client);
137
137
  invariant(client.services.services.IdentityService, "IdentityService not available", {
138
138
  F: __dxlog_file,
139
- L: 127,
139
+ L: 129,
140
140
  S: this,
141
141
  A: [
142
142
  "client.services.services.IdentityService",
@@ -164,7 +164,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
164
164
  const identity = client.halo.identity.get();
165
165
  invariant(identity, "Identity not available", {
166
166
  F: __dxlog_file,
167
- L: 148,
167
+ L: 150,
168
168
  S: this,
169
169
  A: [
170
170
  "identity",
@@ -202,7 +202,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
202
202
  }));
203
203
  invariant(credential, "Credential not available", {
204
204
  F: __dxlog_file,
205
- L: 173,
205
+ L: 175,
206
206
  S: this,
207
207
  A: [
208
208
  "credential",
@@ -213,7 +213,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
213
213
  const algorithm = credential.response.getPublicKeyAlgorithm() === -7 ? "ES256" : "ED25519";
214
214
  invariant(client.services.services.IdentityService, "IdentityService not available", {
215
215
  F: __dxlog_file,
216
- L: 177,
216
+ L: 179,
217
217
  S: this,
218
218
  A: [
219
219
  "client.services.services.IdentityService",
@@ -238,7 +238,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
238
238
  const client = yield* Capability.get(ClientCapabilities.Client);
239
239
  invariant(client.services.services.IdentityService, "IdentityService not available", {
240
240
  F: __dxlog_file,
241
- L: 197,
241
+ L: 199,
242
242
  S: this,
243
243
  A: [
244
244
  "client.services.services.IdentityService",
@@ -277,7 +277,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
277
277
  const client = yield* Capability.get(ClientCapabilities.Client);
278
278
  invariant(client.services.services.IdentityService, "IdentityService not available", {
279
279
  F: __dxlog_file,
280
- L: 236,
280
+ L: 238,
281
281
  S: this,
282
282
  A: [
283
283
  "client.services.services.IdentityService",
@@ -296,4 +296,4 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
296
296
  export {
297
297
  operation_resolver_default as default
298
298
  };
299
- //# sourceMappingURL=operation-resolver-6QW3BKA5.mjs.map
299
+ //# sourceMappingURL=operation-resolver-VSWA74RS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { LayoutOperation, getSpacePath } from '@dxos/app-toolkit';\nimport { PublicKey } from '@dxos/client';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { OperationResolver } from '@dxos/operation';\nimport { Operation } from '@dxos/operation';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { type JoinPanelProps } from '@dxos/shell/react';\n\nimport { JOIN_DIALOG, RECOVERY_CODE_DIALOG, RESET_DIALOG } from '../../constants';\nimport { ClientEvents } from '../../types';\nimport { Account, ClientCapabilities, ClientOperation } from '../../types';\n\ntype OperationResolverOptions = {\n appName?: string;\n};\n\nconst RECOVER_IDENTITY_RPC_TIMEOUT = 20_000;\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* ({ appName = 'Composer' }: OperationResolverOptions = {}) {\n return Capability.contributes(Capabilities.OperationResolver, [\n //\n // CreateIdentity\n //\n OperationResolver.make({\n operation: ClientOperation.CreateIdentity,\n handler: Effect.fnUntraced(function* (profile) {\n const manager = yield* Capability.get(Capabilities.PluginManager);\n const client = yield* Capability.get(ClientCapabilities.Client);\n const data = yield* Effect.promise(() => client.halo.createIdentity(profile));\n yield* Effect.promise(() => runAndForwardErrors(manager.activate(ClientEvents.IdentityCreated)));\n yield* Operation.schedule(ObservabilityOperation.SendEvent, { name: 'identity.create' });\n return data;\n }),\n }),\n\n //\n // JoinIdentity\n //\n OperationResolver.make({\n operation: ClientOperation.JoinIdentity,\n handler: Effect.fnUntraced(function* (data) {\n yield* Operation.invoke(LayoutOperation.UpdateDialog, {\n subject: JOIN_DIALOG,\n blockAlign: 'start',\n props: {\n initialInvitationCode: data.invitationCode,\n initialDisposition: 'accept-halo-invitation',\n },\n });\n }),\n }),\n\n //\n // ShareIdentity\n //\n OperationResolver.make({\n operation: ClientOperation.ShareIdentity,\n handler: Effect.fnUntraced(function* () {\n yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: getSpacePath(Account.id) });\n yield* Operation.invoke(LayoutOperation.Open, {\n subject: [`${getSpacePath(Account.id)}/${Account.Profile}`],\n });\n yield* Operation.schedule(ObservabilityOperation.SendEvent, { name: 'identity.share' });\n }),\n }),\n\n //\n // RecoverIdentity\n //\n OperationResolver.make({\n operation: ClientOperation.RecoverIdentity,\n handler: Effect.fnUntraced(function* () {\n yield* Operation.invoke(LayoutOperation.UpdateDialog, {\n subject: JOIN_DIALOG,\n blockAlign: 'start',\n props: {\n initialDisposition: 'recover-identity',\n } satisfies Partial<JoinPanelProps>,\n });\n }),\n }),\n\n //\n // ResetStorage\n //\n OperationResolver.make({\n operation: ClientOperation.ResetStorage,\n handler: Effect.fnUntraced(function* (data) {\n yield* Operation.invoke(LayoutOperation.UpdateDialog, {\n subject: RESET_DIALOG,\n blockAlign: 'start',\n props: {\n mode: data.mode ?? 'reset storage',\n },\n });\n }),\n }),\n\n //\n // CreateAgent\n //\n OperationResolver.make({\n operation: ClientOperation.CreateAgent,\n handler: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n invariant(client.services.services.EdgeAgentService, 'Missing EdgeAgentService');\n yield* Effect.promise(() =>\n client.services.services.EdgeAgentService!.createAgent(undefined, { timeout: 10_000 }),\n );\n }),\n }),\n\n //\n // CreateRecoveryCode\n //\n OperationResolver.make({\n operation: ClientOperation.CreateRecoveryCode,\n handler: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n invariant(client.services.services.IdentityService, 'IdentityService not available');\n const { recoveryCode } = yield* Effect.promise(() =>\n client.services.services.IdentityService!.createRecoveryCredential({}),\n );\n yield* Operation.invoke(LayoutOperation.UpdateDialog, {\n subject: RECOVERY_CODE_DIALOG,\n blockAlign: 'start',\n type: 'alert',\n props: { code: recoveryCode },\n });\n }),\n }),\n\n //\n // CreatePasskey\n //\n OperationResolver.make({\n operation: ClientOperation.CreatePasskey,\n handler: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const identity = client.halo.identity.get();\n invariant(identity, 'Identity not available');\n\n const lookupKey = PublicKey.random();\n const credential = yield* Effect.promise(() =>\n navigator.credentials.create({\n publicKey: {\n challenge: new Uint8Array(),\n rp: { id: location.hostname, name: appName },\n user: {\n id: lookupKey.asUint8Array() as Uint8Array<ArrayBuffer>,\n name: identity.did,\n displayName: identity.profile?.displayName ?? '',\n },\n pubKeyCredParams: [\n { type: 'public-key', alg: -8 }, // Ed25519 (not yet supported across all browsers)\n { type: 'public-key', alg: -7 }, // ES256\n ],\n authenticatorSelection: {\n residentKey: 'required',\n requireResidentKey: true,\n },\n },\n }),\n );\n\n invariant(credential, 'Credential not available');\n const recoveryKey = PublicKey.from(new Uint8Array((credential as any).response.getPublicKey()));\n const algorithm = (credential as any).response.getPublicKeyAlgorithm() === -7 ? 'ES256' : 'ED25519';\n\n invariant(client.services.services.IdentityService, 'IdentityService not available');\n yield* Effect.promise(() =>\n client.services.services.IdentityService!.createRecoveryCredential({\n data: {\n recoveryKey,\n algorithm,\n lookupKey,\n },\n }),\n );\n }),\n }),\n\n //\n // RedeemPasskey\n //\n OperationResolver.make({\n operation: ClientOperation.RedeemPasskey,\n handler: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n invariant(client.services.services.IdentityService, 'IdentityService not available');\n const { deviceKey, controlFeedKey, challenge } = yield* Effect.promise(() =>\n client.services.services.IdentityService!.requestRecoveryChallenge(),\n );\n const credential = yield* Effect.promise(() =>\n navigator.credentials.get({\n publicKey: {\n challenge: Buffer.from(challenge, 'base64'),\n rpId: location.hostname,\n userVerification: 'required',\n },\n }),\n );\n const lookupKey = PublicKey.from(new Uint8Array((credential as any).response.userHandle));\n yield* Effect.promise(() =>\n client.services.services.IdentityService!.recoverIdentity(\n {\n external: {\n lookupKey,\n deviceKey,\n controlFeedKey,\n signature: Buffer.from((credential as any).response.signature),\n clientDataJson: Buffer.from((credential as any).response.clientDataJSON),\n authenticatorData: Buffer.from((credential as any).response.authenticatorData),\n },\n },\n { timeout: RECOVER_IDENTITY_RPC_TIMEOUT },\n ),\n );\n }),\n }),\n\n //\n // RedeemToken\n //\n OperationResolver.make({\n operation: ClientOperation.RedeemToken,\n handler: Effect.fnUntraced(function* (data) {\n const client = yield* Capability.get(ClientCapabilities.Client);\n invariant(client.services.services.IdentityService, 'IdentityService not available');\n yield* Effect.promise(() =>\n client.services.services.IdentityService!.recoverIdentity(\n { token: data.token },\n { timeout: RECOVER_IDENTITY_RPC_TIMEOUT },\n ),\n );\n }),\n }),\n ]);\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "LayoutOperation", "getSpacePath", "PublicKey", "runAndForwardErrors", "invariant", "OperationResolver", "Operation", "ObservabilityOperation", "RECOVER_IDENTITY_RPC_TIMEOUT", "Capability", "makeModule", "fnUntraced", "appName", "contributes", "Capabilities", "OperationResolver", "make", "operation", "ClientOperation", "CreateIdentity", "handler", "profile", "manager", "get", "PluginManager", "client", "ClientCapabilities", "Client", "data", "promise", "halo", "createIdentity", "runAndForwardErrors", "activate", "ClientEvents", "IdentityCreated", "Operation", "schedule", "ObservabilityOperation", "SendEvent", "name", "JoinIdentity", "invoke", "LayoutOperation", "UpdateDialog", "subject", "JOIN_DIALOG", "blockAlign", "props", "initialInvitationCode", "invitationCode", "initialDisposition", "ShareIdentity", "SwitchWorkspace", "getSpacePath", "Account", "id", "Open", "Profile", "RecoverIdentity", "ResetStorage", "RESET_DIALOG", "mode", "CreateAgent", "invariant", "services", "EdgeAgentService", "createAgent", "undefined", "timeout", "CreateRecoveryCode", "IdentityService", "recoveryCode", "createRecoveryCredential", "RECOVERY_CODE_DIALOG", "type", "code", "CreatePasskey", "identity", "lookupKey", "PublicKey", "random", "credential", "navigator", "credentials", "create", "publicKey", "challenge", "Uint8Array", "rp", "location", "hostname", "user", "asUint8Array", "did", "displayName", "pubKeyCredParams", "alg", "authenticatorSelection", "residentKey", "requireResidentKey", "recoveryKey", "from", "response", "getPublicKey", "algorithm", "getPublicKeyAlgorithm", "RedeemPasskey", "deviceKey", "controlFeedKey", "requestRecoveryChallenge", "Buffer", "rpId", "userVerification", "userHandle", "recoverIdentity", "external", "signature", "clientDataJson", "clientDataJSON", "authenticatorData", "RedeemToken", "token"]
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ClientCapabilities
3
- } from "./chunk-DPAXDXMK.mjs";
3
+ } from "./chunk-FVEKZBM7.mjs";
4
4
  import {
5
5
  meta
6
- } from "./chunk-N2GMSVDQ.mjs";
6
+ } from "./chunk-JHSBBOCI.mjs";
7
7
 
8
8
  // src/capabilities/react-context/react-context.tsx
9
9
  import * as Effect from "effect/Effect";
@@ -23,4 +23,4 @@ var react_context_default = Capability.makeModule(() => Effect.succeed(Capabilit
23
23
  export {
24
24
  react_context_default as default
25
25
  };
26
- //# sourceMappingURL=react-context-E7TAJMDK.mjs.map
26
+ //# sourceMappingURL=react-context-GZ3T5UON.mjs.map
@@ -2,11 +2,11 @@ import {
2
2
  JOIN_DIALOG,
3
3
  RECOVERY_CODE_DIALOG,
4
4
  RESET_DIALOG
5
- } from "./chunk-VYX3ROUX.mjs";
5
+ } from "./chunk-HSFDKP5D.mjs";
6
6
  import {
7
7
  Account
8
- } from "./chunk-DPAXDXMK.mjs";
9
- import "./chunk-N2GMSVDQ.mjs";
8
+ } from "./chunk-FVEKZBM7.mjs";
9
+ import "./chunk-JHSBBOCI.mjs";
10
10
 
11
11
  // src/capabilities/react-surface/react-surface.tsx
12
12
  import * as Effect from "effect/Effect";
@@ -16,11 +16,11 @@ import { Surface } from "@dxos/app-framework/ui";
16
16
 
17
17
  // src/containers/index.ts
18
18
  import { lazy } from "react";
19
- var DevicesContainer = lazy(() => import("./DevicesContainer-46MEG3F5.mjs"));
20
- var JoinDialog = lazy(() => import("./JoinDialog-2RCYK4O5.mjs"));
21
- var ProfileContainer = lazy(() => import("./ProfileContainer-XYRCOQ5I.mjs"));
22
- var RecoveryCodeDialog = lazy(() => import("./RecoveryCodeDialog-EX2CLFND.mjs"));
23
- var RecoveryCredentialsContainer = lazy(() => import("./RecoveryCredentialsContainer-RWTEIHOB.mjs"));
19
+ var DevicesContainer = lazy(() => import("./DevicesContainer-3N7ANEJ7.mjs"));
20
+ var JoinDialog = lazy(() => import("./JoinDialog-VTTK7NHO.mjs"));
21
+ var ProfileContainer = lazy(() => import("./ProfileContainer-XV7OXJC2.mjs"));
22
+ var RecoveryCodeDialog = lazy(() => import("./RecoveryCodeDialog-WO34OZEJ.mjs"));
23
+ var RecoveryCredentialsContainer = lazy(() => import("./RecoveryCredentialsContainer-G22FSTIX.mjs"));
24
24
  var ResetDialog = lazy(() => import("./ResetDialog-W24FOWBQ.mjs"));
25
25
 
26
26
  // src/capabilities/react-surface/react-surface.tsx
@@ -74,4 +74,4 @@ var react_surface_default = Capability.makeModule(Effect.fnUntraced(function* ({
74
74
  export {
75
75
  react_surface_default as default
76
76
  };
77
- //# sourceMappingURL=react-surface-L5A2LBFE.mjs.map
77
+ //# sourceMappingURL=react-surface-5VZP34X3.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ClientCapabilities
3
- } from "./chunk-DPAXDXMK.mjs";
4
- import "./chunk-N2GMSVDQ.mjs";
3
+ } from "./chunk-FVEKZBM7.mjs";
4
+ import "./chunk-JHSBBOCI.mjs";
5
5
 
6
6
  // src/capabilities/schema-defs/schema-defs.ts
7
7
  import * as Effect from "effect/Effect";
@@ -25,4 +25,4 @@ var schema_defs_default = Capability.makeModule(Effect.fnUntraced(function* () {
25
25
  export {
26
26
  schema_defs_default as default
27
27
  };
28
- //# sourceMappingURL=schema-defs-5WDZWVEI.mjs.map
28
+ //# sourceMappingURL=schema-defs-KAG6HQMI.mjs.map
@@ -4,8 +4,8 @@ import {
4
4
  ClientCapabilities,
5
5
  ClientEvents,
6
6
  ClientOperation
7
- } from "../chunk-DPAXDXMK.mjs";
8
- import "../chunk-N2GMSVDQ.mjs";
7
+ } from "../chunk-FVEKZBM7.mjs";
8
+ import "../chunk-JHSBBOCI.mjs";
9
9
  export {
10
10
  Account,
11
11
  ClientAction,
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientOperation
4
- } from "./chunk-VEUNEDN5.mjs";
4
+ } from "./chunk-DT2ZNOGU.mjs";
5
5
  import {
6
6
  meta
7
- } from "./chunk-RGULICLJ.mjs";
7
+ } from "./chunk-BOTJSPCT.mjs";
8
8
 
9
9
  // src/containers/DevicesContainer/DevicesContainer.tsx
10
10
  import React, { useCallback, useEffect, useState } from "react";
@@ -266,4 +266,4 @@ var DevicesContainer_default = DevicesContainer;
266
266
  export {
267
267
  DevicesContainer_default as default
268
268
  };
269
- //# sourceMappingURL=DevicesContainer-WQ3DQA45.mjs.map
269
+ //# sourceMappingURL=DevicesContainer-V7HEUPO7.mjs.map
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientOperation
4
- } from "./chunk-VEUNEDN5.mjs";
4
+ } from "./chunk-DT2ZNOGU.mjs";
5
5
  import {
6
6
  meta
7
- } from "./chunk-RGULICLJ.mjs";
7
+ } from "./chunk-BOTJSPCT.mjs";
8
8
 
9
9
  // src/containers/JoinDialog/JoinDialog.tsx
10
10
  import React, { useCallback } from "react";
@@ -57,4 +57,4 @@ var JoinDialog_default = JoinDialog;
57
57
  export {
58
58
  JoinDialog_default as default
59
59
  };
60
- //# sourceMappingURL=JoinDialog-KLTNJY5F.mjs.map
60
+ //# sourceMappingURL=JoinDialog-XVKW4SLT.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  meta
4
- } from "./chunk-RGULICLJ.mjs";
4
+ } from "./chunk-BOTJSPCT.mjs";
5
5
 
6
6
  // src/containers/ProfileContainer/ProfileContainer.tsx
7
7
  import * as Schema from "effect/Schema";
@@ -169,4 +169,4 @@ var ProfileContainer_default = ProfileContainer;
169
169
  export {
170
170
  ProfileContainer_default as default
171
171
  };
172
- //# sourceMappingURL=ProfileContainer-XI425QK5.mjs.map
172
+ //# sourceMappingURL=ProfileContainer-B5LJ6TMU.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  meta
4
- } from "./chunk-RGULICLJ.mjs";
4
+ } from "./chunk-BOTJSPCT.mjs";
5
5
 
6
6
  // src/containers/RecoveryCodeDialog/RecoveryCodeDialog.tsx
7
7
  import React, { useCallback, useState } from "react";
@@ -58,4 +58,4 @@ export {
58
58
  RecoveryCodeDialog,
59
59
  RecoveryCodeDialog_default as default
60
60
  };
61
- //# sourceMappingURL=RecoveryCodeDialog-AISRNJUM.mjs.map
61
+ //# sourceMappingURL=RecoveryCodeDialog-YIRGXM7N.mjs.map
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientOperation
4
- } from "./chunk-VEUNEDN5.mjs";
4
+ } from "./chunk-DT2ZNOGU.mjs";
5
5
  import {
6
6
  meta
7
- } from "./chunk-RGULICLJ.mjs";
7
+ } from "./chunk-BOTJSPCT.mjs";
8
8
 
9
9
  // src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.tsx
10
10
  import React from "react";
@@ -12,7 +12,7 @@ import { useOperationInvoker } from "@dxos/app-framework/ui";
12
12
  import { useCredentials } from "@dxos/react-client/halo";
13
13
  import { Icon, IconButton, List, ListItem, Message, useTranslation } from "@dxos/react-ui";
14
14
  import { Settings } from "@dxos/react-ui-form";
15
- var MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
15
+ var MANAGE_CREDENTIALS_DIALOG = `${meta.id}.ManageCredentialsDialog`;
16
16
  var RecoveryCredentialsContainer = () => {
17
17
  const { t } = useTranslation(meta.id);
18
18
  const { invokePromise } = useOperationInvoker();
@@ -55,4 +55,4 @@ var RecoveryCredentialsContainer_default = RecoveryCredentialsContainer;
55
55
  export {
56
56
  RecoveryCredentialsContainer_default as default
57
57
  };
58
- //# sourceMappingURL=RecoveryCredentialsContainer-3TKQRPQK.mjs.map
58
+ //# sourceMappingURL=RecoveryCredentialsContainer-MVJEFNXX.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.tsx", "../../../src/containers/RecoveryCredentialsContainer/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { useCredentials } from '@dxos/react-client/halo';\nimport { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\nimport { ClientOperation } from '../../types';\n\nexport const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;\n\nexport const RecoveryCredentialsContainer = () => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const credentials = useCredentials();\n const recoveryCredentials = credentials.filter(\n (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',\n );\n\n return (\n <Settings.Root>\n <Settings.Section title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>\n <Settings.Group>\n <Settings.Item title={t('create passkey label')} description={t('create passkey description')}>\n <IconButton\n label={t('create passkey label')}\n icon='ph--key--duotone'\n variant='primary'\n onClick={() => invokePromise(ClientOperation.CreatePasskey)}\n />\n </Settings.Item>\n <Settings.Item title={t('create recovery code label')} description={t('create recovery code description')}>\n <IconButton\n label={t('create recovery code label')}\n icon='ph--receipt--duotone'\n variant='default'\n onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}\n />\n </Settings.Item>\n </Settings.Group>\n </Settings.Section>\n <Settings.Section title={t('credentials list label')}>\n {recoveryCredentials.length < 1 ? (\n <Message.Root valence='error'>\n <Message.Title icon='ph--shield-warning--duotone'>{t('no credentials title')}</Message.Title>\n <Message.Content>{t('no credentials message')}</Message.Content>\n </Message.Root>\n ) : (\n <List>\n {recoveryCredentials.map((credential) => (\n <ListItem.Root key={credential.id?.toHex()}>\n <ListItem.Endcap>\n <Icon icon='ph--key--regular' />\n </ListItem.Endcap>\n <ListItem.Heading>{credential.issuanceDate.toLocaleString()}</ListItem.Heading>\n </ListItem.Root>\n ))}\n </List>\n )}\n </Settings.Section>\n </Settings.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RecoveryCredentialsContainer } from './RecoveryCredentialsContainer';\n\nexport default RecoveryCredentialsContainer;\n"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { useCredentials } from '@dxos/react-client/halo';\nimport { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';\nimport { Settings } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\nimport { ClientOperation } from '../../types';\n\nexport const MANAGE_CREDENTIALS_DIALOG = `${meta.id}.ManageCredentialsDialog`;\n\nexport const RecoveryCredentialsContainer = () => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const credentials = useCredentials();\n const recoveryCredentials = credentials.filter(\n (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',\n );\n\n return (\n <Settings.Root>\n <Settings.Section title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>\n <Settings.Group>\n <Settings.Item title={t('create passkey label')} description={t('create passkey description')}>\n <IconButton\n label={t('create passkey label')}\n icon='ph--key--duotone'\n variant='primary'\n onClick={() => invokePromise(ClientOperation.CreatePasskey)}\n />\n </Settings.Item>\n <Settings.Item title={t('create recovery code label')} description={t('create recovery code description')}>\n <IconButton\n label={t('create recovery code label')}\n icon='ph--receipt--duotone'\n variant='default'\n onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}\n />\n </Settings.Item>\n </Settings.Group>\n </Settings.Section>\n <Settings.Section title={t('credentials list label')}>\n {recoveryCredentials.length < 1 ? (\n <Message.Root valence='error'>\n <Message.Title icon='ph--shield-warning--duotone'>{t('no credentials title')}</Message.Title>\n <Message.Content>{t('no credentials message')}</Message.Content>\n </Message.Root>\n ) : (\n <List>\n {recoveryCredentials.map((credential) => (\n <ListItem.Root key={credential.id?.toHex()}>\n <ListItem.Endcap>\n <Icon icon='ph--key--regular' />\n </ListItem.Endcap>\n <ListItem.Heading>{credential.issuanceDate.toLocaleString()}</ListItem.Heading>\n </ListItem.Root>\n ))}\n </List>\n )}\n </Settings.Section>\n </Settings.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RecoveryCredentialsContainer } from './RecoveryCredentialsContainer';\n\nexport default RecoveryCredentialsContainer;\n"],
5
5
  "mappings": ";;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,2BAA2B;AACpC,SAASC,sBAAsB;AAC/B,SAASC,MAAMC,YAAYC,MAAMC,UAAUC,SAASC,sBAAsB;AAC1E,SAASC,gBAAgB;AAKlB,IAAMC,4BAA4B,GAAGC,KAAKC,EAAE;AAE5C,IAAMC,+BAA+B,MAAA;AAC1C,QAAM,EAAEC,EAAC,IAAKC,eAAeJ,KAAKC,EAAE;AACpC,QAAM,EAAEI,cAAa,IAAKC,oBAAAA;AAC1B,QAAMC,cAAcC,eAAAA;AACpB,QAAMC,sBAAsBF,YAAYG,OACtC,CAACC,eAAeA,WAAWC,QAAQC,UAAU,OAAA,MAAa,wCAAA;AAG5D,SACE,sBAAA,cAACC,SAASC,MAAI,MACZ,sBAAA,cAACD,SAASE,SAAO;IAACC,OAAOd,EAAE,6BAAA;IAAgCe,aAAaf,EAAE,mCAAA;KACxE,sBAAA,cAACW,SAASK,OAAK,MACb,sBAAA,cAACL,SAASM,MAAI;IAACH,OAAOd,EAAE,sBAAA;IAAyBe,aAAaf,EAAE,4BAAA;KAC9D,sBAAA,cAACkB,YAAAA;IACCC,OAAOnB,EAAE,sBAAA;IACToB,MAAK;IACLC,SAAQ;IACRC,SAAS,MAAMpB,cAAcqB,gBAAgBC,aAAa;OAG9D,sBAAA,cAACb,SAASM,MAAI;IAACH,OAAOd,EAAE,4BAAA;IAA+Be,aAAaf,EAAE,kCAAA;KACpE,sBAAA,cAACkB,YAAAA;IACCC,OAAOnB,EAAE,4BAAA;IACToB,MAAK;IACLC,SAAQ;IACRC,SAAS,MAAMpB,cAAcqB,gBAAgBE,kBAAkB;SAKvE,sBAAA,cAACd,SAASE,SAAO;IAACC,OAAOd,EAAE,wBAAA;KACxBM,oBAAoBoB,SAAS,IAC5B,sBAAA,cAACC,QAAQf,MAAI;IAACgB,SAAQ;KACpB,sBAAA,cAACD,QAAQE,OAAK;IAACT,MAAK;KAA+BpB,EAAE,sBAAA,CAAA,GACrD,sBAAA,cAAC2B,QAAQG,SAAO,MAAE9B,EAAE,wBAAA,CAAA,CAAA,IAGtB,sBAAA,cAAC+B,MAAAA,MACEzB,oBAAoB0B,IAAI,CAACxB,eACxB,sBAAA,cAACyB,SAASrB,MAAI;IAACsB,KAAK1B,WAAWV,IAAIqC,MAAAA;KACjC,sBAAA,cAACF,SAASG,QAAM,MACd,sBAAA,cAACC,MAAAA;IAAKjB,MAAK;OAEb,sBAAA,cAACa,SAASK,SAAO,MAAE9B,WAAW+B,aAAaC,eAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAQzE;;;AC7DA,IAAA,uCAAeC;",
6
6
  "names": ["React", "useOperationInvoker", "useCredentials", "Icon", "IconButton", "List", "ListItem", "Message", "useTranslation", "Settings", "MANAGE_CREDENTIALS_DIALOG", "meta", "id", "RecoveryCredentialsContainer", "t", "useTranslation", "invokePromise", "useOperationInvoker", "credentials", "useCredentials", "recoveryCredentials", "filter", "credential", "subject", "assertion", "Settings", "Root", "Section", "title", "description", "Group", "Item", "IconButton", "label", "icon", "variant", "onClick", "ClientOperation", "CreatePasskey", "CreateRecoveryCode", "length", "Message", "valence", "Title", "Content", "List", "map", "ListItem", "key", "toHex", "Endcap", "Icon", "Heading", "issuanceDate", "toLocaleString", "RecoveryCredentialsContainer"]
7
7
  }
@@ -3,10 +3,10 @@ import {
3
3
  Account,
4
4
  ClientCapabilities,
5
5
  ClientOperation
6
- } from "./chunk-VEUNEDN5.mjs";
6
+ } from "./chunk-DT2ZNOGU.mjs";
7
7
  import {
8
8
  meta
9
- } from "./chunk-RGULICLJ.mjs";
9
+ } from "./chunk-BOTJSPCT.mjs";
10
10
 
11
11
  // src/capabilities/app-graph-builder/app-graph-builder.ts
12
12
  import * as Effect from "effect/Effect";
@@ -21,7 +21,7 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
21
21
  match: NodeMatcher.whenRoot,
22
22
  actions: () => Effect.succeed([
23
23
  {
24
- id: `${meta.id}/open-user-account`,
24
+ id: `${meta.id}.open-user-account`,
25
25
  data: () => Operation.invoke(ClientOperation.ShareIdentity),
26
26
  properties: {
27
27
  label: [
@@ -119,4 +119,4 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
119
119
  export {
120
120
  app_graph_builder_default as default
121
121
  };
122
- //# sourceMappingURL=app-graph-builder-6JD6BZAI.mjs.map
122
+ //# sourceMappingURL=app-graph-builder-PTNZ46NN.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/operation';\nimport { CreateAtom, GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { ConnectionState } from '@dxos/react-client/mesh';\n\nimport { meta } from '../../meta';\nimport { Account, ClientCapabilities, ClientOperation } from '../../types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* GraphBuilder.createExtension({\n id: meta.id,\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: `${meta.id}/open-user-account`,\n data: () => Operation.invoke(ClientOperation.ShareIdentity),\n properties: {\n label: ['open user account label', { ns: meta.id }],\n icon: 'ph--user--regular',\n disposition: 'menu',\n keyBinding: {\n macos: 'meta+shift+.',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'alt+shift+.',\n linux: 'alt+shift+>',\n },\n },\n },\n ]),\n connector: Effect.fnUntraced(function* (node, get) {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const identity = get(CreateAtom.fromObservable(client.halo.identity));\n const status = get(CreateAtom.fromObservable(client.mesh.networkStatus));\n\n return [\n {\n id: Account.id,\n type: meta.id,\n properties: {\n label: ['account label', { ns: meta.id }],\n icon: 'ph--user--regular',\n disposition: 'user-account',\n testId: 'clientPlugin.account',\n // NOTE: This currently needs to be the identity key because the fallback is generated from hex.\n userId: identity?.identityKey.toHex(),\n hue: identity?.profile?.data?.hue,\n emoji: identity?.profile?.data?.emoji,\n status: status.swarm === ConnectionState.OFFLINE ? 'error' : 'active',\n },\n nodes: [\n {\n id: Account.Profile,\n data: Account.Profile,\n type: meta.id,\n properties: {\n label: ['profile label', { ns: meta.id }],\n icon: 'ph--user--regular',\n },\n },\n {\n id: Account.Devices,\n data: Account.Devices,\n type: meta.id,\n properties: {\n label: ['devices label', { ns: meta.id }],\n icon: 'ph--devices--regular',\n testId: 'clientPlugin.devices',\n },\n },\n {\n id: Account.Security,\n data: Account.Security,\n type: meta.id,\n properties: {\n label: ['security label', { ns: meta.id }],\n icon: 'ph--key--regular',\n },\n },\n ],\n },\n ];\n }),\n });\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/operation';\nimport { CreateAtom, GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { ConnectionState } from '@dxos/react-client/mesh';\n\nimport { meta } from '../../meta';\nimport { Account, ClientCapabilities, ClientOperation } from '../../types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* GraphBuilder.createExtension({\n id: meta.id,\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: `${meta.id}.open-user-account`,\n data: () => Operation.invoke(ClientOperation.ShareIdentity),\n properties: {\n label: ['open user account label', { ns: meta.id }],\n icon: 'ph--user--regular',\n disposition: 'menu',\n keyBinding: {\n macos: 'meta+shift+.',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'alt+shift+.',\n linux: 'alt+shift+>',\n },\n },\n },\n ]),\n connector: Effect.fnUntraced(function* (node, get) {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const identity = get(CreateAtom.fromObservable(client.halo.identity));\n const status = get(CreateAtom.fromObservable(client.mesh.networkStatus));\n\n return [\n {\n id: Account.id,\n type: meta.id,\n properties: {\n label: ['account label', { ns: meta.id }],\n icon: 'ph--user--regular',\n disposition: 'user-account',\n testId: 'clientPlugin.account',\n // NOTE: This currently needs to be the identity key because the fallback is generated from hex.\n userId: identity?.identityKey.toHex(),\n hue: identity?.profile?.data?.hue,\n emoji: identity?.profile?.data?.emoji,\n status: status.swarm === ConnectionState.OFFLINE ? 'error' : 'active',\n },\n nodes: [\n {\n id: Account.Profile,\n data: Account.Profile,\n type: meta.id,\n properties: {\n label: ['profile label', { ns: meta.id }],\n icon: 'ph--user--regular',\n },\n },\n {\n id: Account.Devices,\n data: Account.Devices,\n type: meta.id,\n properties: {\n label: ['devices label', { ns: meta.id }],\n icon: 'ph--devices--regular',\n testId: 'clientPlugin.devices',\n },\n },\n {\n id: Account.Security,\n data: Account.Security,\n type: meta.id,\n properties: {\n label: ['security label', { ns: meta.id }],\n icon: 'ph--key--regular',\n },\n },\n ],\n },\n ];\n }),\n });\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
5
  "mappings": ";;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,YAAYC,cAAcC,mBAAmB;AACtD,SAASC,uBAAuB;AAKhC,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAOC,aAAaC,gBAAgB;IACrDC,IAAIC,KAAKD;IACTE,OAAOC,YAAYC;IACnBC,SAAS,MACAC,eAAQ;MACb;QACEN,IAAI,GAAGC,KAAKD,EAAE;QACdO,MAAM,MAAMC,UAAUC,OAAOC,gBAAgBC,aAAa;QAC1DC,YAAY;UACVC,OAAO;YAAC;YAA2B;cAAEC,IAAIb,KAAKD;YAAG;;UACjDe,MAAM;UACNC,aAAa;UACbC,YAAY;YACVC,OAAO;;YAEPC,SAAS;YACTC,OAAO;UACT;QACF;MACF;KACD;IACHC,WAAkBzB,kBAAW,WAAW0B,MAAMC,KAAG;AAC/C,YAAMC,SAAS,OAAO9B,WAAW6B,IAAIE,mBAAmBC,MAAM;AAC9D,YAAMC,WAAWJ,IAAIK,WAAWC,eAAeL,OAAOM,KAAKH,QAAQ,CAAA;AACnE,YAAMI,SAASR,IAAIK,WAAWC,eAAeL,OAAOQ,KAAKC,aAAa,CAAA;AAEtE,aAAO;QACL;UACEjC,IAAIkC,QAAQlC;UACZmC,MAAMlC,KAAKD;UACXY,YAAY;YACVC,OAAO;cAAC;cAAiB;gBAAEC,IAAIb,KAAKD;cAAG;;YACvCe,MAAM;YACNC,aAAa;YACboB,QAAQ;;YAERC,QAAQV,UAAUW,YAAYC,MAAAA;YAC9BC,KAAKb,UAAUc,SAASlC,MAAMiC;YAC9BE,OAAOf,UAAUc,SAASlC,MAAMmC;YAChCX,QAAQA,OAAOY,UAAUC,gBAAgBC,UAAU,UAAU;UAC/D;UACAC,OAAO;YACL;cACE9C,IAAIkC,QAAQa;cACZxC,MAAM2B,QAAQa;cACdZ,MAAMlC,KAAKD;cACXY,YAAY;gBACVC,OAAO;kBAAC;kBAAiB;oBAAEC,IAAIb,KAAKD;kBAAG;;gBACvCe,MAAM;cACR;YACF;YACA;cACEf,IAAIkC,QAAQc;cACZzC,MAAM2B,QAAQc;cACdb,MAAMlC,KAAKD;cACXY,YAAY;gBACVC,OAAO;kBAAC;kBAAiB;oBAAEC,IAAIb,KAAKD;kBAAG;;gBACvCe,MAAM;gBACNqB,QAAQ;cACV;YACF;YACA;cACEpC,IAAIkC,QAAQe;cACZ1C,MAAM2B,QAAQe;cACdd,MAAMlC,KAAKD;cACXY,YAAY;gBACVC,OAAO;kBAAC;kBAAkB;oBAAEC,IAAIb,KAAKD;kBAAG;;gBACxCe,MAAM;cACR;YACF;;QAEJ;;IAEJ,CAAA;EACF,CAAA;AAEA,SAAOrB,WAAWwD,YAAYC,gBAAgBC,iBAAiBvD,UAAAA;AACjE,CAAA,CAAA;",
6
6
  "names": ["Effect", "Capability", "AppCapabilities", "Operation", "CreateAtom", "GraphBuilder", "NodeMatcher", "ConnectionState", "Capability", "makeModule", "fnUntraced", "extensions", "GraphBuilder", "createExtension", "id", "meta", "match", "NodeMatcher", "whenRoot", "actions", "succeed", "data", "Operation", "invoke", "ClientOperation", "ShareIdentity", "properties", "label", "ns", "icon", "disposition", "keyBinding", "macos", "windows", "linux", "connector", "node", "get", "client", "ClientCapabilities", "Client", "identity", "CreateAtom", "fromObservable", "halo", "status", "mesh", "networkStatus", "Account", "type", "testId", "userId", "identityKey", "toHex", "hue", "profile", "emoji", "swarm", "ConnectionState", "OFFLINE", "nodes", "Profile", "Devices", "Security", "contributes", "AppCapabilities", "AppGraphBuilder"]
7
7
  }
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
3
3
  // src/meta.ts
4
4
  import { trim } from "@dxos/util";
5
5
  var meta = {
6
- id: "dxos.org/plugin/client",
6
+ id: "org.dxos.plugin.client",
7
7
  name: "Client",
8
8
  description: trim`
9
9
  Core client connectivity and peer-to-peer networking infrastructure.
@@ -14,4 +14,4 @@ var meta = {
14
14
  export {
15
15
  meta
16
16
  };
17
- //# sourceMappingURL=chunk-RGULICLJ.mjs.map
17
+ //# sourceMappingURL=chunk-BOTJSPCT.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/client',\n name: 'Client',\n description: trim`\n Core client connectivity and peer-to-peer networking infrastructure.\n Manages identity, authentication, and real-time synchronization across devices.\n `,\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.client',\n name: 'Client',\n description: trim`\n Core client connectivity and peer-to-peer networking infrastructure.\n Manages identity, authentication, and real-time synchronization across devices.\n `,\n};\n"],
5
5
  "mappings": ";;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;AAIf;",
6
6
  "names": ["trim", "meta", "id", "name", "description", "trim"]
7
7
  }