@dxos/plugin-client 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.14.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/Account.mjs +29 -10
- package/dist/lib/Account.mjs.map +1 -1
- package/dist/lib/CliLogin.mjs +78 -0
- package/dist/lib/CliLogin.mjs.map +1 -0
- package/dist/lib/ClientCapabilities.mjs +25 -1
- package/dist/lib/ClientCapabilities.mjs.map +1 -1
- package/dist/lib/ClientEvents.mjs +7 -3
- package/dist/lib/ClientEvents.mjs.map +1 -1
- package/dist/lib/{chunk-definitions.mjs → ClientOperation.mjs} +11 -7
- package/dist/lib/ClientOperation.mjs.map +1 -0
- package/dist/lib/ClientOptions.mjs.map +1 -1
- package/dist/lib/PasskeyError.mjs +69 -12
- package/dist/lib/PasskeyError.mjs.map +1 -1
- package/dist/lib/capabilities.browser.mjs +134 -0
- package/dist/lib/capabilities.browser.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +47 -10
- package/dist/lib/capabilities.mjs.map +1 -1
- package/dist/lib/capabilities.node.mjs +40 -7
- package/dist/lib/capabilities.node.mjs.map +1 -1
- package/dist/lib/capabilities.tauri.mjs +134 -0
- package/dist/lib/capabilities.tauri.mjs.map +1 -0
- package/dist/lib/capabilities.workerd.mjs +24 -4
- package/dist/lib/capabilities.workerd.mjs.map +1 -1
- package/dist/lib/chunk-AccountContainer.mjs +53 -41
- package/dist/lib/chunk-AccountContainer.mjs.map +1 -1
- package/dist/lib/chunk-CliLoginDialog.mjs +146 -0
- package/dist/lib/chunk-CliLoginDialog.mjs.map +1 -0
- package/dist/lib/chunk-ContactPickerContainer.mjs +120 -0
- package/dist/lib/chunk-ContactPickerContainer.mjs.map +1 -0
- package/dist/lib/chunk-ContactsContainer.mjs +53 -0
- package/dist/lib/chunk-ContactsContainer.mjs.map +1 -0
- package/dist/lib/chunk-DevicesContainer.mjs +50 -114
- package/dist/lib/chunk-DevicesContainer.mjs.map +1 -1
- package/dist/lib/chunk-HaloServices.mjs +28 -0
- package/dist/lib/chunk-HaloServices.mjs.map +1 -0
- package/dist/lib/chunk-InvitationsContainer.mjs +61 -39
- package/dist/lib/chunk-InvitationsContainer.mjs.map +1 -1
- package/dist/lib/chunk-JoinDialog.mjs +10 -9
- package/dist/lib/chunk-JoinDialog.mjs.map +1 -1
- package/dist/lib/chunk-ProfileContainer.mjs +60 -39
- package/dist/lib/chunk-ProfileContainer.mjs.map +1 -1
- package/dist/lib/chunk-RecoveryCodeDialog.mjs +26 -21
- package/dist/lib/chunk-RecoveryCodeDialog.mjs.map +1 -1
- package/dist/lib/chunk-RecoveryCredentialsContainer.mjs +95 -65
- package/dist/lib/chunk-RecoveryCredentialsContainer.mjs.map +1 -1
- package/dist/lib/chunk-ResetDialog.mjs +26 -14
- package/dist/lib/chunk-ResetDialog.mjs.map +1 -1
- package/dist/lib/chunk-SpaceInvitationContainer.mjs +50 -0
- package/dist/lib/chunk-SpaceInvitationContainer.mjs.map +1 -0
- package/dist/lib/chunk-UsageContainer.mjs +22 -20
- package/dist/lib/chunk-UsageContainer.mjs.map +1 -1
- package/dist/lib/chunk-account-cache.mjs +2 -2
- package/dist/lib/chunk-account-cache.mjs.map +1 -1
- package/dist/lib/chunk-app-graph-builder.mjs +159 -60
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
- package/dist/lib/chunk-client-services.mjs +21 -0
- package/dist/lib/chunk-client-services.mjs.map +1 -0
- package/dist/lib/chunk-client.mjs +27 -20
- package/dist/lib/chunk-client.mjs.map +1 -1
- package/dist/lib/chunk-constants.mjs +2 -1
- package/dist/lib/chunk-constants.mjs.map +1 -1
- package/dist/lib/chunk-create-agent.mjs +1 -1
- package/dist/lib/chunk-create-agent.mjs.map +1 -1
- package/dist/lib/chunk-create-identity.mjs +2 -2
- package/dist/lib/chunk-create-identity.mjs.map +1 -1
- package/dist/lib/chunk-create-passkey.mjs +49 -40
- package/dist/lib/chunk-create-passkey.mjs.map +1 -1
- package/dist/lib/chunk-create-recovery-code.mjs +2 -2
- package/dist/lib/chunk-create-recovery-code.mjs.map +1 -1
- package/dist/lib/chunk-grant-service-access.mjs +1 -1
- package/dist/lib/chunk-grant-service-access.mjs.map +1 -1
- package/dist/lib/chunk-halo.mjs +414 -0
- package/dist/lib/chunk-halo.mjs.map +1 -0
- package/dist/lib/chunk-identity-lifecycle.mjs +74 -0
- package/dist/lib/chunk-identity-lifecycle.mjs.map +1 -0
- package/dist/lib/chunk-join-identity.mjs +2 -2
- package/dist/lib/chunk-join-identity.mjs.map +1 -1
- package/dist/lib/chunk-layer-specs.mjs +72 -5
- package/dist/lib/chunk-layer-specs.mjs.map +1 -1
- package/dist/lib/chunk-navigation-handler.mjs +28 -5
- package/dist/lib/chunk-navigation-handler.mjs.map +1 -1
- package/dist/lib/chunk-navigation-target-loader.mjs +8 -9
- package/dist/lib/chunk-navigation-target-loader.mjs.map +1 -1
- package/dist/lib/chunk-open-usage.mjs +3 -3
- package/dist/lib/chunk-open-usage.mjs.map +1 -1
- package/dist/lib/chunk-react-context.mjs +5 -5
- package/dist/lib/chunk-react-context.mjs.map +1 -1
- package/dist/lib/chunk-react-surface.mjs +80 -64
- package/dist/lib/chunk-react-surface.mjs.map +1 -1
- package/dist/lib/chunk-recover-identity.mjs +2 -2
- package/dist/lib/chunk-recover-identity.mjs.map +1 -1
- package/dist/lib/chunk-redeem-passkey.mjs +7 -5
- package/dist/lib/chunk-redeem-passkey.mjs.map +1 -1
- package/dist/lib/chunk-redeem-token.mjs +1 -1
- package/dist/lib/chunk-redeem-token.mjs.map +1 -1
- package/dist/lib/chunk-remote-trace-monitor.mjs +3 -2
- package/dist/lib/chunk-remote-trace-monitor.mjs.map +1 -1
- package/dist/lib/chunk-reset-storage.mjs +6 -3
- package/dist/lib/chunk-reset-storage.mjs.map +1 -1
- package/dist/lib/chunk-resolve-navigation-targets.mjs +3 -3
- package/dist/lib/chunk-resolve-navigation-targets.mjs.map +1 -1
- package/dist/lib/chunk-revoke-recovery-credential.mjs +1 -1
- package/dist/lib/chunk-revoke-recovery-credential.mjs.map +1 -1
- package/dist/lib/chunk-share-identity.mjs +2 -2
- package/dist/lib/chunk-share-identity.mjs.map +1 -1
- package/dist/lib/chunk-space-replication-progress.mjs +49 -7
- package/dist/lib/chunk-space-replication-progress.mjs.map +1 -1
- package/dist/lib/chunk-trace-progress.mjs +5 -5
- package/dist/lib/chunk-trace-progress.mjs.map +1 -1
- package/dist/lib/chunk-update-profile.mjs +1 -1
- package/dist/lib/chunk-update-profile.mjs.map +1 -1
- package/dist/lib/chunk-useAccountUrl.mjs +23 -0
- package/dist/lib/chunk-useAccountUrl.mjs.map +1 -0
- package/dist/lib/chunk-useHubClient.mjs +30 -0
- package/dist/lib/chunk-useHubClient.mjs.map +1 -0
- package/dist/lib/commands.mjs +1 -1
- package/dist/lib/commands.mjs.map +1 -1
- package/dist/lib/commands.node.mjs +771 -1
- package/dist/lib/commands.node.mjs.map +1 -1
- package/dist/lib/components.mjs +91 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/containers.mjs +5 -1
- package/dist/lib/containers.mjs.map +1 -1
- package/dist/lib/index.mjs +2 -27
- package/dist/lib/meta.mjs.map +1 -1
- package/dist/lib/ns/HaloServices.mjs +2 -0
- package/dist/lib/operations.mjs +3 -3
- package/dist/lib/operations.mjs.map +1 -1
- package/dist/lib/plugin.mjs +2 -2
- package/dist/lib/plugin.mjs.map +1 -1
- package/dist/lib/testing.mjs +71 -2
- package/dist/lib/testing.mjs.map +1 -1
- package/dist/lib/translations.mjs +26 -5
- package/dist/lib/translations.mjs.map +1 -1
- package/dist/lib/types.mjs +3 -1
- package/dist/types/src/HaloServices.d.ts +2 -0
- package/dist/types/src/HaloServices.d.ts.map +1 -0
- package/dist/types/src/capabilities/client-services.d.ts +9 -0
- package/dist/types/src/capabilities/client-services.d.ts.map +1 -0
- package/dist/types/src/capabilities/client.d.ts +33 -2
- package/dist/types/src/capabilities/client.d.ts.map +1 -1
- package/dist/types/src/capabilities/commands.d.ts +1 -1
- package/dist/types/src/capabilities/commands.d.ts.map +1 -1
- package/dist/types/src/capabilities/commands.node.d.ts +1 -1
- package/dist/types/src/capabilities/commands.node.d.ts.map +1 -1
- package/dist/types/src/capabilities/gen/browser.d.ts +45 -0
- package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/node.d.ts +3 -1
- package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/gen/tauri.d.ts +45 -0
- package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/workerd.d.ts +2 -0
- package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-lifecycle.d.ts +14 -0
- package/dist/types/src/capabilities/identity-lifecycle.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts +1 -1
- package/dist/types/src/capabilities/navigation-handler/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/navigation-target-loader.d.ts +1 -6
- package/dist/types/src/capabilities/navigation-target-loader.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/remote-trace-monitor.d.ts +1 -1
- package/dist/types/src/capabilities/remote-trace-monitor.d.ts.map +1 -1
- package/dist/types/src/capabilities/trace-progress.d.ts +2 -2
- package/dist/types/src/commands/account/index.d.ts +1 -1
- package/dist/types/src/commands/account/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/invitation/create/create.d.ts +4 -3
- package/dist/types/src/commands/account/invitation/create/create.d.ts.map +1 -1
- package/dist/types/src/commands/account/invitation/create/index.d.ts +1 -1
- package/dist/types/src/commands/account/invitation/create/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/invitation/index.d.ts +2 -2
- package/dist/types/src/commands/account/invitation/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/login/index.d.ts +1 -1
- package/dist/types/src/commands/account/login/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/login/login.d.ts +6 -5
- package/dist/types/src/commands/account/login/login.d.ts.map +1 -1
- package/dist/types/src/commands/account/logout/index.d.ts +1 -1
- package/dist/types/src/commands/account/logout/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/logout/logout.d.ts +2 -2
- package/dist/types/src/commands/account/logout/logout.d.ts.map +1 -1
- package/dist/types/src/commands/account/signup/index.d.ts +1 -1
- package/dist/types/src/commands/account/signup/index.d.ts.map +1 -1
- package/dist/types/src/commands/account/signup/signup.d.ts +5 -4
- package/dist/types/src/commands/account/signup/signup.d.ts.map +1 -1
- package/dist/types/src/commands/account/util.d.ts +1 -1
- package/dist/types/src/commands/account/util.d.ts.map +1 -1
- package/dist/types/src/commands/config/index.d.ts +1 -1
- package/dist/types/src/commands/config/index.d.ts.map +1 -1
- package/dist/types/src/commands/config/view.d.ts +1 -1
- package/dist/types/src/commands/config/view.d.ts.map +1 -1
- package/dist/types/src/commands/device/index.d.ts +1 -1
- package/dist/types/src/commands/device/index.d.ts.map +1 -1
- package/dist/types/src/commands/device/info/index.d.ts +1 -1
- package/dist/types/src/commands/device/info/index.d.ts.map +1 -1
- package/dist/types/src/commands/device/info/info.d.ts +1 -1
- package/dist/types/src/commands/device/info/info.d.ts.map +1 -1
- package/dist/types/src/commands/device/list/index.d.ts +1 -1
- package/dist/types/src/commands/device/list/index.d.ts.map +1 -1
- package/dist/types/src/commands/device/list/list.d.ts +1 -1
- package/dist/types/src/commands/device/list/list.d.ts.map +1 -1
- package/dist/types/src/commands/device/update/index.d.ts +1 -1
- package/dist/types/src/commands/device/update/index.d.ts.map +1 -1
- package/dist/types/src/commands/device/update/update.d.ts +1 -1
- package/dist/types/src/commands/device/update/update.d.ts.map +1 -1
- package/dist/types/src/commands/device/util.d.ts +1 -1
- package/dist/types/src/commands/device/util.d.ts.map +1 -1
- package/dist/types/src/commands/edge/index.d.ts +1 -1
- package/dist/types/src/commands/edge/index.d.ts.map +1 -1
- package/dist/types/src/commands/edge/status.d.ts +1 -1
- package/dist/types/src/commands/edge/status.d.ts.map +1 -1
- package/dist/types/src/commands/errors.d.ts +33 -0
- package/dist/types/src/commands/errors.d.ts.map +1 -0
- package/dist/types/src/commands/halo/credential/add/add.d.ts +5 -4
- package/dist/types/src/commands/halo/credential/add/add.d.ts.map +1 -1
- package/dist/types/src/commands/halo/credential/add/index.d.ts +1 -1
- package/dist/types/src/commands/halo/credential/add/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/credential/index.d.ts +2 -2
- package/dist/types/src/commands/halo/credential/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/credential/list/index.d.ts +1 -1
- package/dist/types/src/commands/halo/credential/list/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/credential/list/list.d.ts +1 -1
- package/dist/types/src/commands/halo/credential/list/list.d.ts.map +1 -1
- package/dist/types/src/commands/halo/identity/identity.d.ts +1 -1
- package/dist/types/src/commands/halo/identity/identity.d.ts.map +1 -1
- package/dist/types/src/commands/halo/identity/index.d.ts +1 -1
- package/dist/types/src/commands/halo/identity/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/index.d.ts +1 -1
- package/dist/types/src/commands/halo/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/keys/index.d.ts +1 -1
- package/dist/types/src/commands/halo/keys/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/keys/keys.d.ts +1 -1
- package/dist/types/src/commands/halo/keys/keys.d.ts.map +1 -1
- package/dist/types/src/commands/halo/seed/index.d.ts +1 -1
- package/dist/types/src/commands/halo/seed/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/seed/seed.d.ts +1 -1
- package/dist/types/src/commands/halo/seed/seed.d.ts.map +1 -1
- package/dist/types/src/commands/halo/share/index.d.ts +1 -1
- package/dist/types/src/commands/halo/share/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/share/share.d.ts +4 -3
- package/dist/types/src/commands/halo/share/share.d.ts.map +1 -1
- package/dist/types/src/commands/halo/update/index.d.ts +1 -1
- package/dist/types/src/commands/halo/update/index.d.ts.map +1 -1
- package/dist/types/src/commands/halo/update/update.d.ts +1 -1
- package/dist/types/src/commands/halo/update/update.d.ts.map +1 -1
- package/dist/types/src/commands/halo/util.d.ts +2 -2
- package/dist/types/src/commands/halo/util.d.ts.map +1 -1
- package/dist/types/src/commands/index.d.ts +6 -6
- package/dist/types/src/commands/index.d.ts.map +1 -1
- package/dist/types/src/commands/profile/create.d.ts +1 -1
- package/dist/types/src/commands/profile/create.d.ts.map +1 -1
- package/dist/types/src/commands/profile/delete.d.ts +1 -1
- package/dist/types/src/commands/profile/delete.d.ts.map +1 -1
- package/dist/types/src/commands/profile/import.d.ts +5 -4
- package/dist/types/src/commands/profile/import.d.ts.map +1 -1
- package/dist/types/src/commands/profile/index.d.ts +2 -2
- package/dist/types/src/commands/profile/index.d.ts.map +1 -1
- package/dist/types/src/commands/profile/inspect.d.ts +1 -1
- package/dist/types/src/commands/profile/inspect.d.ts.map +1 -1
- package/dist/types/src/commands/profile/list.d.ts +1 -1
- package/dist/types/src/commands/profile/list.d.ts.map +1 -1
- package/dist/types/src/commands/profile/reset.d.ts +2 -2
- package/dist/types/src/commands/profile/reset.d.ts.map +1 -1
- package/dist/types/src/components/DevicesForm/DevicesForm.d.ts +19 -0
- package/dist/types/src/components/DevicesForm/DevicesForm.d.ts.map +1 -0
- package/dist/types/src/components/DevicesForm/DevicesForm.stories.d.ts +207 -0
- package/dist/types/src/components/DevicesForm/DevicesForm.stories.d.ts.map +1 -0
- package/dist/types/src/components/DevicesForm/index.d.ts +2 -0
- package/dist/types/src/components/DevicesForm/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +1 -0
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/containers/AccountContainer/AccountContainer.stories.d.ts +1 -1
- package/dist/types/src/containers/AccountContainer/AccountContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/AccountContainer/index.d.ts +1 -1
- package/dist/types/src/containers/AccountContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/CliLoginDialog/CliLoginDialog.d.ts +12 -0
- package/dist/types/src/containers/CliLoginDialog/CliLoginDialog.d.ts.map +1 -0
- package/dist/types/src/containers/CliLoginDialog/index.d.ts +4 -0
- package/dist/types/src/containers/CliLoginDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/ContactPickerContainer/ContactPickerContainer.d.ts +8 -0
- package/dist/types/src/containers/ContactPickerContainer/ContactPickerContainer.d.ts.map +1 -0
- package/dist/types/src/containers/ContactPickerContainer/ContactPickerContainer.stories.d.ts +206 -0
- package/dist/types/src/containers/ContactPickerContainer/ContactPickerContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ContactPickerContainer/index.d.ts +2 -0
- package/dist/types/src/containers/ContactPickerContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/ContactsContainer/ContactsContainer.d.ts +3 -0
- package/dist/types/src/containers/ContactsContainer/ContactsContainer.d.ts.map +1 -0
- package/dist/types/src/containers/ContactsContainer/ContactsContainer.stories.d.ts +203 -0
- package/dist/types/src/containers/ContactsContainer/ContactsContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ContactsContainer/index.d.ts +2 -0
- package/dist/types/src/containers/ContactsContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/DevicesContainer/DevicesContainer.d.ts.map +1 -1
- package/dist/types/src/containers/DevicesContainer/DevicesContainer.stories.d.ts +19 -1
- package/dist/types/src/containers/DevicesContainer/DevicesContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DevicesContainer/index.d.ts +1 -1
- package/dist/types/src/containers/DevicesContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/InvitationsContainer/InvitationsContainer.stories.d.ts +1 -1
- package/dist/types/src/containers/InvitationsContainer/InvitationsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/InvitationsContainer/index.d.ts +1 -1
- package/dist/types/src/containers/InvitationsContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +1 -1
- package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/JoinDialog/index.d.ts +1 -1
- package/dist/types/src/containers/JoinDialog/index.d.ts.map +1 -1
- package/dist/types/src/containers/ProfileContainer/ProfileContainer.d.ts.map +1 -1
- package/dist/types/src/containers/ProfileContainer/ProfileContainer.stories.d.ts +1 -1
- package/dist/types/src/containers/ProfileContainer/ProfileContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ProfileContainer/index.d.ts +1 -1
- package/dist/types/src/containers/ProfileContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCodeDialog/index.d.ts +2 -2
- package/dist/types/src/containers/RecoveryCodeDialog/index.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.d.ts +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/index.d.ts +1 -1
- package/dist/types/src/containers/RecoveryCredentialsContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/ResetDialog/ResetDialog.d.ts +6 -7
- package/dist/types/src/containers/ResetDialog/ResetDialog.d.ts.map +1 -1
- package/dist/types/src/containers/ResetDialog/ResetDialog.stories.d.ts +2 -2
- package/dist/types/src/containers/ResetDialog/ResetDialog.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ResetDialog/index.d.ts +2 -2
- package/dist/types/src/containers/ResetDialog/index.d.ts.map +1 -1
- package/dist/types/src/containers/SpaceInvitationContainer/SpaceInvitationContainer.d.ts +10 -0
- package/dist/types/src/containers/SpaceInvitationContainer/SpaceInvitationContainer.d.ts.map +1 -0
- package/dist/types/src/containers/SpaceInvitationContainer/index.d.ts +2 -0
- package/dist/types/src/containers/SpaceInvitationContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/UsageContainer/UsageView.d.ts.map +1 -1
- package/dist/types/src/containers/UsageContainer/UsageView.stories.d.ts +1 -1
- package/dist/types/src/containers/UsageContainer/UsageView.stories.d.ts.map +1 -1
- package/dist/types/src/containers/UsageContainer/index.d.ts +1 -1
- package/dist/types/src/containers/UsageContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +9 -3
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/operations/create-agent.d.ts +2 -2
- package/dist/types/src/operations/create-agent.d.ts.map +1 -1
- package/dist/types/src/operations/create-identity.d.ts +2 -2
- package/dist/types/src/operations/create-identity.d.ts.map +1 -1
- package/dist/types/src/operations/create-passkey.d.ts +2 -2
- package/dist/types/src/operations/create-passkey.d.ts.map +1 -1
- package/dist/types/src/operations/create-recovery-code.d.ts +2 -2
- package/dist/types/src/operations/create-recovery-code.d.ts.map +1 -1
- package/dist/types/src/operations/grant-service-access.d.ts +2 -2
- package/dist/types/src/operations/grant-service-access.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +1 -1
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/join-identity.d.ts +2 -2
- package/dist/types/src/operations/join-identity.d.ts.map +1 -1
- package/dist/types/src/operations/open-usage.d.ts +2 -2
- package/dist/types/src/operations/open-usage.d.ts.map +1 -1
- package/dist/types/src/operations/recover-identity.d.ts +2 -2
- package/dist/types/src/operations/recover-identity.d.ts.map +1 -1
- package/dist/types/src/operations/redeem-passkey.d.ts +2 -2
- package/dist/types/src/operations/redeem-passkey.d.ts.map +1 -1
- package/dist/types/src/operations/redeem-token.d.ts +2 -2
- package/dist/types/src/operations/redeem-token.d.ts.map +1 -1
- package/dist/types/src/operations/reset-storage.d.ts +2 -2
- package/dist/types/src/operations/reset-storage.d.ts.map +1 -1
- package/dist/types/src/operations/revoke-recovery-credential.d.ts +2 -2
- package/dist/types/src/operations/revoke-recovery-credential.d.ts.map +1 -1
- package/dist/types/src/operations/share-identity.d.ts +2 -2
- package/dist/types/src/operations/share-identity.d.ts.map +1 -1
- package/dist/types/src/operations/update-profile.d.ts +2 -2
- package/dist/types/src/operations/update-profile.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts.map +1 -1
- package/dist/types/src/progress/index.d.ts +2 -2
- package/dist/types/src/progress/index.d.ts.map +1 -1
- package/dist/types/src/progress/space-sync-progress.d.ts +10 -1
- package/dist/types/src/progress/space-sync-progress.d.ts.map +1 -1
- package/dist/types/src/testing/ClientPluginManager.d.ts +18 -0
- package/dist/types/src/testing/ClientPluginManager.d.ts.map +1 -0
- package/dist/types/src/testing/createFakeContacts.d.ts +16 -0
- package/dist/types/src/testing/createFakeContacts.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +4 -2
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/initializeIdentity.d.ts +1 -1
- package/dist/types/src/testing/initializeIdentity.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Account.d.ts +21 -7
- package/dist/types/src/types/Account.d.ts.map +1 -1
- package/dist/types/src/types/CliLogin.d.ts +33 -0
- package/dist/types/src/types/CliLogin.d.ts.map +1 -0
- package/dist/types/src/types/ClientCapabilities.d.ts +32 -3
- package/dist/types/src/types/ClientCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/ClientEvents.d.ts +5 -1
- package/dist/types/src/types/ClientEvents.d.ts.map +1 -1
- package/dist/types/src/{operations/definitions.d.ts → types/ClientOperation.d.ts} +2 -1
- package/dist/types/src/types/ClientOperation.d.ts.map +1 -0
- package/dist/types/src/types/ClientOptions.d.ts +1 -8
- package/dist/types/src/types/ClientOptions.d.ts.map +1 -1
- package/dist/types/src/types/PasskeyError.d.ts +112 -11
- package/dist/types/src/types/PasskeyError.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +9 -7
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +72 -61
- package/src/HaloServices.ts +7 -0
- package/src/capabilities/account-cache.ts +2 -2
- package/src/capabilities/app-graph-builder.ts +165 -69
- package/src/capabilities/client-services.ts +25 -0
- package/src/capabilities/client.ts +17 -12
- package/src/capabilities/commands.node.ts +1 -1
- package/src/capabilities/commands.ts +1 -1
- package/src/capabilities/gen/browser.ts +192 -0
- package/src/capabilities/gen/node.ts +48 -19
- package/src/capabilities/gen/tauri.ts +192 -0
- package/src/capabilities/gen/workerd.ts +41 -13
- package/src/capabilities/identity-lifecycle.ts +86 -0
- package/src/capabilities/index.ts +57 -26
- package/src/capabilities/layer-specs.ts +107 -4
- package/src/capabilities/navigation-handler/index.ts +2 -2
- package/src/capabilities/navigation-handler/navigation-handler.ts +20 -1
- package/src/capabilities/navigation-target-loader.ts +15 -10
- package/src/capabilities/react-context.tsx +2 -2
- package/src/capabilities/react-surface.ts +43 -18
- package/src/capabilities/remote-trace-monitor.ts +5 -2
- package/src/capabilities/schema-defs.test.ts +2 -2
- package/src/capabilities/space-replication-progress.ts +12 -7
- package/src/capabilities/trace-progress.ts +6 -6
- package/src/commands/account/index.ts +5 -5
- package/src/commands/account/invitation/create/create.ts +9 -5
- package/src/commands/account/invitation/create/index.ts +1 -1
- package/src/commands/account/invitation/index.ts +2 -2
- package/src/commands/account/login/index.ts +1 -1
- package/src/commands/account/login/login.ts +108 -37
- package/src/commands/account/logout/index.ts +1 -1
- package/src/commands/account/logout/logout.ts +8 -5
- package/src/commands/account/signup/index.ts +1 -1
- package/src/commands/account/signup/signup.ts +33 -19
- package/src/commands/account/util.test.ts +1 -1
- package/src/commands/account/util.ts +2 -2
- package/src/commands/config/index.ts +2 -2
- package/src/commands/config/view.ts +1 -1
- package/src/commands/device/index.ts +4 -4
- package/src/commands/device/info/index.ts +1 -1
- package/src/commands/device/info/info.test.ts +4 -3
- package/src/commands/device/info/info.ts +5 -4
- package/src/commands/device/list/index.ts +1 -1
- package/src/commands/device/list/list.test.ts +2 -2
- package/src/commands/device/list/list.ts +2 -2
- package/src/commands/device/update/index.ts +1 -1
- package/src/commands/device/update/update.ts +8 -9
- package/src/commands/device/util.ts +6 -5
- package/src/commands/edge/index.ts +2 -2
- package/src/commands/edge/status.ts +1 -1
- package/src/commands/errors.ts +8 -0
- package/src/commands/halo/credential/add/add.ts +13 -16
- package/src/commands/halo/credential/add/index.ts +1 -1
- package/src/commands/halo/credential/index.ts +3 -3
- package/src/commands/halo/credential/list/index.ts +1 -1
- package/src/commands/halo/credential/list/list.test.ts +2 -2
- package/src/commands/halo/credential/list/list.ts +15 -14
- package/src/commands/halo/identity/identity.test.ts +7 -3
- package/src/commands/halo/identity/identity.ts +2 -2
- package/src/commands/halo/identity/index.ts +1 -1
- package/src/commands/halo/index.ts +7 -7
- package/src/commands/halo/keys/index.ts +1 -1
- package/src/commands/halo/keys/keys.test.ts +5 -4
- package/src/commands/halo/keys/keys.ts +6 -5
- package/src/commands/halo/seed/index.ts +1 -1
- package/src/commands/halo/seed/seed.ts +1 -1
- package/src/commands/halo/share/index.ts +1 -1
- package/src/commands/halo/share/share.ts +15 -10
- package/src/commands/halo/update/index.ts +1 -1
- package/src/commands/halo/update/update.test.ts +2 -2
- package/src/commands/halo/update/update.ts +7 -17
- package/src/commands/halo/util.ts +11 -7
- package/src/commands/index.ts +6 -6
- package/src/commands/profile/create.ts +5 -5
- package/src/commands/profile/delete.ts +4 -4
- package/src/commands/profile/import.ts +17 -14
- package/src/commands/profile/index.ts +7 -7
- package/src/commands/profile/inspect.ts +9 -6
- package/src/commands/profile/list.ts +2 -2
- package/src/commands/profile/reset.ts +9 -6
- package/src/components/DevicesForm/DevicesForm.stories.tsx +62 -0
- package/src/components/DevicesForm/DevicesForm.tsx +100 -0
- package/src/components/DevicesForm/index.ts +5 -0
- package/src/components/index.ts +2 -0
- package/src/constants.ts +1 -0
- package/src/containers/AccountContainer/AccountContainer.stories.tsx +3 -3
- package/src/containers/AccountContainer/AccountContainer.tsx +54 -43
- package/src/containers/AccountContainer/index.ts +1 -1
- package/src/containers/CliLoginDialog/CliLoginDialog.tsx +159 -0
- package/src/containers/CliLoginDialog/index.ts +8 -0
- package/src/containers/ContactPickerContainer/ContactPickerContainer.stories.tsx +66 -0
- package/src/containers/ContactPickerContainer/ContactPickerContainer.tsx +126 -0
- package/src/containers/ContactPickerContainer/index.ts +5 -0
- package/src/containers/ContactsContainer/ContactsContainer.stories.tsx +48 -0
- package/src/containers/ContactsContainer/ContactsContainer.tsx +61 -0
- package/src/containers/ContactsContainer/index.ts +5 -0
- package/src/containers/DevicesContainer/DevicesContainer.stories.tsx +3 -3
- package/src/containers/DevicesContainer/DevicesContainer.tsx +47 -105
- package/src/containers/DevicesContainer/index.ts +1 -1
- package/src/containers/InvitationsContainer/InvitationsContainer.stories.tsx +3 -3
- package/src/containers/InvitationsContainer/InvitationsContainer.tsx +63 -60
- package/src/containers/InvitationsContainer/index.ts +1 -1
- package/src/containers/JoinDialog/JoinDialog.stories.tsx +5 -7
- package/src/containers/JoinDialog/JoinDialog.tsx +10 -9
- package/src/containers/JoinDialog/index.ts +1 -1
- package/src/containers/ProfileContainer/ProfileContainer.stories.tsx +3 -3
- package/src/containers/ProfileContainer/ProfileContainer.tsx +72 -55
- package/src/containers/ProfileContainer/index.ts +1 -1
- package/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.stories.tsx +5 -6
- package/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.tsx +27 -29
- package/src/containers/RecoveryCodeDialog/index.ts +2 -2
- package/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.tsx +7 -7
- package/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.tsx +69 -41
- package/src/containers/RecoveryCredentialsContainer/index.ts +1 -1
- package/src/containers/ResetDialog/ResetDialog.stories.tsx +9 -21
- package/src/containers/ResetDialog/ResetDialog.tsx +35 -24
- package/src/containers/ResetDialog/index.ts +2 -2
- package/src/containers/SpaceInvitationContainer/SpaceInvitationContainer.tsx +62 -0
- package/src/containers/SpaceInvitationContainer/index.ts +8 -0
- package/src/containers/UsageContainer/UsageContainer.tsx +4 -4
- package/src/containers/UsageContainer/UsageView.stories.tsx +1 -1
- package/src/containers/UsageContainer/UsageView.tsx +22 -24
- package/src/containers/UsageContainer/index.ts +1 -1
- package/src/containers/index.ts +23 -12
- package/src/hooks/index.ts +2 -2
- package/src/hooks/useAccountUrl.ts +1 -1
- package/src/hooks/useHubClient.ts +3 -3
- package/src/index.ts +2 -5
- package/src/meta.ts +1 -1
- package/src/operations/create-agent.ts +2 -2
- package/src/operations/create-identity.ts +5 -3
- package/src/operations/create-passkey.ts +59 -37
- package/src/operations/create-recovery-code.ts +16 -15
- package/src/operations/grant-service-access.ts +9 -8
- package/src/operations/index.ts +17 -30
- package/src/operations/join-identity.ts +3 -3
- package/src/operations/open-usage.ts +3 -3
- package/src/operations/recover-identity.ts +3 -3
- package/src/operations/redeem-passkey.ts +63 -65
- package/src/operations/redeem-token.ts +2 -2
- package/src/operations/reset-storage.ts +4 -3
- package/src/operations/resolve-navigation-targets.ts +1 -1
- package/src/operations/revoke-recovery-credential.ts +9 -8
- package/src/operations/share-identity.ts +2 -2
- package/src/operations/update-profile.ts +2 -2
- package/src/plugin.test.ts +2 -2
- package/src/plugin.ts +30 -25
- package/src/progress/index.ts +2 -2
- package/src/progress/space-sync-progress.test.ts +36 -13
- package/src/progress/space-sync-progress.ts +21 -6
- package/src/schema-defs.test.ts +2 -2
- package/src/testing/ClientPluginManager.tsx +44 -0
- package/src/testing/createFakeContacts.ts +57 -0
- package/src/testing/index.ts +4 -2
- package/src/testing/initializeIdentity.ts +6 -2
- package/src/translations.ts +33 -9
- package/src/types/Account.ts +27 -11
- package/src/types/CliLogin.ts +78 -0
- package/src/types/ClientCapabilities.ts +38 -4
- package/src/types/ClientEvents.ts +5 -1
- package/src/{operations/definitions.ts → types/ClientOperation.ts} +5 -1
- package/src/types/ClientOptions.ts +3 -7
- package/src/types/PasskeyError.test.ts +96 -1
- package/src/types/PasskeyError.ts +85 -15
- package/src/types/index.ts +9 -7
- package/dist/lib/chunk-commands.mjs +0 -1090
- package/dist/lib/chunk-commands.mjs.map +0 -1
- package/dist/lib/chunk-definitions.mjs.map +0 -1
- package/dist/lib/chunk-hooks.mjs +0 -49
- package/dist/lib/chunk-hooks.mjs.map +0 -1
- package/dist/lib/chunk-progress.mjs +0 -35
- package/dist/lib/chunk-progress.mjs.map +0 -1
- package/dist/lib/index.mjs.map +0 -1
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
package/dist/lib/Account.mjs
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
|
|
2
|
+
import { getEnvString } from "@dxos/config";
|
|
3
|
+
import * as GraphPath from "@dxos/app-toolkit/GraphPath";
|
|
2
4
|
//#region src/types/Account.ts
|
|
3
5
|
var Account_exports = /* @__PURE__ */ __exportAll({
|
|
4
6
|
Account: () => Account,
|
|
7
|
+
Contacts: () => Contacts,
|
|
5
8
|
Devices: () => Devices,
|
|
6
9
|
Invitations: () => Invitations,
|
|
7
10
|
Profile: () => Profile,
|
|
8
11
|
Security: () => Security,
|
|
9
12
|
Usage: () => Usage,
|
|
10
|
-
|
|
13
|
+
getHubUrl: () => getHubUrl,
|
|
14
|
+
id: () => id,
|
|
15
|
+
isAuthEnabled: () => isAuthEnabled,
|
|
16
|
+
path: () => path,
|
|
17
|
+
workspacePath: () => workspacePath
|
|
11
18
|
});
|
|
12
|
-
|
|
13
|
-
var id =
|
|
14
|
-
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
19
|
+
/** Pinned (non-space) workspace ID anchoring the account's graph subtree, and its URL workspace token. */
|
|
20
|
+
var id = "dxos:account";
|
|
21
|
+
/** Panel ids, relative to the account workspace they hang off. Each is also its own singleton URL key. */
|
|
22
|
+
var Profile = "profile";
|
|
23
|
+
var Devices = "devices";
|
|
24
|
+
var Contacts = "contacts";
|
|
25
|
+
var Security = "security";
|
|
26
|
+
var Account = "account";
|
|
27
|
+
var Invitations = "invitations";
|
|
28
|
+
var Usage = "usage";
|
|
29
|
+
/** The account's own workspace path. */
|
|
30
|
+
var workspacePath = GraphPath.getSpacePath(id);
|
|
31
|
+
/** A panel's qualified path, which its surface matches on. */
|
|
32
|
+
var path = (panel) => GraphPath.getSpacePath(id, panel);
|
|
33
|
+
/**
|
|
34
|
+
* The hub backing accounts, or `undefined` where none is configured.
|
|
35
|
+
*/
|
|
36
|
+
var getHubUrl = (config) => getEnvString(config, "DX_HUB_URL");
|
|
37
|
+
/** Whether this profile has an account service to authenticate against. */
|
|
38
|
+
var isAuthEnabled = (config) => !!getHubUrl(config);
|
|
20
39
|
//#endregion
|
|
21
|
-
export { Account, Devices, Invitations, Profile, Security, Usage, id, Account_exports as t };
|
|
40
|
+
export { Account, Contacts, Devices, Invitations, Profile, Security, Usage, getHubUrl, id, isAuthEnabled, path, Account_exports as t, workspacePath };
|
|
22
41
|
|
|
23
42
|
//# sourceMappingURL=Account.mjs.map
|
package/dist/lib/Account.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Account.mjs","names":[],"sources":["../../src/types/Account.ts"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\n
|
|
1
|
+
{"version":3,"file":"Account.mjs","names":[],"sources":["../../src/types/Account.ts"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as GraphPath from '@dxos/app-toolkit/GraphPath';\nimport { type Config, getEnvString } from '@dxos/config';\n\n/** Pinned (non-space) workspace ID anchoring the account's graph subtree, and its URL workspace token. */\nexport const id = 'dxos:account';\n\n/** Panel ids, relative to the account workspace they hang off. Each is also its own singleton URL key. */\nexport const Profile = 'profile';\nexport const Devices = 'devices';\nexport const Contacts = 'contacts';\nexport const Security = 'security';\nexport const Account = 'account';\nexport const Invitations = 'invitations';\nexport const Usage = 'usage';\n\n/** The account's own workspace path. */\nexport const workspacePath = GraphPath.getSpacePath(id);\n\n/** A panel's qualified path, which its surface matches on. */\nexport const path = (panel: string): string => GraphPath.getSpacePath(id, panel);\n\n/**\n * The hub backing accounts, or `undefined` where none is configured.\n */\nexport const getHubUrl = (config?: Config): string | undefined => getEnvString(config, 'DX_HUB_URL');\n\n/** Whether this profile has an account service to authenticate against. */\nexport const isAuthEnabled = (config?: Config): boolean => !!getHubUrl(config);\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAQA,IAAa,KAAK;;AAGlB,IAAa,UAAU;AACvB,IAAa,UAAU;AACvB,IAAa,WAAW;AACxB,IAAa,WAAW;AACxB,IAAa,UAAU;AACvB,IAAa,cAAc;AAC3B,IAAa,QAAQ;;AAGrB,IAAa,gBAAgB,UAAU,aAAa,EAAE;;AAGtD,IAAa,QAAQ,UAA0B,UAAU,aAAa,IAAI,KAAK;;;;AAK/E,IAAa,aAAa,WAAwC,aAAa,QAAQ,YAAY;;AAGnG,IAAa,iBAAiB,WAA6B,CAAC,CAAC,UAAU,MAAM"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
|
|
2
|
+
//#region src/types/CliLogin.ts
|
|
3
|
+
var CliLogin_exports = /* @__PURE__ */ __exportAll({
|
|
4
|
+
CALLBACK_PARAM: () => CALLBACK_PARAM,
|
|
5
|
+
CALLBACK_PATH: () => CALLBACK_PATH,
|
|
6
|
+
INVITATION_CODE_PARAM: () => INVITATION_CODE_PARAM,
|
|
7
|
+
RESPONSE_STATE_PARAM: () => RESPONSE_STATE_PARAM,
|
|
8
|
+
STATE_PARAM: () => STATE_PARAM,
|
|
9
|
+
createAuthorizeUrl: () => createAuthorizeUrl,
|
|
10
|
+
createCallbackUrl: () => createCallbackUrl,
|
|
11
|
+
createState: () => createState,
|
|
12
|
+
isValidState: () => isValidState,
|
|
13
|
+
parseCallback: () => parseCallback
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Contract between `dx account login --method composer` and the Composer page that approves it.
|
|
17
|
+
*
|
|
18
|
+
* The CLI opens `<composer>/?cliLogin=<callback>&cliLoginState=<state>`; once the user approves,
|
|
19
|
+
* Composer creates a device invitation and hands its code to `<callback>?invitationCode=…&state=…`.
|
|
20
|
+
* Both sides import this module so the parameter names cannot drift apart.
|
|
21
|
+
*/
|
|
22
|
+
/** Query param carrying the CLI's loopback callback URL. */
|
|
23
|
+
var CALLBACK_PARAM = "cliLogin";
|
|
24
|
+
/** Query param carrying the CLI's one-time state, shown on both sides so the user can match them. */
|
|
25
|
+
var STATE_PARAM = "cliLoginState";
|
|
26
|
+
/** Callback query params written by Composer. */
|
|
27
|
+
var INVITATION_CODE_PARAM = "invitationCode";
|
|
28
|
+
var RESPONSE_STATE_PARAM = "state";
|
|
29
|
+
/** Path the CLI's loopback server answers on. */
|
|
30
|
+
var CALLBACK_PATH = "/cli-login";
|
|
31
|
+
var LOOPBACK_HOSTS = /* @__PURE__ */ new Set([
|
|
32
|
+
"localhost",
|
|
33
|
+
"127.0.0.1",
|
|
34
|
+
"[::1]"
|
|
35
|
+
]);
|
|
36
|
+
/**
|
|
37
|
+
* Parses a callback URL, accepting only plain-HTTP loopback targets.
|
|
38
|
+
*
|
|
39
|
+
* The invitation code is a bearer credential for the identity, so it may only ever be delivered to
|
|
40
|
+
* this machine: a link crafted by someone else then admits nothing, because the victim's own
|
|
41
|
+
* loopback port has nobody listening for it (the same rule the hub applies to passkey callbacks).
|
|
42
|
+
*/
|
|
43
|
+
var parseCallback = (value) => {
|
|
44
|
+
if (!value) return;
|
|
45
|
+
try {
|
|
46
|
+
const url = new URL(value);
|
|
47
|
+
return url.protocol === "http:" && LOOPBACK_HOSTS.has(url.hostname) && url.pathname === "/cli-login" ? url : void 0;
|
|
48
|
+
} catch {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** The state is short and human-comparable, so it doubles as the code the user matches by eye. */
|
|
53
|
+
var isValidState = (value) => !!value && /^[A-Z0-9]{4}-[A-Z0-9]{4}$/.test(value);
|
|
54
|
+
var STATE_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
|
|
55
|
+
/** Generates a state token in the `XXXX-XXXX` form {@link isValidState} accepts. */
|
|
56
|
+
var createState = () => {
|
|
57
|
+
const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(8));
|
|
58
|
+
const chars = Array.from(bytes, (byte) => STATE_ALPHABET[byte % 32]);
|
|
59
|
+
return `${chars.slice(0, 4).join("")}-${chars.slice(4).join("")}`;
|
|
60
|
+
};
|
|
61
|
+
/** URL the CLI opens: Composer's origin with the callback and state attached. */
|
|
62
|
+
var createAuthorizeUrl = (composerUrl, callback, state) => {
|
|
63
|
+
const url = new URL(composerUrl);
|
|
64
|
+
url.searchParams.set(CALLBACK_PARAM, callback);
|
|
65
|
+
url.searchParams.set(STATE_PARAM, state);
|
|
66
|
+
return url;
|
|
67
|
+
};
|
|
68
|
+
/** URL Composer calls back on, carrying the invitation code and echoing the state. */
|
|
69
|
+
var createCallbackUrl = (callback, invitationCode, state) => {
|
|
70
|
+
const url = new URL(callback);
|
|
71
|
+
url.searchParams.set(INVITATION_CODE_PARAM, invitationCode);
|
|
72
|
+
url.searchParams.set(RESPONSE_STATE_PARAM, state);
|
|
73
|
+
return url;
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
export { CALLBACK_PARAM, CALLBACK_PATH, INVITATION_CODE_PARAM, RESPONSE_STATE_PARAM, STATE_PARAM, createAuthorizeUrl, createCallbackUrl, createState, isValidState, parseCallback, CliLogin_exports as t };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=CliLogin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliLogin.mjs","names":[],"sources":["../../src/types/CliLogin.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\n/**\n * Contract between `dx account login --method composer` and the Composer page that approves it.\n *\n * The CLI opens `<composer>/?cliLogin=<callback>&cliLoginState=<state>`; once the user approves,\n * Composer creates a device invitation and hands its code to `<callback>?invitationCode=…&state=…`.\n * Both sides import this module so the parameter names cannot drift apart.\n */\n\n/** Query param carrying the CLI's loopback callback URL. */\nexport const CALLBACK_PARAM = 'cliLogin';\n\n/** Query param carrying the CLI's one-time state, shown on both sides so the user can match them. */\nexport const STATE_PARAM = 'cliLoginState';\n\n/** Callback query params written by Composer. */\nexport const INVITATION_CODE_PARAM = 'invitationCode';\nexport const RESPONSE_STATE_PARAM = 'state';\n\n/** Path the CLI's loopback server answers on. */\nexport const CALLBACK_PATH = '/cli-login';\n\nconst LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]']);\n\n/**\n * Parses a callback URL, accepting only plain-HTTP loopback targets.\n *\n * The invitation code is a bearer credential for the identity, so it may only ever be delivered to\n * this machine: a link crafted by someone else then admits nothing, because the victim's own\n * loopback port has nobody listening for it (the same rule the hub applies to passkey callbacks).\n */\nexport const parseCallback = (value: string | null | undefined): URL | undefined => {\n if (!value) {\n return undefined;\n }\n try {\n const url = new URL(value);\n return url.protocol === 'http:' && LOOPBACK_HOSTS.has(url.hostname) && url.pathname === CALLBACK_PATH\n ? url\n : undefined;\n } catch {\n return undefined;\n }\n};\n\n/** The state is short and human-comparable, so it doubles as the code the user matches by eye. */\nexport const isValidState = (value: string | null | undefined): value is string =>\n !!value && /^[A-Z0-9]{4}-[A-Z0-9]{4}$/.test(value);\n\nconst STATE_ALPHABET = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\n\n/** Generates a state token in the `XXXX-XXXX` form {@link isValidState} accepts. */\nexport const createState = (): string => {\n const bytes = crypto.getRandomValues(new Uint8Array(8));\n const chars = Array.from(bytes, (byte) => STATE_ALPHABET[byte % STATE_ALPHABET.length]);\n return `${chars.slice(0, 4).join('')}-${chars.slice(4).join('')}`;\n};\n\n/** URL the CLI opens: Composer's origin with the callback and state attached. */\nexport const createAuthorizeUrl = (composerUrl: string, callback: string, state: string): URL => {\n const url = new URL(composerUrl);\n url.searchParams.set(CALLBACK_PARAM, callback);\n url.searchParams.set(STATE_PARAM, state);\n return url;\n};\n\n/** URL Composer calls back on, carrying the invitation code and echoing the state. */\nexport const createCallbackUrl = (callback: URL, invitationCode: string, state: string): URL => {\n const url = new URL(callback);\n url.searchParams.set(INVITATION_CODE_PARAM, invitationCode);\n url.searchParams.set(RESPONSE_STATE_PARAM, state);\n return url;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAeA,IAAa,iBAAiB;;AAG9B,IAAa,cAAc;;AAG3B,IAAa,wBAAwB;AACrC,IAAa,uBAAuB;;AAGpC,IAAa,gBAAgB;AAE7B,IAAM,iCAAiB,IAAI,IAAI;CAAC;CAAa;CAAa;AAAO,CAAC;;;;;;;;AASlE,IAAa,iBAAiB,UAAsD;CAClF,IAAI,CAAC,OACH;CAEF,IAAI;EACF,MAAM,MAAM,IAAI,IAAI,KAAK;EACzB,OAAO,IAAI,aAAa,WAAW,eAAe,IAAI,IAAI,QAAQ,KAAK,IAAI,aAAA,eACvE,MACA,KAAA;CACN,QAAQ;EACN;CACF;AACF;;AAGA,IAAa,gBAAgB,UAC3B,CAAC,CAAC,SAAS,4BAA4B,KAAK,KAAK;AAEnD,IAAM,iBAAiB;;AAGvB,IAAa,oBAA4B;CACvC,MAAM,QAAQ,OAAO,gCAAgB,IAAI,WAAW,CAAC,CAAC;CACtD,MAAM,QAAQ,MAAM,KAAK,QAAQ,SAAS,eAAe,OAAO,GAAsB;CACtF,OAAO,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;AAChE;;AAGA,IAAa,sBAAsB,aAAqB,UAAkB,UAAuB;CAC/F,MAAM,MAAM,IAAI,IAAI,WAAW;CAC/B,IAAI,aAAa,IAAI,gBAAgB,QAAQ;CAC7C,IAAI,aAAa,IAAI,aAAa,KAAK;CACvC,OAAO;AACT;;AAGA,IAAa,qBAAqB,UAAe,gBAAwB,UAAuB;CAC9F,MAAM,MAAM,IAAI,IAAI,QAAQ;CAC5B,IAAI,aAAa,IAAI,uBAAuB,cAAc;CAC1D,IAAI,aAAa,IAAI,sBAAsB,KAAK;CAChD,OAAO;AACT"}
|
|
@@ -5,9 +5,14 @@ import { meta } from "#meta";
|
|
|
5
5
|
var ClientCapabilities_exports = /* @__PURE__ */ __exportAll({
|
|
6
6
|
AccountCache: () => AccountCache,
|
|
7
7
|
Client: () => Client,
|
|
8
|
+
Config: () => Config,
|
|
9
|
+
EdgeHttpClient: () => EdgeHttpClient,
|
|
8
10
|
HubHttpClient: () => HubHttpClient,
|
|
11
|
+
Hypergraph: () => Hypergraph,
|
|
9
12
|
IdentityService: () => IdentityService,
|
|
13
|
+
InitializeTimeout: () => InitializeTimeout,
|
|
10
14
|
Migration: () => Migration,
|
|
15
|
+
OnIdentityDeleted: () => OnIdentityDeleted,
|
|
11
16
|
Schema: () => Schema,
|
|
12
17
|
SchemaRegistered: () => SchemaRegistered,
|
|
13
18
|
SpaceService: () => SpaceService
|
|
@@ -15,6 +20,12 @@ var ClientCapabilities_exports = /* @__PURE__ */ __exportAll({
|
|
|
15
20
|
var Client = Capability.makeSingleton()(`${meta.profile.key}.capability.client`);
|
|
16
21
|
var Schema = Capability.make()(`${meta.profile.key}.capability.schema`);
|
|
17
22
|
/**
|
|
23
|
+
* The effective `initializeTimeout` the client capability resolved. Consumers that wait on
|
|
24
|
+
* `client.waitUntilInitialized()` bound themselves by this rather than the default, so a host that
|
|
25
|
+
* widens the client's initialization budget does not have its layers time out underneath it.
|
|
26
|
+
*/
|
|
27
|
+
var InitializeTimeout = Capability.makeSingleton()(`${meta.profile.key}.capability.initializeTimeout`);
|
|
28
|
+
/**
|
|
18
29
|
* Ordering marker for modules that create typed objects: requiring `Schema` only orders after the
|
|
19
30
|
* schema PROVIDERS, which says nothing about `SchemaDefs`, the fellow consumer that registers them.
|
|
20
31
|
* `true` rather than `void` — the loader reads an `undefined` implementation as not contributed.
|
|
@@ -22,8 +33,21 @@ var Schema = Capability.make()(`${meta.profile.key}.capability.schema`);
|
|
|
22
33
|
var SchemaRegistered = Capability.makeSingleton()(`${meta.profile.key}.capability.schemaRegistered`);
|
|
23
34
|
var Migration = Capability.make()(`${meta.profile.key}.capability.migration`);
|
|
24
35
|
var AccountCache = Capability.makeSingleton()(`${meta.profile.key}.capability.accountCache`);
|
|
36
|
+
var OnIdentityDeleted = Capability.make()(`${meta.profile.key}.capability.onIdentityDeleted`);
|
|
25
37
|
var HubHttpClient = Capability.makeSingleton()(`${meta.profile.key}.capability.hubHttpClient`);
|
|
26
38
|
/**
|
|
39
|
+
* The client's runtime configuration, for consumers that need a config value (e.g. the EDGE URL)
|
|
40
|
+
* without depending on `@dxos/client`. Contributed once the client has initialized.
|
|
41
|
+
*/
|
|
42
|
+
var Config = Capability.makeSingleton()(`${meta.profile.key}.capability.config`);
|
|
43
|
+
/**
|
|
44
|
+
* The EDGE HTTP client, for consumers that call EDGE endpoints without depending on `@dxos/client`.
|
|
45
|
+
* Absent when the config names no EDGE URL.
|
|
46
|
+
*/
|
|
47
|
+
var EdgeHttpClient = Capability.makeSingleton()(`${meta.profile.key}.capability.edgeHttpClient`);
|
|
48
|
+
/** The cross-space ECHO graph, for imperative consumers that must find a space's database by id. */
|
|
49
|
+
var Hypergraph = Capability.makeSingleton()(`${meta.profile.key}.capability.hypergraph`);
|
|
50
|
+
/**
|
|
27
51
|
* The HALO Identity service instance, for imperative (non-React, non-Effect-layer) consumers
|
|
28
52
|
* that need identity access without depending on `@dxos/client`.
|
|
29
53
|
*/
|
|
@@ -31,6 +55,6 @@ var IdentityService = Capability.makeSingleton()(`${meta.profile.key}.capability
|
|
|
31
55
|
/** The HALO Space service instance, for imperative consumers. */
|
|
32
56
|
var SpaceService = Capability.makeSingleton()(`${meta.profile.key}.capability.spaceService`);
|
|
33
57
|
//#endregion
|
|
34
|
-
export { AccountCache, Client, HubHttpClient, IdentityService, Migration, Schema, SchemaRegistered, SpaceService, ClientCapabilities_exports as t };
|
|
58
|
+
export { AccountCache, Client, Config, EdgeHttpClient, HubHttpClient, Hypergraph, IdentityService, InitializeTimeout, Migration, OnIdentityDeleted, Schema, SchemaRegistered, SpaceService, ClientCapabilities_exports as t };
|
|
35
59
|
|
|
36
60
|
//# sourceMappingURL=ClientCapabilities.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientCapabilities.mjs","names":[],"sources":["../../src/types/ClientCapabilities.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Atom from 'effect/
|
|
1
|
+
{"version":3,"file":"ClientCapabilities.mjs","names":[],"sources":["../../src/types/ClientCapabilities.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\nimport type * as Atom from 'effect/reactivity/Atom';\n\nimport * as Capability from '@dxos/app-framework/Capability';\n// Aliased: unwrapping the enclosing `namespace` put these in the same scope as the\n// capabilities named after them.\nimport { type Client as Client$ } from '@dxos/client';\nimport { type Config as Config$ } from '@dxos/config';\nimport { type Type, type Hypergraph as Hypergraph$, type Migration as Migration$ } from '@dxos/echo';\nimport { type EdgeHttpClient as EdgeHttpClient$, type HubHttpClient as HubHttpClient$ } from '@dxos/edge-client';\nimport { type Identity as Identity$, type Space as Space$ } from '@dxos/halo';\n\nimport { meta } from '#meta';\n\nimport { type AccountCache as AccountCacheType } from './AccountCache.ts';\n\nexport const Client = Capability.makeSingleton<Client$>()(`${meta.profile.key}.capability.client`);\nexport const Schema = Capability.make<Type.AnyEntity[]>()(`${meta.profile.key}.capability.schema`);\n/**\n * The effective `initializeTimeout` the client capability resolved. Consumers that wait on\n * `client.waitUntilInitialized()` bound themselves by this rather than the default, so a host that\n * widens the client's initialization budget does not have its layers time out underneath it.\n */\nexport const InitializeTimeout = Capability.makeSingleton<number>()(`${meta.profile.key}.capability.initializeTimeout`);\n/**\n * Ordering marker for modules that create typed objects: requiring `Schema` only orders after the\n * schema PROVIDERS, which says nothing about `SchemaDefs`, the fellow consumer that registers them.\n * `true` rather than `void` — the loader reads an `undefined` implementation as not contributed.\n */\nexport const SchemaRegistered = Capability.makeSingleton<true>()(`${meta.profile.key}.capability.schemaRegistered`);\nexport const Migration = Capability.make<Migration$.Migration[]>()(`${meta.profile.key}.capability.migration`);\nexport const AccountCache = Capability.makeSingleton<Atom.Writable<AccountCacheType>>()(\n `${meta.profile.key}.capability.accountCache`,\n);\n/**\n * Runs after the local identity is deleted in place, before the flow that brings in the next one.\n * `target` names that flow — `deviceInvitation` or `recoverIdentity` — and is absent for a plain\n * logout, which leaves the app with no identity for a contributor (e.g. onboarding) to resolve.\n */\nexport type OnIdentityDeleted = (params: { target?: string }) => Effect.Effect<void, Error>;\nexport const OnIdentityDeleted = Capability.make<OnIdentityDeleted>()(\n `${meta.profile.key}.capability.onIdentityDeleted`,\n);\nexport const HubHttpClient = Capability.makeSingleton<HubHttpClient$>()(`${meta.profile.key}.capability.hubHttpClient`);\n\n/**\n * The client's runtime configuration, for consumers that need a config value (e.g. the EDGE URL)\n * without depending on `@dxos/client`. Contributed once the client has initialized.\n */\nexport const Config = Capability.makeSingleton<Config$>()(`${meta.profile.key}.capability.config`);\n/**\n * The EDGE HTTP client, for consumers that call EDGE endpoints without depending on `@dxos/client`.\n * Absent when the config names no EDGE URL.\n */\nexport const EdgeHttpClient = Capability.makeSingleton<EdgeHttpClient$>()(\n `${meta.profile.key}.capability.edgeHttpClient`,\n);\n/** The cross-space ECHO graph, for imperative consumers that must find a space's database by id. */\nexport const Hypergraph = Capability.makeSingleton<Hypergraph$.Hypergraph>()(\n `${meta.profile.key}.capability.hypergraph`,\n);\n\n/**\n * The HALO Identity service instance, for imperative (non-React, non-Effect-layer) consumers\n * that need identity access without depending on `@dxos/client`.\n */\nexport const IdentityService = Capability.makeSingleton<Identity$.ServiceApi>()(\n `${meta.profile.key}.capability.identityService`,\n);\n/** The HALO Space service instance, for imperative consumers. */\nexport const SpaceService = Capability.makeSingleton<Space$.ServiceApi>()(\n `${meta.profile.key}.capability.spaceService`,\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,IAAa,SAAS,WAAW,cAAuB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,mBAAmB;AACjG,IAAa,SAAS,WAAW,KAAuB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,mBAAmB;;;;;;AAMjG,IAAa,oBAAoB,WAAW,cAAsB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,8BAA8B;;;;;;AAMtH,IAAa,mBAAmB,WAAW,cAAoB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,6BAA6B;AAClH,IAAa,YAAY,WAAW,KAA6B,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,sBAAsB;AAC7G,IAAa,eAAe,WAAW,cAA+C,CAAC,CACrF,GAAG,KAAK,QAAQ,IAAI,yBACtB;AAOA,IAAa,oBAAoB,WAAW,KAAwB,CAAC,CACnE,GAAG,KAAK,QAAQ,IAAI,8BACtB;AACA,IAAa,gBAAgB,WAAW,cAA8B,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,0BAA0B;;;;;AAMtH,IAAa,SAAS,WAAW,cAAuB,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,mBAAmB;;;;;AAKjG,IAAa,iBAAiB,WAAW,cAA+B,CAAC,CACvE,GAAG,KAAK,QAAQ,IAAI,2BACtB;;AAEA,IAAa,aAAa,WAAW,cAAsC,CAAC,CAC1E,GAAG,KAAK,QAAQ,IAAI,uBACtB;;;;;AAMA,IAAa,kBAAkB,WAAW,cAAoC,CAAC,CAC7E,GAAG,KAAK,QAAQ,IAAI,4BACtB;;AAEA,IAAa,eAAe,WAAW,cAAiC,CAAC,CACvE,GAAG,KAAK,QAAQ,IAAI,yBACtB"}
|
|
@@ -5,7 +5,7 @@ import * as ActivationEvent from "@dxos/app-framework/ActivationEvent";
|
|
|
5
5
|
var ClientEvents_exports = /* @__PURE__ */ __exportAll({
|
|
6
6
|
IdentityCreated: () => IdentityCreated,
|
|
7
7
|
Initialized: () => Initialized,
|
|
8
|
-
|
|
8
|
+
SpacesAvailable: () => SpacesAvailable
|
|
9
9
|
});
|
|
10
10
|
/**
|
|
11
11
|
* Runtime event: `client.initialize()` (forked off the startup pass) has completed. Modules
|
|
@@ -14,8 +14,12 @@ var ClientEvents_exports = /* @__PURE__ */ __exportAll({
|
|
|
14
14
|
*/
|
|
15
15
|
var Initialized = ActivationEvent.make(`${meta.profile.key}.event.initialized`);
|
|
16
16
|
var IdentityCreated = ActivationEvent.make(`${meta.profile.key}.event.identityCreated`);
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Runtime event: the space list is observable. The spaces themselves may still be opening, so a
|
|
19
|
+
* module that reads a space's properties waits for that space rather than for this.
|
|
20
|
+
*/
|
|
21
|
+
var SpacesAvailable = ActivationEvent.make(`${meta.profile.key}.event.spacesAvailable`);
|
|
18
22
|
//#endregion
|
|
19
|
-
export { IdentityCreated, Initialized,
|
|
23
|
+
export { IdentityCreated, Initialized, SpacesAvailable, ClientEvents_exports as t };
|
|
20
24
|
|
|
21
25
|
//# sourceMappingURL=ClientEvents.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientEvents.mjs","names":[],"sources":["../../src/types/ClientEvents.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as ActivationEvent from '@dxos/app-framework/ActivationEvent';\n\nimport { meta } from '#meta';\n\n/**\n * Runtime event: `client.initialize()` (forked off the startup pass) has completed. Modules\n * whose activation bodies need an initialized client (sync `halo`/`spaces` reads) ride this\n * instead of the startup dependency pass, which no longer implies initialization.\n */\nexport const Initialized = ActivationEvent.make(`${meta.profile.key}.event.initialized`);\nexport const IdentityCreated = ActivationEvent.make(`${meta.profile.key}.event.identityCreated`);\nexport const
|
|
1
|
+
{"version":3,"file":"ClientEvents.mjs","names":[],"sources":["../../src/types/ClientEvents.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as ActivationEvent from '@dxos/app-framework/ActivationEvent';\n\nimport { meta } from '#meta';\n\n/**\n * Runtime event: `client.initialize()` (forked off the startup pass) has completed. Modules\n * whose activation bodies need an initialized client (sync `halo`/`spaces` reads) ride this\n * instead of the startup dependency pass, which no longer implies initialization.\n */\nexport const Initialized = ActivationEvent.make(`${meta.profile.key}.event.initialized`);\nexport const IdentityCreated = ActivationEvent.make(`${meta.profile.key}.event.identityCreated`);\n/**\n * Runtime event: the space list is observable. The spaces themselves may still be opening, so a\n * module that reads a space's properties waits for that space rather than for this.\n */\nexport const SpacesAvailable = ActivationEvent.make(`${meta.profile.key}.event.spacesAvailable`);\n"],"mappings":";;;;;;;;;;;;;;AAaA,IAAa,cAAc,gBAAgB,KAAK,GAAG,KAAK,QAAQ,IAAI,mBAAmB;AACvF,IAAa,kBAAkB,gBAAgB,KAAK,GAAG,KAAK,QAAQ,IAAI,uBAAuB;;;;;AAK/F,IAAa,kBAAkB,gBAAgB,KAAK,GAAG,KAAK,QAAQ,IAAI,uBAAuB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
|
|
2
2
|
import * as Capability from "@dxos/app-framework/Capability";
|
|
3
3
|
import { Identity } from "@dxos/halo";
|
|
4
|
-
import * as Operation from "@dxos/compute/Operation";
|
|
5
4
|
import * as Schema from "effect/Schema";
|
|
5
|
+
import * as Operation from "@dxos/compute/Operation";
|
|
6
6
|
import { DXN, IdentityDid, SpaceId } from "@dxos/keys";
|
|
7
|
-
//#region src/
|
|
8
|
-
var
|
|
7
|
+
//#region src/types/ClientOperation.ts
|
|
8
|
+
var ClientOperation_exports = /* @__PURE__ */ __exportAll({
|
|
9
9
|
CreateAgent: () => CreateAgent,
|
|
10
10
|
CreateIdentity: () => CreateIdentity,
|
|
11
11
|
CreatePasskey: () => CreatePasskey,
|
|
@@ -102,7 +102,11 @@ var ResetStorage = Operation.make({
|
|
|
102
102
|
icon: "ph--warning--regular"
|
|
103
103
|
},
|
|
104
104
|
services: [Capability.Service],
|
|
105
|
-
input: Schema.Struct({
|
|
105
|
+
input: Schema.Struct({
|
|
106
|
+
mode: Schema.optional(Schema.String),
|
|
107
|
+
/** Device invitation to accept once the identity is deleted (`join-new-identity` only). */
|
|
108
|
+
invitationCode: Schema.optional(Schema.String)
|
|
109
|
+
}),
|
|
106
110
|
output: Schema.Void
|
|
107
111
|
});
|
|
108
112
|
var CreateAgent = Operation.make({
|
|
@@ -163,7 +167,7 @@ var RevokeRecoveryCredential = Operation.make({
|
|
|
163
167
|
* `PublicKey.from` silently drops non-hex characters rather than rejecting them, so an
|
|
164
168
|
* unvalidated string would decode to some other key instead of failing.
|
|
165
169
|
*/
|
|
166
|
-
lookupKey: Schema.String.check(Schema.isPattern(/^[0-9a-fA-F]{64}$/)) }),
|
|
170
|
+
lookupKey: Schema.String.check(Schema.isPattern(/^[0-9a-fA-F]{64}$/u)) }),
|
|
167
171
|
output: Schema.Void
|
|
168
172
|
});
|
|
169
173
|
var RedeemPasskey = Operation.make({
|
|
@@ -187,6 +191,6 @@ var RedeemToken = Operation.make({
|
|
|
187
191
|
output: Schema.Void
|
|
188
192
|
});
|
|
189
193
|
//#endregion
|
|
190
|
-
export {
|
|
194
|
+
export { CreateAgent, CreateIdentity, CreatePasskey, CreateRecoveryCode, GrantServiceAccess, JoinIdentity, OpenUsage, RecoverIdentity, RedeemPasskey, RedeemToken, ResetStorage, RevokeRecoveryCredential, ShareIdentity, UpdateProfile, ClientOperation_exports as t };
|
|
191
195
|
|
|
192
|
-
//# sourceMappingURL=
|
|
196
|
+
//# sourceMappingURL=ClientOperation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientOperation.mjs","names":[],"sources":["../../src/types/ClientOperation.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as Operation from '@dxos/compute/Operation';\nimport { Identity } from '@dxos/halo';\nimport { DXN, IdentityDid, SpaceId } from '@dxos/keys';\n\nconst IdentitySchema = Schema.Struct({\n identityDid: IdentityDid,\n spaceId: Schema.optional(SpaceId),\n profile: Schema.optional(\n Schema.Struct({\n displayName: Schema.optional(Schema.String),\n avatarCid: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Record(Schema.String, Schema.Any)),\n }),\n ),\n});\n\nconst ProfileSchema = Schema.Struct({\n displayName: Schema.optional(Schema.String),\n avatarCid: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Record(Schema.String, Schema.Any)),\n});\n\nexport const CreateIdentity = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.createIdentity'),\n name: 'Create Identity',\n icon: 'ph--user--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: ProfileSchema,\n output: IdentitySchema,\n});\n\nexport const UpdateProfile = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.updateProfile'),\n name: 'Update Profile',\n icon: 'ph--user--regular',\n },\n services: [Identity.Service],\n input: ProfileSchema,\n output: Schema.Void,\n});\n\nexport const JoinIdentity = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.joinIdentity'),\n name: 'Join Identity',\n icon: 'ph--sign-in--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n invitationCode: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n});\n\nexport const ShareIdentity = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.shareIdentity'),\n name: 'Share Identity',\n icon: 'ph--share-network--regular',\n },\n services: [Capability.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const OpenUsage = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.openUsage'),\n name: 'Open Usage',\n icon: 'ph--chart-bar--regular',\n },\n services: [Capability.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const RecoverIdentity = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.recoverIdentity'),\n name: 'Recover Identity',\n icon: 'ph--key--regular',\n },\n services: [Capability.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const ResetStorage = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.resetStorage'),\n name: 'Reset Storage',\n icon: 'ph--warning--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n mode: Schema.optional(Schema.String),\n /** Device invitation to accept once the identity is deleted (`join-new-identity` only). */\n invitationCode: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n});\n\nexport const CreateAgent = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.createAgent'),\n name: 'Create Agent',\n icon: 'ph--brain--regular',\n },\n services: [Capability.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const GrantServiceAccess = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.grantServiceAccess'),\n name: 'Grant Service Access',\n icon: 'ph--key--regular',\n },\n services: [Identity.Service],\n input: Schema.Struct({\n /** Target server name (e.g. `hub.dxos.network`). */\n serverName: Schema.String,\n /** Capabilities to grant (e.g. `['composer:beta']`). */\n capabilities: Schema.Array(Schema.String),\n }),\n output: Schema.Void,\n});\n\nexport const CreateRecoveryCode = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.createRecoveryCode'),\n name: 'Create Recovery Code',\n icon: 'ph--key--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const CreatePasskey = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.createPasskey'),\n name: 'Create Passkey',\n icon: 'ph--key--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const RevokeRecoveryCredential = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.revokeRecoveryCredential'),\n name: 'Revoke Recovery Credential',\n icon: 'ph--key--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: Schema.Struct({\n /**\n * Lookup key of the credential to revoke, as hex. Constrained to a full key because\n * `PublicKey.from` silently drops non-hex characters rather than rejecting them, so an\n * unvalidated string would decode to some other key instead of failing.\n */\n lookupKey: Schema.String.check(Schema.isPattern(/^[0-9a-fA-F]{64}$/u)),\n }),\n output: Schema.Void,\n});\n\nexport const RedeemPasskey = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.redeemPasskey'),\n name: 'Redeem Passkey',\n icon: 'ph--key--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: Schema.Void,\n output: Schema.Void,\n});\n\nexport const RedeemToken = Operation.make({\n meta: {\n key: DXN.make('org.dxos.operation.client.redeemToken'),\n name: 'Redeem Token',\n icon: 'ph--lock--regular',\n },\n services: [Capability.Service, Identity.Service],\n input: Schema.Struct({\n token: Schema.String,\n }),\n output: Schema.Void,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,iBAAiB,OAAO,OAAO;CACnC,aAAa;CACb,SAAS,OAAO,SAAS,OAAO;CAChC,SAAS,OAAO,SACd,OAAO,OAAO;EACZ,aAAa,OAAO,SAAS,OAAO,MAAM;EAC1C,WAAW,OAAO,SAAS,OAAO,MAAM;EACxC,MAAM,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,GAAG,CAAC;CAChE,CAAC,CACH;AACF,CAAC;AAED,IAAM,gBAAgB,OAAO,OAAO;CAClC,aAAa,OAAO,SAAS,OAAO,MAAM;CAC1C,WAAW,OAAO,SAAS,OAAO,MAAM;CACxC,MAAM,OAAO,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,GAAG,CAAC;AAChE,CAAC;AAED,IAAa,iBAAiB,UAAU,KAAK;CAC3C,MAAM;EACJ,KAAK,IAAI,KAAK,0CAA0C;EACxD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO;CACP,QAAQ;AACV,CAAC;AAED,IAAa,gBAAgB,UAAU,KAAK;CAC1C,MAAM;EACJ,KAAK,IAAI,KAAK,yCAAyC;EACvD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,SAAS,OAAO;CAC3B,OAAO;CACP,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,eAAe,UAAU,KAAK;CACzC,MAAM;EACJ,KAAK,IAAI,KAAK,wCAAwC;EACtD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO,OAAO,EACnB,gBAAgB,OAAO,SAAS,OAAO,MAAM,EAC/C,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,gBAAgB,UAAU,KAAK;CAC1C,MAAM;EACJ,KAAK,IAAI,KAAK,yCAAyC;EACvD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,YAAY,UAAU,KAAK;CACtC,MAAM;EACJ,KAAK,IAAI,KAAK,qCAAqC;EACnD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,kBAAkB,UAAU,KAAK;CAC5C,MAAM;EACJ,KAAK,IAAI,KAAK,2CAA2C;EACzD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,eAAe,UAAU,KAAK;CACzC,MAAM;EACJ,KAAK,IAAI,KAAK,wCAAwC;EACtD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO,OAAO;EACnB,MAAM,OAAO,SAAS,OAAO,MAAM;;EAEnC,gBAAgB,OAAO,SAAS,OAAO,MAAM;CAC/C,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,cAAc,UAAU,KAAK;CACxC,MAAM;EACJ,KAAK,IAAI,KAAK,uCAAuC;EACrD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,qBAAqB,UAAU,KAAK;CAC/C,MAAM;EACJ,KAAK,IAAI,KAAK,8CAA8C;EAC5D,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,SAAS,OAAO;CAC3B,OAAO,OAAO,OAAO;;EAEnB,YAAY,OAAO;;EAEnB,cAAc,OAAO,MAAM,OAAO,MAAM;CAC1C,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,qBAAqB,UAAU,KAAK;CAC/C,MAAM;EACJ,KAAK,IAAI,KAAK,8CAA8C;EAC5D,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,gBAAgB,UAAU,KAAK;CAC1C,MAAM;EACJ,KAAK,IAAI,KAAK,yCAAyC;EACvD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,2BAA2B,UAAU,KAAK;CACrD,MAAM;EACJ,KAAK,IAAI,KAAK,oDAAoD;EAClE,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO,OAAO,OAAO;;;;;;AAMnB,WAAW,OAAO,OAAO,MAAM,OAAO,UAAU,oBAAoB,CAAC,EACvE,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,gBAAgB,UAAU,KAAK;CAC1C,MAAM;EACJ,KAAK,IAAI,KAAK,yCAAyC;EACvD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO,OAAO;CACd,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,cAAc,UAAU,KAAK;CACxC,MAAM;EACJ,KAAK,IAAI,KAAK,uCAAuC;EACrD,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,SAAS,SAAS,OAAO;CAC/C,OAAO,OAAO,OAAO,EACnB,OAAO,OAAO,OAChB,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientOptions.mjs","names":[],"sources":["../../src/types/ClientOptions.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport { type Client, type ClientOptions } from '@dxos/client';\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * A client to adopt instead of constructing one, so a host can start `initialize()` at entry\n * rather than when activation reaches this lazily-imported module. `@synchronized`, so the\n * plugin's own call joins it; lifecycle stays with the plugin, which destroys it on teardown.\n */\n client?: Client;\n\n /**\n * Whether the navigation handler consumes invitation codes from URL query params.\n * Disable when another plugin (e.g. plugin-onboarding) owns the invitation URL flow.\n * @default true\n */\n invitationUrlHandler?: boolean;\n\n /**\n * Base origin for the invitation link.\n */\n shareableLinkOrigin?: string;\n\n /**\n * Surface the identity-swapping actions kept for testing: join another identity by device\n * invitation, or restore one from a recovery code. Both wipe local storage before they run, so\n * an app whose onboarding gate offers the same flows on a clean profile should pass the inverse\n * of that gate's condition rather than expose them to real users.\n * @default false\n */\n identityTestActions?: boolean;\n\n /**\n * Path for the invitation link.\n */\n invitationPath?: string;\n\n /**\n * Query parameter for the invitation code.\n */\n invitationProp?: string;\n\n /**\n * Run after the client has been initialized.\n * Plugin context is provided so capabilities are accessible.\n */\n onClientInitialized?: (params: { client: Client }) => Effect.Effect<void, Error | never, Capability.Service | never>;\n\n /**\n * Called when the forked `client.initialize()` fails or exceeds `initializeTimeout`.\n *\n * The initialization runs outside the render tree, so nothing surfaces a failure on its own —\n * consumers suspended on the client simply keep waiting. Apps supply this to raise it as a\n * fatal error (Composer shows the reset dialog).\n */\n onClientInitializationError?: (params: {\n error: unknown;\n }) => Effect.Effect<void, Error | never, Capability.Service | never>;\n\n /**\n * Bounds the wait on `client.initialize()` before `onClientInitializationError` fires.\n * @default INITIALIZE_TIMEOUT\n */\n initializeTimeout?: number;\n\n /**\n * Gate the contributed `ClientService` on initialization, so resolving it yields a client whose\n * `halo`/`spaces`/`services` getters are safe to touch.\n *\n * For imperative hosts (the CLI): a command body runs straight through, so an ungated service\n * hands it a client whose getters still throw `Client not initialized`. Leave it off in the app,\n * where the forked initialization is the point — React consumers suspend on the client instead,\n * and blocking the service would stall the boot waterfall.\n *\n * @default false\n */\n awaitInitialization?: boolean;\n\n /**\n * Called when spaces are ready.\n * Plugin context is provided so capabilities are accessible.\n */\n
|
|
1
|
+
{"version":3,"file":"ClientOptions.mjs","names":[],"sources":["../../src/types/ClientOptions.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Effect from 'effect/Effect';\n\nimport * as Capability from '@dxos/app-framework/Capability';\nimport { type Client, type ClientOptions } from '@dxos/client';\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * A client to adopt instead of constructing one, so a host can start `initialize()` at entry\n * rather than when activation reaches this lazily-imported module. `@synchronized`, so the\n * plugin's own call joins it; lifecycle stays with the plugin, which destroys it on teardown.\n */\n client?: Client;\n\n /**\n * Whether the navigation handler consumes invitation codes from URL query params.\n * Disable when another plugin (e.g. plugin-onboarding) owns the invitation URL flow.\n * @default true\n */\n invitationUrlHandler?: boolean;\n\n /**\n * Base origin for the invitation link.\n */\n shareableLinkOrigin?: string;\n\n /**\n * Surface the identity-swapping actions kept for testing: join another identity by device\n * invitation, or restore one from a recovery code. Both wipe local storage before they run, so\n * an app whose onboarding gate offers the same flows on a clean profile should pass the inverse\n * of that gate's condition rather than expose them to real users.\n * @default false\n */\n identityTestActions?: boolean;\n\n /**\n * Path for the invitation link.\n */\n invitationPath?: string;\n\n /**\n * Query parameter for the invitation code.\n */\n invitationProp?: string;\n\n /**\n * Run after the client has been initialized.\n * Plugin context is provided so capabilities are accessible.\n */\n onClientInitialized?: (params: { client: Client }) => Effect.Effect<void, Error | never, Capability.Service | never>;\n\n /**\n * Called when the forked `client.initialize()` fails or exceeds `initializeTimeout`.\n *\n * The initialization runs outside the render tree, so nothing surfaces a failure on its own —\n * consumers suspended on the client simply keep waiting. Apps supply this to raise it as a\n * fatal error (Composer shows the reset dialog).\n */\n onClientInitializationError?: (params: {\n error: unknown;\n }) => Effect.Effect<void, Error | never, Capability.Service | never>;\n\n /**\n * Bounds the wait on `client.initialize()` before `onClientInitializationError` fires.\n * @default INITIALIZE_TIMEOUT\n */\n initializeTimeout?: number;\n\n /**\n * Gate the contributed `ClientService` on initialization, so resolving it yields a client whose\n * `halo`/`spaces`/`services` getters are safe to touch.\n *\n * For imperative hosts (the CLI): a command body runs straight through, so an ungated service\n * hands it a client whose getters still throw `Client not initialized`. Leave it off in the app,\n * where the forked initialization is the point — React consumers suspend on the client instead,\n * and blocking the service would stall the boot waterfall.\n *\n * @default false\n */\n awaitInitialization?: boolean;\n\n /**\n * Called when spaces are ready.\n * Plugin context is provided so capabilities are accessible.\n */\n onSpacesAvailable?: (params: { client: Client }) => Effect.Effect<void, Error | never, Capability.Service | never>;\n};\n"],"mappings":""}
|
|
@@ -1,42 +1,99 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
|
|
2
|
-
import
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { BaseError, isCancellation } from "@dxos/errors";
|
|
4
|
+
import * as Duration from "effect/Duration";
|
|
5
|
+
import { log } from "@dxos/log";
|
|
6
|
+
import * as NativePasskey from "@dxos/app-toolkit/NativePasskey";
|
|
3
7
|
//#region src/types/PasskeyError.ts
|
|
4
8
|
var PasskeyError_exports = /* @__PURE__ */ __exportAll({
|
|
5
9
|
Dismissed: () => Dismissed,
|
|
6
10
|
LoginFailed: () => LoginFailed,
|
|
11
|
+
NATIVE_PROMPT_TIMEOUT: () => NATIVE_PROMPT_TIMEOUT,
|
|
12
|
+
RegistrationFailed: () => RegistrationFailed,
|
|
7
13
|
Rejected: () => Rejected,
|
|
14
|
+
TimedOut: () => TimedOut,
|
|
15
|
+
Unavailable: () => Unavailable,
|
|
8
16
|
classify: () => classify,
|
|
9
|
-
fromAssertion: () => fromAssertion
|
|
17
|
+
fromAssertion: () => fromAssertion,
|
|
18
|
+
fromRegistration: () => fromRegistration,
|
|
19
|
+
report: () => report,
|
|
20
|
+
timeoutNativePrompt: () => timeoutNativePrompt
|
|
10
21
|
});
|
|
22
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-client/src/types/PasskeyError.ts";
|
|
11
23
|
/**
|
|
12
24
|
* The platform prompt produced no assertion. WebAuthn reports a dismissed prompt and
|
|
13
25
|
* "this device has no passkey for this site" identically, so the two cannot be told apart.
|
|
14
26
|
*/
|
|
15
|
-
var Dismissed = class extends BaseError.extend("PasskeyDismissedError", "No passkey was presented") {
|
|
27
|
+
var Dismissed = class extends BaseError.extend("PasskeyDismissedError", "No passkey was presented") {
|
|
28
|
+
/** Marks a dismissal as a cancellation so a generic reporter (the process runtime) can see it too. */
|
|
29
|
+
cancellation = true;
|
|
30
|
+
};
|
|
16
31
|
/** The assertion was refused: the passkey is not registered as a recovery credential for any identity. */
|
|
17
32
|
var Rejected = class extends BaseError.extend("PasskeyRejectedError", "Passkey was not accepted") {};
|
|
18
33
|
/** Passkey login failed before an assertion could be checked (service unreachable, unusable authenticator response). */
|
|
19
34
|
var LoginFailed = class extends BaseError.extend("PasskeyLoginError", "Passkey login failed") {};
|
|
35
|
+
/** Creating a passkey failed for a reason other than the user dismissing the prompt. */
|
|
36
|
+
var RegistrationFailed = class extends BaseError.extend("PasskeyRegistrationError", "Passkey could not be created") {};
|
|
37
|
+
/** The native prompt never answered. The bridge cannot cancel it, so its sheet may still be on screen. */
|
|
38
|
+
var TimedOut = class extends BaseError.extend("PasskeyTimedOutError", "The passkey prompt did not respond") {};
|
|
39
|
+
/** This host cannot complete a passkey request, so none was started. */
|
|
40
|
+
var Unavailable = class extends BaseError.extend("PasskeyUnavailableError", "Passkeys are not available in this build") {};
|
|
41
|
+
/** Longest a native prompt may stay unanswered; the WebAuthn ceremony ceiling. */
|
|
42
|
+
var NATIVE_PROMPT_TIMEOUT = Duration.minutes(5);
|
|
43
|
+
/** Abandon a native passkey call that never answers. */
|
|
44
|
+
var timeoutNativePrompt = (effect, duration = NATIVE_PROMPT_TIMEOUT) => Effect.timeoutOrElse(effect, {
|
|
45
|
+
duration,
|
|
46
|
+
orElse: () => Effect.fail(new TimedOut())
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* What the macOS bridge rejects with for every `ASAuthorizationError`, a cancel included: it collapses
|
|
50
|
+
* each into one plain string per ceremony, so a cancel cannot be told apart from a failure.
|
|
51
|
+
*/
|
|
52
|
+
var NATIVE_BRIDGE_REJECTIONS = ["Registration failed", "Login failed"];
|
|
20
53
|
/**
|
|
21
|
-
*
|
|
22
|
-
* "no credential for this site" as the same `NotAllowedError
|
|
23
|
-
*
|
|
54
|
+
* Whether the authenticator rejected because the prompt was dismissed. WebAuthn reports a dismissed
|
|
55
|
+
* prompt and "no credential for this site" as the same `NotAllowedError`; the macOS bridge's generic
|
|
56
|
+
* rejections are just as ambiguous, so both read as dismissals.
|
|
24
57
|
*/
|
|
25
|
-
var
|
|
58
|
+
var isDismissal = (error) => {
|
|
59
|
+
if (NativePasskey.isNativePasskeyError(error)) return error.cancelled;
|
|
26
60
|
const name = error instanceof DOMException ? error.name : void 0;
|
|
27
|
-
|
|
28
|
-
return new LoginFailed({ cause: error });
|
|
61
|
+
return name === "NotAllowedError" || name === "AbortError" || NATIVE_BRIDGE_REJECTIONS.includes(String(error)) || /cancell?ed/i.test(String(error));
|
|
29
62
|
};
|
|
63
|
+
/** Classify a rejection from the authenticator while logging in. */
|
|
64
|
+
var fromAssertion = (error) => isDismissal(error) ? new Dismissed({ cause: error }) : new LoginFailed({ cause: error });
|
|
65
|
+
/** Classify a rejection from the authenticator while creating a passkey. */
|
|
66
|
+
var fromRegistration = (error) => isDismissal(error) ? new Dismissed({ cause: error }) : new RegistrationFailed({ cause: error });
|
|
30
67
|
/**
|
|
31
|
-
* Classify an error returned by the `RedeemPasskey` operation.
|
|
68
|
+
* Classify an error returned by the `RedeemPasskey` or `CreatePasskey` operation.
|
|
32
69
|
* Anything unrecognized is reported as a generic failure rather than swallowed.
|
|
33
70
|
*/
|
|
34
71
|
var classify = (error) => {
|
|
35
|
-
if (Dismissed.is(error)) return "dismissed";
|
|
72
|
+
if (Dismissed.is(error) || isCancellation(error)) return "dismissed";
|
|
36
73
|
if (Rejected.is(error)) return "rejected";
|
|
37
74
|
return "failed";
|
|
38
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Report a failed redemption and classify it for the UI. A dismissed prompt is the user closing a
|
|
78
|
+
* dialog, so it reports at `info` — at `error` it swamps the production error stream (DX-1281).
|
|
79
|
+
*/
|
|
80
|
+
var report = (error) => {
|
|
81
|
+
const failure = classify(error);
|
|
82
|
+
if (failure === "dismissed") log.info("passkey prompt dismissed", { error }, {
|
|
83
|
+
"~LogMeta": "~LogMeta",
|
|
84
|
+
F: __dxlog_file,
|
|
85
|
+
L: 116,
|
|
86
|
+
S: void 0
|
|
87
|
+
});
|
|
88
|
+
else log.catch(error, void 0, {
|
|
89
|
+
"~LogMeta": "~LogMeta",
|
|
90
|
+
F: __dxlog_file,
|
|
91
|
+
L: 118,
|
|
92
|
+
S: void 0
|
|
93
|
+
});
|
|
94
|
+
return failure;
|
|
95
|
+
};
|
|
39
96
|
//#endregion
|
|
40
|
-
export { Dismissed, LoginFailed, Rejected, classify, fromAssertion, PasskeyError_exports as t };
|
|
97
|
+
export { Dismissed, LoginFailed, NATIVE_PROMPT_TIMEOUT, RegistrationFailed, Rejected, TimedOut, Unavailable, classify, fromAssertion, fromRegistration, report, PasskeyError_exports as t, timeoutNativePrompt };
|
|
41
98
|
|
|
42
99
|
//# sourceMappingURL=PasskeyError.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasskeyError.mjs","names":[],"sources":["../../src/types/PasskeyError.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { BaseError } from '@dxos/errors';\n\n/**\n * The platform prompt produced no assertion. WebAuthn reports a dismissed prompt and\n * \"this device has no passkey for this site\" identically, so the two cannot be told apart.\n */\nexport class Dismissed
|
|
1
|
+
{"version":3,"file":"PasskeyError.mjs","names":[],"sources":["../../src/types/PasskeyError.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\n\nimport * as NativePasskey from '@dxos/app-toolkit/NativePasskey';\nimport { BaseError, type Cancellation, isCancellation } from '@dxos/errors';\nimport { log } from '@dxos/log';\n\n/**\n * The platform prompt produced no assertion. WebAuthn reports a dismissed prompt and\n * \"this device has no passkey for this site\" identically, so the two cannot be told apart.\n */\nexport class Dismissed\n extends BaseError.extend('PasskeyDismissedError', 'No passkey was presented')\n implements Cancellation\n{\n /** Marks a dismissal as a cancellation so a generic reporter (the process runtime) can see it too. */\n readonly cancellation = true as const;\n}\n\n/** The assertion was refused: the passkey is not registered as a recovery credential for any identity. */\nexport class Rejected extends BaseError.extend('PasskeyRejectedError', 'Passkey was not accepted') {}\n\n/** Passkey login failed before an assertion could be checked (service unreachable, unusable authenticator response). */\nexport class LoginFailed extends BaseError.extend('PasskeyLoginError', 'Passkey login failed') {}\n\n/** Creating a passkey failed for a reason other than the user dismissing the prompt. */\nexport class RegistrationFailed extends BaseError.extend('PasskeyRegistrationError', 'Passkey could not be created') {}\n\n/** The native prompt never answered. The bridge cannot cancel it, so its sheet may still be on screen. */\nexport class TimedOut extends BaseError.extend('PasskeyTimedOutError', 'The passkey prompt did not respond') {}\n\n/** This host cannot complete a passkey request, so none was started. */\nexport class Unavailable extends BaseError.extend(\n 'PasskeyUnavailableError',\n 'Passkeys are not available in this build',\n) {}\n\n/** Every way a passkey ceremony can fail, as `ConfigError.ConfigError` names its own union. */\nexport type PasskeyError = Dismissed | Rejected | LoginFailed | RegistrationFailed | TimedOut | Unavailable;\n\n/** Longest a native prompt may stay unanswered; the WebAuthn ceremony ceiling. */\nexport const NATIVE_PROMPT_TIMEOUT = Duration.minutes(5);\n\n/** Abandon a native passkey call that never answers. */\nexport const timeoutNativePrompt = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n duration: Duration.Input = NATIVE_PROMPT_TIMEOUT,\n): Effect.Effect<A, E | TimedOut, R> =>\n Effect.timeoutOrElse(effect, { duration, orElse: () => Effect.fail(new TimedOut()) });\n\n/** Discriminates a passkey failure so callers can pick a message without matching on error names. */\nexport type Failure = 'dismissed' | 'rejected' | 'failed';\n\n/**\n * What the macOS bridge rejects with for every `ASAuthorizationError`, a cancel included: it collapses\n * each into one plain string per ceremony, so a cancel cannot be told apart from a failure.\n */\n// TODO(wittjosiah): Patch tauri-plugin-macos-passkey to pass `ASAuthorizationError.code` through so only a\n// cancel (1001) reads as a dismissal; today a domain-association failure is silenced along with it.\nconst NATIVE_BRIDGE_REJECTIONS = ['Registration failed', 'Login failed'];\n\n/**\n * Whether the authenticator rejected because the prompt was dismissed. WebAuthn reports a dismissed\n * prompt and \"no credential for this site\" as the same `NotAllowedError`; the macOS bridge's generic\n * rejections are just as ambiguous, so both read as dismissals.\n */\nconst isDismissal = (error: unknown): boolean => {\n if (NativePasskey.isNativePasskeyError(error)) {\n return error.cancelled;\n }\n\n const name = error instanceof DOMException ? error.name : undefined;\n return (\n name === 'NotAllowedError' ||\n name === 'AbortError' ||\n NATIVE_BRIDGE_REJECTIONS.includes(String(error)) ||\n /cancell?ed/i.test(String(error))\n );\n};\n\n/** Classify a rejection from the authenticator while logging in. */\nexport const fromAssertion = (error: unknown): Dismissed | LoginFailed =>\n isDismissal(error) ? new Dismissed({ cause: error }) : new LoginFailed({ cause: error });\n\n/** Classify a rejection from the authenticator while creating a passkey. */\nexport const fromRegistration = (error: unknown): Dismissed | RegistrationFailed =>\n isDismissal(error) ? new Dismissed({ cause: error }) : new RegistrationFailed({ cause: error });\n\n/**\n * Classify an error returned by the `RedeemPasskey` or `CreatePasskey` operation.\n * Anything unrecognized is reported as a generic failure rather than swallowed.\n */\nexport const classify = (error: unknown): Failure => {\n if (Dismissed.is(error) || isCancellation(error)) {\n return 'dismissed';\n }\n if (Rejected.is(error)) {\n return 'rejected';\n }\n return 'failed';\n};\n\n/**\n * Report a failed redemption and classify it for the UI. A dismissed prompt is the user closing a\n * dialog, so it reports at `info` — at `error` it swamps the production error stream (DX-1281).\n */\nexport const report = (error: unknown): Failure => {\n const failure = classify(error);\n if (failure === 'dismissed') {\n log.info('passkey prompt dismissed', { error });\n } else {\n log.catch(error);\n }\n\n return failure;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAa,YAAb,cACU,UAAU,OAAO,yBAAyB,0BAA0B,CAAA,CAE9E;;CAEE,eAAwB;AAC1B;;AAGA,IAAa,WAAb,cAA8B,UAAU,OAAO,wBAAwB,0BAA0B,CAAC,CAAC,CAAC;;AAGpG,IAAa,cAAb,cAAiC,UAAU,OAAO,qBAAqB,sBAAsB,CAAC,CAAC,CAAC;;AAGhG,IAAa,qBAAb,cAAwC,UAAU,OAAO,4BAA4B,8BAA8B,CAAC,CAAC,CAAC;;AAGtH,IAAa,WAAb,cAA8B,UAAU,OAAO,wBAAwB,oCAAoC,CAAC,CAAC,CAAC;;AAG9G,IAAa,cAAb,cAAiC,UAAU,OACzC,2BACA,0CACF,CAAC,CAAC,CAAC;;AAMH,IAAa,wBAAwB,SAAS,QAAQ,CAAC;;AAGvD,IAAa,uBACX,QACA,WAA2B,0BAE3B,OAAO,cAAc,QAAQ;CAAE;CAAU,cAAc,OAAO,KAAK,IAAI,SAAS,CAAC;AAAE,CAAC;;;;;AAWtF,IAAM,2BAA2B,CAAC,uBAAuB,cAAc;;;;;;AAOvE,IAAM,eAAe,UAA4B;CAC/C,IAAI,cAAc,qBAAqB,KAAK,GAC1C,OAAO,MAAM;CAGf,MAAM,OAAO,iBAAiB,eAAe,MAAM,OAAO,KAAA;CAC1D,OACE,SAAS,qBACT,SAAS,gBACT,yBAAyB,SAAS,OAAO,KAAK,CAAC,KAC/C,cAAc,KAAK,OAAO,KAAK,CAAC;AAEpC;;AAGA,IAAa,iBAAiB,UAC5B,YAAY,KAAK,IAAI,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,OAAO,MAAM,CAAC;;AAGzF,IAAa,oBAAoB,UAC/B,YAAY,KAAK,IAAI,IAAI,UAAU,EAAE,OAAO,MAAM,CAAC,IAAI,IAAI,mBAAmB,EAAE,OAAO,MAAM,CAAC;;;;;AAMhG,IAAa,YAAY,UAA4B;CACnD,IAAI,UAAU,GAAG,KAAK,KAAK,eAAe,KAAK,GAC7C,OAAO;CAET,IAAI,SAAS,GAAG,KAAK,GACnB,OAAO;CAET,OAAO;AACT;;;;;AAMA,IAAa,UAAU,UAA4B;CACjD,MAAM,UAAU,SAAS,KAAK;CAC9B,IAAI,YAAY,aACd,IAAI,KAAK,4BAA4B,EAAE,MAAM,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,KAAA;CAAA,CAAC;MAE9C,IAAI,MAAM,OAAI,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,KAAA;CAAA,CAAC;CAGjB,OAAO;AACT"}
|