@agimon-ai/po-web-dashboard 0.0.0-alpha.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/LICENSE +29 -0
- package/README.md +10 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/core.cjs +222 -0
- package/dist/core.d.mts +21 -0
- package/dist/core.mjs +21 -0
- package/dist/index.cjs +546 -0
- package/dist/index.d.mts +81 -0
- package/dist/index.mjs +81 -0
- package/dist/testing.cjs +18 -0
- package/dist/testing.d.mts +6 -0
- package/dist/testing.mjs +6 -0
- package/dist/types/auth.cjs +20 -0
- package/dist/types/auth.cjs.map +1 -0
- package/dist/types/auth.d.mts +160 -0
- package/dist/types/auth.d.mts.map +1 -0
- package/dist/types/auth.mjs +19 -0
- package/dist/types/auth.mjs.map +1 -0
- package/dist/types/bridge.d.mts +18 -0
- package/dist/types/bridge.d.mts.map +1 -0
- package/dist/types/devProxy.cjs +41 -0
- package/dist/types/devProxy.cjs.map +1 -0
- package/dist/types/devProxy.d.mts +54 -0
- package/dist/types/devProxy.d.mts.map +1 -0
- package/dist/types/devProxy.mjs +39 -0
- package/dist/types/devProxy.mjs.map +1 -0
- package/dist/types/hub.cjs +220 -0
- package/dist/types/hub.cjs.map +1 -0
- package/dist/types/hub.d.mts +447 -0
- package/dist/types/hub.d.mts.map +1 -0
- package/dist/types/hub.mjs +179 -0
- package/dist/types/hub.mjs.map +1 -0
- package/dist/types/media.cjs +75 -0
- package/dist/types/media.cjs.map +1 -0
- package/dist/types/media.d.mts +22 -0
- package/dist/types/media.d.mts.map +1 -0
- package/dist/types/media.mjs +70 -0
- package/dist/types/media.mjs.map +1 -0
- package/dist/types/notification.cjs +19 -0
- package/dist/types/notification.cjs.map +1 -0
- package/dist/types/notification.d.mts +10 -0
- package/dist/types/notification.d.mts.map +1 -0
- package/dist/types/notification.mjs +19 -0
- package/dist/types/notification.mjs.map +1 -0
- package/dist/types/remoteAccess.cjs +92 -0
- package/dist/types/remoteAccess.cjs.map +1 -0
- package/dist/types/remoteAccess.d.mts +214 -0
- package/dist/types/remoteAccess.d.mts.map +1 -0
- package/dist/types/remoteAccess.mjs +68 -0
- package/dist/types/remoteAccess.mjs.map +1 -0
- package/dist/types/session.cjs +23 -0
- package/dist/types/session.cjs.map +1 -0
- package/dist/types/session.d.mts +29 -0
- package/dist/types/session.d.mts.map +1 -0
- package/dist/types/session.mjs +18 -0
- package/dist/types/session.mjs.map +1 -0
- package/dist/types/sessionMcp.d.mts +56 -0
- package/dist/types/sessionMcp.d.mts.map +1 -0
- package/dist/types/settings.cjs +18 -0
- package/dist/types/settings.cjs.map +1 -0
- package/dist/types/settings.d.mts +126 -0
- package/dist/types/settings.d.mts.map +1 -0
- package/dist/types/settings.mjs +12 -0
- package/dist/types/settings.mjs.map +1 -0
- package/dist/types.cjs +101 -0
- package/dist/types.d.mts +11 -0
- package/dist/types.mjs +9 -0
- package/dist/views.cjs +120 -0
- package/dist/views.d.mts +56 -0
- package/dist/views.mjs +56 -0
- package/dist/web/components/MascotMark.cjs +18 -0
- package/dist/web/components/MascotMark.cjs.map +1 -0
- package/dist/web/components/MascotMark.d.mts +9 -0
- package/dist/web/components/MascotMark.d.mts.map +1 -0
- package/dist/web/components/MascotMark.mjs +18 -0
- package/dist/web/components/MascotMark.mjs.map +1 -0
- package/dist/web/components/PluginSurface.cjs +15 -0
- package/dist/web/components/PluginSurface.cjs.map +1 -0
- package/dist/web/components/PluginSurface.d.mts +13 -0
- package/dist/web/components/PluginSurface.d.mts.map +1 -0
- package/dist/web/components/PluginSurface.mjs +15 -0
- package/dist/web/components/PluginSurface.mjs.map +1 -0
- package/dist/web/components/QrCode.cjs +37 -0
- package/dist/web/components/QrCode.cjs.map +1 -0
- package/dist/web/components/QrCode.d.mts +22 -0
- package/dist/web/components/QrCode.d.mts.map +1 -0
- package/dist/web/components/QrCode.mjs +37 -0
- package/dist/web/components/QrCode.mjs.map +1 -0
- package/dist/web/components/Remote.fixture.cjs +73 -0
- package/dist/web/components/Remote.fixture.cjs.map +1 -0
- package/dist/web/components/Remote.fixture.mjs +72 -0
- package/dist/web/components/Remote.fixture.mjs.map +1 -0
- package/dist/web/components/SessionMcp.cjs +279 -0
- package/dist/web/components/SessionMcp.cjs.map +1 -0
- package/dist/web/components/SessionMcp.d.mts +12 -0
- package/dist/web/components/SessionMcp.d.mts.map +1 -0
- package/dist/web/components/SessionMcp.mjs +278 -0
- package/dist/web/components/SessionMcp.mjs.map +1 -0
- package/dist/web/components/Story.fixture.cjs +124 -0
- package/dist/web/components/Story.fixture.cjs.map +1 -0
- package/dist/web/components/Story.fixture.d.mts +19 -0
- package/dist/web/components/Story.fixture.d.mts.map +1 -0
- package/dist/web/components/Story.fixture.mjs +119 -0
- package/dist/web/components/Story.fixture.mjs.map +1 -0
- package/dist/web/components/Template.fixture.cjs +67 -0
- package/dist/web/components/Template.fixture.cjs.map +1 -0
- package/dist/web/components/Template.fixture.d.mts +7 -0
- package/dist/web/components/Template.fixture.d.mts.map +1 -0
- package/dist/web/components/Template.fixture.mjs +65 -0
- package/dist/web/components/Template.fixture.mjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.cjs +23 -0
- package/dist/web/components/ToolRendererBoundary.cjs.map +1 -0
- package/dist/web/components/ToolRendererBoundary.d.mts +23 -0
- package/dist/web/components/ToolRendererBoundary.d.mts.map +1 -0
- package/dist/web/components/ToolRendererBoundary.mjs +23 -0
- package/dist/web/components/ToolRendererBoundary.mjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.cjs +271 -0
- package/dist/web/features/activity/ActivityDock.cjs.map +1 -0
- package/dist/web/features/activity/ActivityDock.d.mts +22 -0
- package/dist/web/features/activity/ActivityDock.d.mts.map +1 -0
- package/dist/web/features/activity/ActivityDock.mjs +271 -0
- package/dist/web/features/activity/ActivityDock.mjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.cjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.cjs.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts +16 -0
- package/dist/web/features/activity/ContextItemDialog.d.mts.map +1 -0
- package/dist/web/features/activity/ContextItemDialog.mjs +276 -0
- package/dist/web/features/activity/ContextItemDialog.mjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.cjs +248 -0
- package/dist/web/features/activity/ContextPanel.cjs.map +1 -0
- package/dist/web/features/activity/ContextPanel.d.mts +4 -0
- package/dist/web/features/activity/ContextPanel.d.mts.map +1 -0
- package/dist/web/features/activity/ContextPanel.mjs +248 -0
- package/dist/web/features/activity/ContextPanel.mjs.map +1 -0
- package/dist/web/features/activity/DockTabs.cjs +47 -0
- package/dist/web/features/activity/DockTabs.cjs.map +1 -0
- package/dist/web/features/activity/DockTabs.d.mts +9 -0
- package/dist/web/features/activity/DockTabs.d.mts.map +1 -0
- package/dist/web/features/activity/DockTabs.mjs +47 -0
- package/dist/web/features/activity/DockTabs.mjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.cjs +76 -0
- package/dist/web/features/connection/RefusedCard.cjs.map +1 -0
- package/dist/web/features/connection/RefusedCard.d.mts +5 -0
- package/dist/web/features/connection/RefusedCard.d.mts.map +1 -0
- package/dist/web/features/connection/RefusedCard.mjs +76 -0
- package/dist/web/features/connection/RefusedCard.mjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.cjs.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts +15 -0
- package/dist/web/features/dialogs/DialogOverlay.d.mts.map +1 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs +164 -0
- package/dist/web/features/dialogs/DialogOverlay.mjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.cjs +390 -0
- package/dist/web/features/leader/CommandPalette.cjs.map +1 -0
- package/dist/web/features/leader/CommandPalette.d.mts +14 -0
- package/dist/web/features/leader/CommandPalette.d.mts.map +1 -0
- package/dist/web/features/leader/CommandPalette.mjs +390 -0
- package/dist/web/features/leader/CommandPalette.mjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.cjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.cjs.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts +15 -0
- package/dist/web/features/remote/DevProxyTargets.d.mts.map +1 -0
- package/dist/web/features/remote/DevProxyTargets.mjs +122 -0
- package/dist/web/features/remote/DevProxyTargets.mjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.cjs +28 -0
- package/dist/web/features/remote/HandoverProgress.cjs.map +1 -0
- package/dist/web/features/remote/HandoverProgress.d.mts +12 -0
- package/dist/web/features/remote/HandoverProgress.d.mts.map +1 -0
- package/dist/web/features/remote/HandoverProgress.mjs +28 -0
- package/dist/web/features/remote/HandoverProgress.mjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.cjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts +5 -0
- package/dist/web/features/remote/PairedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/PairedDeviceList.mjs +37 -0
- package/dist/web/features/remote/PairedDeviceList.mjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.cjs.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts +11 -0
- package/dist/web/features/remote/PairingApprovalDialog.d.mts.map +1 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs +65 -0
- package/dist/web/features/remote/PairingApprovalDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessDialog.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs +83 -0
- package/dist/web/features/remote/RemoteAccessDialog.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts +11 -0
- package/dist/web/features/remote/RemoteAccessOptions.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs +154 -0
- package/dist/web/features/remote/RemoteAccessOptions.mjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.cjs.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts +5 -0
- package/dist/web/features/remote/RemoteAccessPairing.d.mts.map +1 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs +93 -0
- package/dist/web/features/remote/RemoteAccessPairing.mjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.cjs.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts +7 -0
- package/dist/web/features/remote/SandboxWorkspaces.d.mts.map +1 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs +87 -0
- package/dist/web/features/remote/SandboxWorkspaces.mjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs +65 -0
- package/dist/web/features/remote/TrustedDeviceList.cjs.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts +13 -0
- package/dist/web/features/remote/TrustedDeviceList.d.mts.map +1 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs +64 -0
- package/dist/web/features/remote/TrustedDeviceList.mjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.cjs +401 -0
- package/dist/web/features/selection/SelectionBar.cjs.map +1 -0
- package/dist/web/features/selection/SelectionBar.d.mts +14 -0
- package/dist/web/features/selection/SelectionBar.d.mts.map +1 -0
- package/dist/web/features/selection/SelectionBar.mjs +400 -0
- package/dist/web/features/selection/SelectionBar.mjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.cjs +31 -0
- package/dist/web/features/session/AgentLockPanel.cjs.map +1 -0
- package/dist/web/features/session/AgentLockPanel.mjs +31 -0
- package/dist/web/features/session/AgentLockPanel.mjs.map +1 -0
- package/dist/web/features/session/Composer.cjs +808 -0
- package/dist/web/features/session/Composer.cjs.map +1 -0
- package/dist/web/features/session/Composer.d.mts +21 -0
- package/dist/web/features/session/Composer.d.mts.map +1 -0
- package/dist/web/features/session/Composer.mjs +806 -0
- package/dist/web/features/session/Composer.mjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.cjs +47 -0
- package/dist/web/features/session/ComposerPrompt.cjs.map +1 -0
- package/dist/web/features/session/ComposerPrompt.d.mts +16 -0
- package/dist/web/features/session/ComposerPrompt.d.mts.map +1 -0
- package/dist/web/features/session/ComposerPrompt.mjs +47 -0
- package/dist/web/features/session/ComposerPrompt.mjs.map +1 -0
- package/dist/web/features/session/DormantPanel.cjs +61 -0
- package/dist/web/features/session/DormantPanel.cjs.map +1 -0
- package/dist/web/features/session/DormantPanel.d.mts +8 -0
- package/dist/web/features/session/DormantPanel.d.mts.map +1 -0
- package/dist/web/features/session/DormantPanel.mjs +61 -0
- package/dist/web/features/session/DormantPanel.mjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.cjs +128 -0
- package/dist/web/features/session/MentionPreviews.cjs.map +1 -0
- package/dist/web/features/session/MentionPreviews.d.mts +17 -0
- package/dist/web/features/session/MentionPreviews.d.mts.map +1 -0
- package/dist/web/features/session/MentionPreviews.mjs +127 -0
- package/dist/web/features/session/MentionPreviews.mjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.cjs +20 -0
- package/dist/web/features/session/MessageMarkdown.cjs.map +1 -0
- package/dist/web/features/session/MessageMarkdown.d.mts +19 -0
- package/dist/web/features/session/MessageMarkdown.d.mts.map +1 -0
- package/dist/web/features/session/MessageMarkdown.mjs +20 -0
- package/dist/web/features/session/MessageMarkdown.mjs.map +1 -0
- package/dist/web/features/session/QueueSheet.cjs +189 -0
- package/dist/web/features/session/QueueSheet.cjs.map +1 -0
- package/dist/web/features/session/QueueSheet.d.mts +16 -0
- package/dist/web/features/session/QueueSheet.d.mts.map +1 -0
- package/dist/web/features/session/QueueSheet.mjs +189 -0
- package/dist/web/features/session/QueueSheet.mjs.map +1 -0
- package/dist/web/features/session/SessionActivity.cjs +88 -0
- package/dist/web/features/session/SessionActivity.cjs.map +1 -0
- package/dist/web/features/session/SessionActivity.d.mts +16 -0
- package/dist/web/features/session/SessionActivity.d.mts.map +1 -0
- package/dist/web/features/session/SessionActivity.mjs +87 -0
- package/dist/web/features/session/SessionActivity.mjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.cjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.cjs.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts +16 -0
- package/dist/web/features/session/SessionTranscriptView.d.mts.map +1 -0
- package/dist/web/features/session/SessionTranscriptView.mjs +34 -0
- package/dist/web/features/session/SessionTranscriptView.mjs.map +1 -0
- package/dist/web/features/session/ThreadView.cjs +40 -0
- package/dist/web/features/session/ThreadView.cjs.map +1 -0
- package/dist/web/features/session/ThreadView.d.mts +18 -0
- package/dist/web/features/session/ThreadView.d.mts.map +1 -0
- package/dist/web/features/session/ThreadView.mjs +40 -0
- package/dist/web/features/session/ThreadView.mjs.map +1 -0
- package/dist/web/features/session/Timeline.cjs +620 -0
- package/dist/web/features/session/Timeline.cjs.map +1 -0
- package/dist/web/features/session/Timeline.d.mts +28 -0
- package/dist/web/features/session/Timeline.d.mts.map +1 -0
- package/dist/web/features/session/Timeline.mjs +619 -0
- package/dist/web/features/session/Timeline.mjs.map +1 -0
- package/dist/web/features/session/ToolCard.cjs +210 -0
- package/dist/web/features/session/ToolCard.cjs.map +1 -0
- package/dist/web/features/session/ToolCard.d.mts +16 -0
- package/dist/web/features/session/ToolCard.d.mts.map +1 -0
- package/dist/web/features/session/ToolCard.mjs +210 -0
- package/dist/web/features/session/ToolCard.mjs.map +1 -0
- package/dist/web/features/session/session.fixture.cjs +76 -0
- package/dist/web/features/session/session.fixture.cjs.map +1 -0
- package/dist/web/features/session/session.fixture.d.mts +6 -0
- package/dist/web/features/session/session.fixture.d.mts.map +1 -0
- package/dist/web/features/session/session.fixture.mjs +74 -0
- package/dist/web/features/session/session.fixture.mjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts +9 -0
- package/dist/web/features/sessions/NewSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs +70 -0
- package/dist/web/features/sessions/NewSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.cjs.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts +14 -0
- package/dist/web/features/sessions/ResumeSessionDialog.d.mts.map +1 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs +131 -0
- package/dist/web/features/sessions/ResumeSessionDialog.mjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.cjs.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts +10 -0
- package/dist/web/features/sessions/SessionRailDialogs.d.mts.map +1 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs +62 -0
- package/dist/web/features/sessions/SessionRailDialogs.mjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.cjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.cjs.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts +16 -0
- package/dist/web/features/sessions/WelcomePanel.d.mts.map +1 -0
- package/dist/web/features/sessions/WelcomePanel.mjs +42 -0
- package/dist/web/features/sessions/WelcomePanel.mjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.cjs.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts +12 -0
- package/dist/web/features/sessions/useNewSessionActions.d.mts.map +1 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs +38 -0
- package/dist/web/features/sessions/useNewSessionActions.mjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.cjs +302 -0
- package/dist/web/features/sessions/useSessionRail.cjs.map +1 -0
- package/dist/web/features/sessions/useSessionRail.d.mts +14 -0
- package/dist/web/features/sessions/useSessionRail.d.mts.map +1 -0
- package/dist/web/features/sessions/useSessionRail.mjs +302 -0
- package/dist/web/features/sessions/useSessionRail.mjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.cjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.cjs.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts +12 -0
- package/dist/web/features/settings/AppearanceSettings.d.mts.map +1 -0
- package/dist/web/features/settings/AppearanceSettings.mjs +126 -0
- package/dist/web/features/settings/AppearanceSettings.mjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.cjs +257 -0
- package/dist/web/features/settings/ContributedSettings.cjs.map +1 -0
- package/dist/web/features/settings/ContributedSettings.d.mts +14 -0
- package/dist/web/features/settings/ContributedSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ContributedSettings.mjs +257 -0
- package/dist/web/features/settings/ContributedSettings.mjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.cjs +146 -0
- package/dist/web/features/settings/ImageSettings.cjs.map +1 -0
- package/dist/web/features/settings/ImageSettings.d.mts +12 -0
- package/dist/web/features/settings/ImageSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ImageSettings.mjs +146 -0
- package/dist/web/features/settings/ImageSettings.mjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs +226 -0
- package/dist/web/features/settings/LoginFlowDialog.cjs.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts +15 -0
- package/dist/web/features/settings/LoginFlowDialog.d.mts.map +1 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs +225 -0
- package/dist/web/features/settings/LoginFlowDialog.mjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.cjs +69 -0
- package/dist/web/features/settings/NotificationSettings.cjs.map +1 -0
- package/dist/web/features/settings/NotificationSettings.d.mts +5 -0
- package/dist/web/features/settings/NotificationSettings.d.mts.map +1 -0
- package/dist/web/features/settings/NotificationSettings.mjs +69 -0
- package/dist/web/features/settings/NotificationSettings.mjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.cjs +106 -0
- package/dist/web/features/settings/PluginSettings.cjs.map +1 -0
- package/dist/web/features/settings/PluginSettings.d.mts +10 -0
- package/dist/web/features/settings/PluginSettings.d.mts.map +1 -0
- package/dist/web/features/settings/PluginSettings.mjs +106 -0
- package/dist/web/features/settings/PluginSettings.mjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.cjs +323 -0
- package/dist/web/features/settings/ProviderSettings.cjs.map +1 -0
- package/dist/web/features/settings/ProviderSettings.d.mts +9 -0
- package/dist/web/features/settings/ProviderSettings.d.mts.map +1 -0
- package/dist/web/features/settings/ProviderSettings.mjs +323 -0
- package/dist/web/features/settings/ProviderSettings.mjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.cjs.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts +5 -0
- package/dist/web/features/settings/RemoteControlSettings.d.mts.map +1 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs +50 -0
- package/dist/web/features/settings/RemoteControlSettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.cjs +318 -0
- package/dist/web/features/settings/RepositorySettings.cjs.map +1 -0
- package/dist/web/features/settings/RepositorySettings.d.mts +7 -0
- package/dist/web/features/settings/RepositorySettings.d.mts.map +1 -0
- package/dist/web/features/settings/RepositorySettings.mjs +318 -0
- package/dist/web/features/settings/RepositorySettings.mjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.cjs.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts +10 -0
- package/dist/web/features/settings/RepositoryWorkspace.d.mts.map +1 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs +160 -0
- package/dist/web/features/settings/RepositoryWorkspace.mjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.cjs.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts +5 -0
- package/dist/web/features/settings/SessionMcpSettings.d.mts.map +1 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs +488 -0
- package/dist/web/features/settings/SessionMcpSettings.mjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.cjs +135 -0
- package/dist/web/features/settings/SettingsMenu.cjs.map +1 -0
- package/dist/web/features/settings/SettingsMenu.d.mts +9 -0
- package/dist/web/features/settings/SettingsMenu.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsMenu.mjs +135 -0
- package/dist/web/features/settings/SettingsMenu.mjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.cjs.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts +8 -0
- package/dist/web/features/settings/SettingsPanelHost.d.mts.map +1 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs +32 -0
- package/dist/web/features/settings/SettingsPanelHost.mjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.cjs +177 -0
- package/dist/web/features/settings/TemplateSettings.cjs.map +1 -0
- package/dist/web/features/settings/TemplateSettings.d.mts +8 -0
- package/dist/web/features/settings/TemplateSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TemplateSettings.mjs +177 -0
- package/dist/web/features/settings/TemplateSettings.mjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.cjs +182 -0
- package/dist/web/features/settings/TunnelSettings.cjs.map +1 -0
- package/dist/web/features/settings/TunnelSettings.d.mts +8 -0
- package/dist/web/features/settings/TunnelSettings.d.mts.map +1 -0
- package/dist/web/features/settings/TunnelSettings.mjs +182 -0
- package/dist/web/features/settings/TunnelSettings.mjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.cjs +230 -0
- package/dist/web/features/settings/settings.fixture.cjs.map +1 -0
- package/dist/web/features/settings/settings.fixture.d.mts +6 -0
- package/dist/web/features/settings/settings.fixture.d.mts.map +1 -0
- package/dist/web/features/settings/settings.fixture.mjs +223 -0
- package/dist/web/features/settings/settings.fixture.mjs.map +1 -0
- package/dist/web/features/status/TopBar.cjs +200 -0
- package/dist/web/features/status/TopBar.cjs.map +1 -0
- package/dist/web/features/status/TopBar.d.mts +11 -0
- package/dist/web/features/status/TopBar.d.mts.map +1 -0
- package/dist/web/features/status/TopBar.mjs +200 -0
- package/dist/web/features/status/TopBar.mjs.map +1 -0
- package/dist/web/lib/authApi.cjs +77 -0
- package/dist/web/lib/authApi.cjs.map +1 -0
- package/dist/web/lib/authApi.d.mts +28 -0
- package/dist/web/lib/authApi.d.mts.map +1 -0
- package/dist/web/lib/authApi.mjs +72 -0
- package/dist/web/lib/authApi.mjs.map +1 -0
- package/dist/web/lib/browserNotifications.cjs +37 -0
- package/dist/web/lib/browserNotifications.cjs.map +1 -0
- package/dist/web/lib/browserNotifications.d.mts +12 -0
- package/dist/web/lib/browserNotifications.d.mts.map +1 -0
- package/dist/web/lib/browserNotifications.mjs +35 -0
- package/dist/web/lib/browserNotifications.mjs.map +1 -0
- package/dist/web/lib/browserTelemetry.cjs +158 -0
- package/dist/web/lib/browserTelemetry.cjs.map +1 -0
- package/dist/web/lib/browserTelemetry.d.mts +28 -0
- package/dist/web/lib/browserTelemetry.d.mts.map +1 -0
- package/dist/web/lib/browserTelemetry.mjs +154 -0
- package/dist/web/lib/browserTelemetry.mjs.map +1 -0
- package/dist/web/lib/commands.cjs +176 -0
- package/dist/web/lib/commands.cjs.map +1 -0
- package/dist/web/lib/commands.d.mts +53 -0
- package/dist/web/lib/commands.d.mts.map +1 -0
- package/dist/web/lib/commands.mjs +153 -0
- package/dist/web/lib/commands.mjs.map +1 -0
- package/dist/web/lib/composerSubmissions.cjs +20 -0
- package/dist/web/lib/composerSubmissions.cjs.map +1 -0
- package/dist/web/lib/composerSubmissions.d.mts +7 -0
- package/dist/web/lib/composerSubmissions.d.mts.map +1 -0
- package/dist/web/lib/composerSubmissions.mjs +19 -0
- package/dist/web/lib/composerSubmissions.mjs.map +1 -0
- package/dist/web/lib/composition.cjs +403 -0
- package/dist/web/lib/composition.cjs.map +1 -0
- package/dist/web/lib/composition.d.mts +137 -0
- package/dist/web/lib/composition.d.mts.map +1 -0
- package/dist/web/lib/composition.mjs +392 -0
- package/dist/web/lib/composition.mjs.map +1 -0
- package/dist/web/lib/contextComposition.cjs +132 -0
- package/dist/web/lib/contextComposition.cjs.map +1 -0
- package/dist/web/lib/contextComposition.d.mts +75 -0
- package/dist/web/lib/contextComposition.d.mts.map +1 -0
- package/dist/web/lib/contextComposition.mjs +127 -0
- package/dist/web/lib/contextComposition.mjs.map +1 -0
- package/dist/web/lib/contextDetailApi.cjs +61 -0
- package/dist/web/lib/contextDetailApi.cjs.map +1 -0
- package/dist/web/lib/contextDetailApi.d.mts +12 -0
- package/dist/web/lib/contextDetailApi.d.mts.map +1 -0
- package/dist/web/lib/contextDetailApi.mjs +61 -0
- package/dist/web/lib/contextDetailApi.mjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.cjs +9 -0
- package/dist/web/lib/dashboardRenderers.cjs.map +1 -0
- package/dist/web/lib/dashboardRenderers.d.mts +12 -0
- package/dist/web/lib/dashboardRenderers.d.mts.map +1 -0
- package/dist/web/lib/dashboardRenderers.mjs +9 -0
- package/dist/web/lib/dashboardRenderers.mjs.map +1 -0
- package/dist/web/lib/dashboardRoute.cjs +27 -0
- package/dist/web/lib/dashboardRoute.cjs.map +1 -0
- package/dist/web/lib/dashboardRoute.d.mts +29 -0
- package/dist/web/lib/dashboardRoute.d.mts.map +1 -0
- package/dist/web/lib/dashboardRoute.mjs +26 -0
- package/dist/web/lib/dashboardRoute.mjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.cjs +15 -0
- package/dist/web/lib/dashboardTranscript.cjs.map +1 -0
- package/dist/web/lib/dashboardTranscript.d.mts +6 -0
- package/dist/web/lib/dashboardTranscript.d.mts.map +1 -0
- package/dist/web/lib/dashboardTranscript.mjs +14 -0
- package/dist/web/lib/dashboardTranscript.mjs.map +1 -0
- package/dist/web/lib/devProxyApi.cjs +74 -0
- package/dist/web/lib/devProxyApi.cjs.map +1 -0
- package/dist/web/lib/devProxyApi.d.mts +21 -0
- package/dist/web/lib/devProxyApi.d.mts.map +1 -0
- package/dist/web/lib/devProxyApi.mjs +72 -0
- package/dist/web/lib/devProxyApi.mjs.map +1 -0
- package/dist/web/lib/fileMentions.cjs +30 -0
- package/dist/web/lib/fileMentions.cjs.map +1 -0
- package/dist/web/lib/fileMentions.d.mts +13 -0
- package/dist/web/lib/fileMentions.d.mts.map +1 -0
- package/dist/web/lib/fileMentions.mjs +29 -0
- package/dist/web/lib/fileMentions.mjs.map +1 -0
- package/dist/web/lib/hubApi.cjs +283 -0
- package/dist/web/lib/hubApi.cjs.map +1 -0
- package/dist/web/lib/hubApi.d.mts +109 -0
- package/dist/web/lib/hubApi.d.mts.map +1 -0
- package/dist/web/lib/hubApi.mjs +268 -0
- package/dist/web/lib/hubApi.mjs.map +1 -0
- package/dist/web/lib/leaderTree.cjs +150 -0
- package/dist/web/lib/leaderTree.cjs.map +1 -0
- package/dist/web/lib/leaderTree.d.mts +41 -0
- package/dist/web/lib/leaderTree.d.mts.map +1 -0
- package/dist/web/lib/leaderTree.mjs +149 -0
- package/dist/web/lib/leaderTree.mjs.map +1 -0
- package/dist/web/lib/livePush.cjs +97 -0
- package/dist/web/lib/livePush.cjs.map +1 -0
- package/dist/web/lib/livePush.d.mts +10 -0
- package/dist/web/lib/livePush.d.mts.map +1 -0
- package/dist/web/lib/livePush.mjs +94 -0
- package/dist/web/lib/livePush.mjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.cjs +63 -0
- package/dist/web/lib/modelContextAdapter.cjs.map +1 -0
- package/dist/web/lib/modelContextAdapter.d.mts +11 -0
- package/dist/web/lib/modelContextAdapter.d.mts.map +1 -0
- package/dist/web/lib/modelContextAdapter.mjs +62 -0
- package/dist/web/lib/modelContextAdapter.mjs.map +1 -0
- package/dist/web/lib/piTransport.cjs +103 -0
- package/dist/web/lib/piTransport.cjs.map +1 -0
- package/dist/web/lib/piTransport.d.mts +8 -0
- package/dist/web/lib/piTransport.d.mts.map +1 -0
- package/dist/web/lib/piTransport.mjs +102 -0
- package/dist/web/lib/piTransport.mjs.map +1 -0
- package/dist/web/lib/pluginCompositions.cjs +57 -0
- package/dist/web/lib/pluginCompositions.cjs.map +1 -0
- package/dist/web/lib/pluginCompositions.d.mts +37 -0
- package/dist/web/lib/pluginCompositions.d.mts.map +1 -0
- package/dist/web/lib/pluginCompositions.mjs +52 -0
- package/dist/web/lib/pluginCompositions.mjs.map +1 -0
- package/dist/web/lib/pluginRegistry.cjs +675 -0
- package/dist/web/lib/pluginRegistry.cjs.map +1 -0
- package/dist/web/lib/pluginRegistry.d.mts +155 -0
- package/dist/web/lib/pluginRegistry.d.mts.map +1 -0
- package/dist/web/lib/pluginRegistry.mjs +633 -0
- package/dist/web/lib/pluginRegistry.mjs.map +1 -0
- package/dist/web/lib/pluginScopes.cjs +48 -0
- package/dist/web/lib/pluginScopes.cjs.map +1 -0
- package/dist/web/lib/pluginScopes.d.mts +8 -0
- package/dist/web/lib/pluginScopes.d.mts.map +1 -0
- package/dist/web/lib/pluginScopes.mjs +47 -0
- package/dist/web/lib/pluginScopes.mjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.cjs +83 -0
- package/dist/web/lib/pluginSlotProps.cjs.map +1 -0
- package/dist/web/lib/pluginSlotProps.d.mts +21 -0
- package/dist/web/lib/pluginSlotProps.d.mts.map +1 -0
- package/dist/web/lib/pluginSlotProps.mjs +82 -0
- package/dist/web/lib/pluginSlotProps.mjs.map +1 -0
- package/dist/web/lib/promptFocus.cjs +30 -0
- package/dist/web/lib/promptFocus.cjs.map +1 -0
- package/dist/web/lib/promptFocus.d.mts +7 -0
- package/dist/web/lib/promptFocus.d.mts.map +1 -0
- package/dist/web/lib/promptFocus.mjs +29 -0
- package/dist/web/lib/promptFocus.mjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.cjs +107 -0
- package/dist/web/lib/protocolHubSocket.cjs.map +1 -0
- package/dist/web/lib/protocolHubSocket.d.mts +18 -0
- package/dist/web/lib/protocolHubSocket.d.mts.map +1 -0
- package/dist/web/lib/protocolHubSocket.mjs +107 -0
- package/dist/web/lib/protocolHubSocket.mjs.map +1 -0
- package/dist/web/lib/protocolTimeline.cjs +86 -0
- package/dist/web/lib/protocolTimeline.cjs.map +1 -0
- package/dist/web/lib/protocolTimeline.d.mts +9 -0
- package/dist/web/lib/protocolTimeline.d.mts.map +1 -0
- package/dist/web/lib/protocolTimeline.mjs +85 -0
- package/dist/web/lib/protocolTimeline.mjs.map +1 -0
- package/dist/web/lib/qrMatrix.cjs +37 -0
- package/dist/web/lib/qrMatrix.cjs.map +1 -0
- package/dist/web/lib/qrMatrix.d.mts +5 -0
- package/dist/web/lib/qrMatrix.d.mts.map +1 -0
- package/dist/web/lib/qrMatrix.mjs +35 -0
- package/dist/web/lib/qrMatrix.mjs.map +1 -0
- package/dist/web/lib/remoteApi.cjs +100 -0
- package/dist/web/lib/remoteApi.cjs.map +1 -0
- package/dist/web/lib/remoteApi.d.mts +45 -0
- package/dist/web/lib/remoteApi.d.mts.map +1 -0
- package/dist/web/lib/remoteApi.mjs +92 -0
- package/dist/web/lib/remoteApi.mjs.map +1 -0
- package/dist/web/lib/sealedSession.cjs +81 -0
- package/dist/web/lib/sealedSession.cjs.map +1 -0
- package/dist/web/lib/sealedSession.d.mts +24 -0
- package/dist/web/lib/sealedSession.d.mts.map +1 -0
- package/dist/web/lib/sealedSession.mjs +75 -0
- package/dist/web/lib/sealedSession.mjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.cjs +19 -0
- package/dist/web/lib/sessionActivityRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts +10 -0
- package/dist/web/lib/sessionActivityRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionActivityRenderer.mjs +17 -0
- package/dist/web/lib/sessionActivityRenderer.mjs.map +1 -0
- package/dist/web/lib/sessionAsset.cjs +45 -0
- package/dist/web/lib/sessionAsset.cjs.map +1 -0
- package/dist/web/lib/sessionAsset.d.mts +17 -0
- package/dist/web/lib/sessionAsset.d.mts.map +1 -0
- package/dist/web/lib/sessionAsset.mjs +44 -0
- package/dist/web/lib/sessionAsset.mjs.map +1 -0
- package/dist/web/lib/sessionAvatar.cjs +18 -0
- package/dist/web/lib/sessionAvatar.cjs.map +1 -0
- package/dist/web/lib/sessionAvatar.d.mts +10 -0
- package/dist/web/lib/sessionAvatar.d.mts.map +1 -0
- package/dist/web/lib/sessionAvatar.mjs +18 -0
- package/dist/web/lib/sessionAvatar.mjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.cjs +120 -0
- package/dist/web/lib/sessionMcpApi.cjs.map +1 -0
- package/dist/web/lib/sessionMcpApi.d.mts +27 -0
- package/dist/web/lib/sessionMcpApi.d.mts.map +1 -0
- package/dist/web/lib/sessionMcpApi.mjs +114 -0
- package/dist/web/lib/sessionMcpApi.mjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.cjs +24 -0
- package/dist/web/lib/sessionMcpPrompt.cjs.map +1 -0
- package/dist/web/lib/sessionMcpPrompt.mjs +23 -0
- package/dist/web/lib/sessionMcpPrompt.mjs.map +1 -0
- package/dist/web/lib/sessionModel.cjs +970 -0
- package/dist/web/lib/sessionModel.cjs.map +1 -0
- package/dist/web/lib/sessionModel.d.mts +254 -0
- package/dist/web/lib/sessionModel.d.mts.map +1 -0
- package/dist/web/lib/sessionModel.mjs +958 -0
- package/dist/web/lib/sessionModel.mjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.cjs +196 -0
- package/dist/web/lib/sessionProtocolCommands.cjs.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts +15 -0
- package/dist/web/lib/sessionProtocolCommands.d.mts.map +1 -0
- package/dist/web/lib/sessionProtocolCommands.mjs +193 -0
- package/dist/web/lib/sessionProtocolCommands.mjs.map +1 -0
- package/dist/web/lib/sessionRailModel.cjs +107 -0
- package/dist/web/lib/sessionRailModel.cjs.map +1 -0
- package/dist/web/lib/sessionRailModel.d.mts +38 -0
- package/dist/web/lib/sessionRailModel.d.mts.map +1 -0
- package/dist/web/lib/sessionRailModel.mjs +104 -0
- package/dist/web/lib/sessionRailModel.mjs.map +1 -0
- package/dist/web/lib/sessionSummary.cjs +58 -0
- package/dist/web/lib/sessionSummary.cjs.map +1 -0
- package/dist/web/lib/sessionSummary.d.mts +39 -0
- package/dist/web/lib/sessionSummary.d.mts.map +1 -0
- package/dist/web/lib/sessionSummary.mjs +54 -0
- package/dist/web/lib/sessionSummary.mjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs +19 -0
- package/dist/web/lib/sessionTranscriptRenderer.cjs.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts +11 -0
- package/dist/web/lib/sessionTranscriptRenderer.d.mts.map +1 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs +17 -0
- package/dist/web/lib/sessionTranscriptRenderer.mjs.map +1 -0
- package/dist/web/lib/settingsApi.cjs +237 -0
- package/dist/web/lib/settingsApi.cjs.map +1 -0
- package/dist/web/lib/settingsApi.d.mts +57 -0
- package/dist/web/lib/settingsApi.d.mts.map +1 -0
- package/dist/web/lib/settingsApi.mjs +230 -0
- package/dist/web/lib/settingsApi.mjs.map +1 -0
- package/dist/web/lib/settingsDraft.cjs +48 -0
- package/dist/web/lib/settingsDraft.cjs.map +1 -0
- package/dist/web/lib/settingsDraft.d.mts +28 -0
- package/dist/web/lib/settingsDraft.d.mts.map +1 -0
- package/dist/web/lib/settingsDraft.mjs +45 -0
- package/dist/web/lib/settingsDraft.mjs.map +1 -0
- package/dist/web/lib/settingsSections.cjs +108 -0
- package/dist/web/lib/settingsSections.cjs.map +1 -0
- package/dist/web/lib/settingsSections.d.mts +36 -0
- package/dist/web/lib/settingsSections.d.mts.map +1 -0
- package/dist/web/lib/settingsSections.mjs +105 -0
- package/dist/web/lib/settingsSections.mjs.map +1 -0
- package/dist/web/lib/statusLine.cjs +82 -0
- package/dist/web/lib/statusLine.cjs.map +1 -0
- package/dist/web/lib/statusLine.d.mts +27 -0
- package/dist/web/lib/statusLine.d.mts.map +1 -0
- package/dist/web/lib/statusLine.mjs +79 -0
- package/dist/web/lib/statusLine.mjs.map +1 -0
- package/dist/web/lib/stepUp.cjs +41 -0
- package/dist/web/lib/stepUp.cjs.map +1 -0
- package/dist/web/lib/stepUp.d.mts +18 -0
- package/dist/web/lib/stepUp.d.mts.map +1 -0
- package/dist/web/lib/stepUp.mjs +41 -0
- package/dist/web/lib/stepUp.mjs.map +1 -0
- package/dist/web/lib/templateCatalog.cjs +123 -0
- package/dist/web/lib/templateCatalog.cjs.map +1 -0
- package/dist/web/lib/templateCatalog.d.mts +38 -0
- package/dist/web/lib/templateCatalog.d.mts.map +1 -0
- package/dist/web/lib/templateCatalog.mjs +118 -0
- package/dist/web/lib/templateCatalog.mjs.map +1 -0
- package/dist/web/lib/threadRenderer.cjs +25 -0
- package/dist/web/lib/threadRenderer.cjs.map +1 -0
- package/dist/web/lib/threadRenderer.d.mts +17 -0
- package/dist/web/lib/threadRenderer.d.mts.map +1 -0
- package/dist/web/lib/threadRenderer.mjs +23 -0
- package/dist/web/lib/threadRenderer.mjs.map +1 -0
- package/dist/web/lib/timelineGroups.cjs +83 -0
- package/dist/web/lib/timelineGroups.cjs.map +1 -0
- package/dist/web/lib/timelineGroups.d.mts +36 -0
- package/dist/web/lib/timelineGroups.d.mts.map +1 -0
- package/dist/web/lib/timelineGroups.mjs +81 -0
- package/dist/web/lib/timelineGroups.mjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.cjs +98 -0
- package/dist/web/lib/toolCompletionTabs.cjs.map +1 -0
- package/dist/web/lib/toolCompletionTabs.d.mts +14 -0
- package/dist/web/lib/toolCompletionTabs.d.mts.map +1 -0
- package/dist/web/lib/toolCompletionTabs.mjs +98 -0
- package/dist/web/lib/toolCompletionTabs.mjs.map +1 -0
- package/dist/web/lib/toolMessageProps.cjs +19 -0
- package/dist/web/lib/toolMessageProps.cjs.map +1 -0
- package/dist/web/lib/toolMessageProps.d.mts +7 -0
- package/dist/web/lib/toolMessageProps.d.mts.map +1 -0
- package/dist/web/lib/toolMessageProps.mjs +19 -0
- package/dist/web/lib/toolMessageProps.mjs.map +1 -0
- package/dist/web/lib/toolPrompt.cjs +44 -0
- package/dist/web/lib/toolPrompt.cjs.map +1 -0
- package/dist/web/lib/toolPrompt.d.mts +34 -0
- package/dist/web/lib/toolPrompt.d.mts.map +1 -0
- package/dist/web/lib/toolPrompt.mjs +44 -0
- package/dist/web/lib/toolPrompt.mjs.map +1 -0
- package/dist/web/lib/transport.cjs +57 -0
- package/dist/web/lib/transport.cjs.map +1 -0
- package/dist/web/lib/transport.d.mts +40 -0
- package/dist/web/lib/transport.d.mts.map +1 -0
- package/dist/web/lib/transport.mjs +50 -0
- package/dist/web/lib/transport.mjs.map +1 -0
- package/dist/web/lib/useSessionMcp.cjs +65 -0
- package/dist/web/lib/useSessionMcp.cjs.map +1 -0
- package/dist/web/lib/useSessionMcp.d.mts +15 -0
- package/dist/web/lib/useSessionMcp.d.mts.map +1 -0
- package/dist/web/lib/useSessionMcp.mjs +65 -0
- package/dist/web/lib/useSessionMcp.mjs.map +1 -0
- package/dist/web/lib/webauthnClient.cjs +110 -0
- package/dist/web/lib/webauthnClient.cjs.map +1 -0
- package/dist/web/lib/webauthnClient.d.mts +32 -0
- package/dist/web/lib/webauthnClient.d.mts.map +1 -0
- package/dist/web/lib/webauthnClient.mjs +106 -0
- package/dist/web/lib/webauthnClient.mjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.cjs +105 -0
- package/dist/web/lib/webmcpSimulator.cjs.map +1 -0
- package/dist/web/lib/webmcpSimulator.mjs +105 -0
- package/dist/web/lib/webmcpSimulator.mjs.map +1 -0
- package/dist/web/stores/captureStore.cjs +137 -0
- package/dist/web/stores/captureStore.cjs.map +1 -0
- package/dist/web/stores/captureStore.d.mts +13 -0
- package/dist/web/stores/captureStore.d.mts.map +1 -0
- package/dist/web/stores/captureStore.mjs +133 -0
- package/dist/web/stores/captureStore.mjs.map +1 -0
- package/dist/web/stores/composerStore.cjs +390 -0
- package/dist/web/stores/composerStore.cjs.map +1 -0
- package/dist/web/stores/composerStore.d.mts +101 -0
- package/dist/web/stores/composerStore.d.mts.map +1 -0
- package/dist/web/stores/composerStore.mjs +370 -0
- package/dist/web/stores/composerStore.mjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.cjs +88 -0
- package/dist/web/stores/composerSubmissionStore.cjs.map +1 -0
- package/dist/web/stores/composerSubmissionStore.d.mts +11 -0
- package/dist/web/stores/composerSubmissionStore.d.mts.map +1 -0
- package/dist/web/stores/composerSubmissionStore.mjs +87 -0
- package/dist/web/stores/composerSubmissionStore.mjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.cjs +35 -0
- package/dist/web/stores/dashboardStateStore.cjs.map +1 -0
- package/dist/web/stores/dashboardStateStore.d.mts +11 -0
- package/dist/web/stores/dashboardStateStore.d.mts.map +1 -0
- package/dist/web/stores/dashboardStateStore.mjs +33 -0
- package/dist/web/stores/dashboardStateStore.mjs.map +1 -0
- package/dist/web/stores/devProxyStore.cjs +76 -0
- package/dist/web/stores/devProxyStore.cjs.map +1 -0
- package/dist/web/stores/devProxyStore.d.mts +25 -0
- package/dist/web/stores/devProxyStore.d.mts.map +1 -0
- package/dist/web/stores/devProxyStore.mjs +73 -0
- package/dist/web/stores/devProxyStore.mjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.cjs +38 -0
- package/dist/web/stores/dialogDraftStore.cjs.map +1 -0
- package/dist/web/stores/dialogDraftStore.d.mts +13 -0
- package/dist/web/stores/dialogDraftStore.d.mts.map +1 -0
- package/dist/web/stores/dialogDraftStore.mjs +36 -0
- package/dist/web/stores/dialogDraftStore.mjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.cjs +20 -0
- package/dist/web/stores/fileLinkModesStore.cjs.map +1 -0
- package/dist/web/stores/fileLinkModesStore.d.mts +5 -0
- package/dist/web/stores/fileLinkModesStore.d.mts.map +1 -0
- package/dist/web/stores/fileLinkModesStore.mjs +20 -0
- package/dist/web/stores/fileLinkModesStore.mjs.map +1 -0
- package/dist/web/stores/menuStore.cjs +85 -0
- package/dist/web/stores/menuStore.cjs.map +1 -0
- package/dist/web/stores/menuStore.d.mts +42 -0
- package/dist/web/stores/menuStore.d.mts.map +1 -0
- package/dist/web/stores/menuStore.mjs +79 -0
- package/dist/web/stores/menuStore.mjs.map +1 -0
- package/dist/web/stores/newSessionStore.cjs +93 -0
- package/dist/web/stores/newSessionStore.cjs.map +1 -0
- package/dist/web/stores/newSessionStore.d.mts +30 -0
- package/dist/web/stores/newSessionStore.d.mts.map +1 -0
- package/dist/web/stores/newSessionStore.mjs +86 -0
- package/dist/web/stores/newSessionStore.mjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.cjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.cjs.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts +12 -0
- package/dist/web/stores/pagedTranscriptStore.d.mts.map +1 -0
- package/dist/web/stores/pagedTranscriptStore.mjs +235 -0
- package/dist/web/stores/pagedTranscriptStore.mjs.map +1 -0
- package/dist/web/stores/paletteStore.cjs +37 -0
- package/dist/web/stores/paletteStore.cjs.map +1 -0
- package/dist/web/stores/paletteStore.d.mts +14 -0
- package/dist/web/stores/paletteStore.d.mts.map +1 -0
- package/dist/web/stores/paletteStore.mjs +34 -0
- package/dist/web/stores/paletteStore.mjs.map +1 -0
- package/dist/web/stores/railDialogStore.cjs +105 -0
- package/dist/web/stores/railDialogStore.cjs.map +1 -0
- package/dist/web/stores/railDialogStore.d.mts +32 -0
- package/dist/web/stores/railDialogStore.d.mts.map +1 -0
- package/dist/web/stores/railDialogStore.mjs +97 -0
- package/dist/web/stores/railDialogStore.mjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.cjs +216 -0
- package/dist/web/stores/remoteAccessStore.cjs.map +1 -0
- package/dist/web/stores/remoteAccessStore.d.mts +48 -0
- package/dist/web/stores/remoteAccessStore.d.mts.map +1 -0
- package/dist/web/stores/remoteAccessStore.mjs +202 -0
- package/dist/web/stores/remoteAccessStore.mjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs +43 -0
- package/dist/web/stores/sessionChannelHoldsStore.cjs.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts +9 -0
- package/dist/web/stores/sessionChannelHoldsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs +42 -0
- package/dist/web/stores/sessionChannelHoldsStore.mjs.map +1 -0
- package/dist/web/stores/sessionStore.cjs +610 -0
- package/dist/web/stores/sessionStore.cjs.map +1 -0
- package/dist/web/stores/sessionStore.d.mts +116 -0
- package/dist/web/stores/sessionStore.d.mts.map +1 -0
- package/dist/web/stores/sessionStore.mjs +568 -0
- package/dist/web/stores/sessionStore.mjs.map +1 -0
- package/dist/web/stores/sessionsStore.cjs +272 -0
- package/dist/web/stores/sessionsStore.cjs.map +1 -0
- package/dist/web/stores/sessionsStore.d.mts +74 -0
- package/dist/web/stores/sessionsStore.d.mts.map +1 -0
- package/dist/web/stores/sessionsStore.mjs +257 -0
- package/dist/web/stores/sessionsStore.mjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.cjs +138 -0
- package/dist/web/stores/settingsDraftStore.cjs.map +1 -0
- package/dist/web/stores/settingsDraftStore.d.mts +27 -0
- package/dist/web/stores/settingsDraftStore.d.mts.map +1 -0
- package/dist/web/stores/settingsDraftStore.mjs +132 -0
- package/dist/web/stores/settingsDraftStore.mjs.map +1 -0
- package/dist/web/stores/templateStore.cjs +136 -0
- package/dist/web/stores/templateStore.cjs.map +1 -0
- package/dist/web/stores/templateStore.d.mts +20 -0
- package/dist/web/stores/templateStore.d.mts.map +1 -0
- package/dist/web/stores/templateStore.mjs +131 -0
- package/dist/web/stores/templateStore.mjs.map +1 -0
- package/dist/web/stores/themeStore.cjs +42 -0
- package/dist/web/stores/themeStore.cjs.map +1 -0
- package/dist/web/stores/themeStore.d.mts +20 -0
- package/dist/web/stores/themeStore.d.mts.map +1 -0
- package/dist/web/stores/themeStore.mjs +39 -0
- package/dist/web/stores/themeStore.mjs.map +1 -0
- package/dist/web/stores/threadStore.cjs +122 -0
- package/dist/web/stores/threadStore.cjs.map +1 -0
- package/dist/web/stores/threadStore.d.mts +24 -0
- package/dist/web/stores/threadStore.d.mts.map +1 -0
- package/dist/web/stores/threadStore.mjs +114 -0
- package/dist/web/stores/threadStore.mjs.map +1 -0
- package/dist/web/stores/toolPromptStore.cjs +15 -0
- package/dist/web/stores/toolPromptStore.cjs.map +1 -0
- package/dist/web/stores/toolPromptStore.d.mts +23 -0
- package/dist/web/stores/toolPromptStore.d.mts.map +1 -0
- package/dist/web/stores/toolPromptStore.mjs +14 -0
- package/dist/web/stores/toolPromptStore.mjs.map +1 -0
- package/dist/web/stores/transientTabsStore.cjs +66 -0
- package/dist/web/stores/transientTabsStore.cjs.map +1 -0
- package/dist/web/stores/transientTabsStore.d.mts +21 -0
- package/dist/web/stores/transientTabsStore.d.mts.map +1 -0
- package/dist/web/stores/transientTabsStore.mjs +59 -0
- package/dist/web/stores/transientTabsStore.mjs.map +1 -0
- package/dist/web/stores/uiStore.cjs +47 -0
- package/dist/web/stores/uiStore.cjs.map +1 -0
- package/dist/web/stores/uiStore.d.mts +18 -0
- package/dist/web/stores/uiStore.d.mts.map +1 -0
- package/dist/web/stores/uiStore.mjs +45 -0
- package/dist/web/stores/uiStore.mjs.map +1 -0
- package/dist/web/stores/useOpenTab.cjs +31 -0
- package/dist/web/stores/useOpenTab.cjs.map +1 -0
- package/dist/web/stores/useOpenTab.d.mts +9 -0
- package/dist/web/stores/useOpenTab.d.mts.map +1 -0
- package/dist/web/stores/useOpenTab.mjs +31 -0
- package/dist/web/stores/useOpenTab.mjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.cjs +115 -0
- package/dist/web/stores/usePluginSlotProps.cjs.map +1 -0
- package/dist/web/stores/usePluginSlotProps.d.mts +6 -0
- package/dist/web/stores/usePluginSlotProps.d.mts.map +1 -0
- package/dist/web/stores/usePluginSlotProps.mjs +115 -0
- package/dist/web/stores/usePluginSlotProps.mjs.map +1 -0
- package/dist/web/stores/useToolPrompt.cjs +42 -0
- package/dist/web/stores/useToolPrompt.cjs.map +1 -0
- package/dist/web/stores/useToolPrompt.d.mts +14 -0
- package/dist/web/stores/useToolPrompt.d.mts.map +1 -0
- package/dist/web/stores/useToolPrompt.mjs +42 -0
- package/dist/web/stores/useToolPrompt.mjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.cjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.cjs.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts +5 -0
- package/dist/web/stores/useWebPluginRegistry.d.mts.map +1 -0
- package/dist/web/stores/useWebPluginRegistry.mjs +11 -0
- package/dist/web/stores/useWebPluginRegistry.mjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs +67 -0
- package/dist/web/stores/workspaceAdmissionStore.cjs.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts +24 -0
- package/dist/web/stores/workspaceAdmissionStore.d.mts.map +1 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs +64 -0
- package/dist/web/stores/workspaceAdmissionStore.mjs.map +1 -0
- package/dist/web/stores/workspacesStore.cjs +83 -0
- package/dist/web/stores/workspacesStore.cjs.map +1 -0
- package/dist/web/stores/workspacesStore.d.mts +17 -0
- package/dist/web/stores/workspacesStore.d.mts.map +1 -0
- package/dist/web/stores/workspacesStore.mjs +78 -0
- package/dist/web/stores/workspacesStore.mjs.map +1 -0
- package/llms.txt +3 -0
- package/package.json +107 -0
- package/styles/dashboard.css +2 -0
- package/styles/preview.css +3 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
const require_remoteAccess = require("../../types/remoteAccess.cjs");
|
|
2
|
+
const require_sealedSession = require("./sealedSession.cjs");
|
|
3
|
+
const require_stepUp = require("./stepUp.cjs");
|
|
4
|
+
//#region src/web/lib/remoteApi.ts
|
|
5
|
+
const UNREACHABLE = "The cockpit hub is unreachable.";
|
|
6
|
+
const JSON_HEADERS = { "Content-Type": "application/json" };
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* One shape for every remote-access call, mirroring `authApi.ts`: a network
|
|
12
|
+
* failure, a non-2xx answer, and a 2xx body missing what was asked for all come
|
|
13
|
+
* back as `{ error }`, so the dialog has one branch to render.
|
|
14
|
+
*/
|
|
15
|
+
async function request(input, init, pick, send = (target, options) => require_sealedSession.sealedHttpSession.fetch(target, options)) {
|
|
16
|
+
let response;
|
|
17
|
+
try {
|
|
18
|
+
response = await send(input, init);
|
|
19
|
+
} catch {
|
|
20
|
+
return { error: UNREACHABLE };
|
|
21
|
+
}
|
|
22
|
+
let body;
|
|
23
|
+
try {
|
|
24
|
+
body = await response.json();
|
|
25
|
+
} catch {
|
|
26
|
+
body = void 0;
|
|
27
|
+
}
|
|
28
|
+
if (response.ok && isRecord(body)) {
|
|
29
|
+
const picked = pick(body);
|
|
30
|
+
if (picked !== void 0) return picked;
|
|
31
|
+
}
|
|
32
|
+
if (isRecord(body) && typeof body.error === "string") return { error: body.error };
|
|
33
|
+
return { error: `The hub answered ${String(response.status)}.` };
|
|
34
|
+
}
|
|
35
|
+
function pickState(body) {
|
|
36
|
+
return isRecord(body.state) ? { state: body.state } : void 0;
|
|
37
|
+
}
|
|
38
|
+
async function fetchRemoteState() {
|
|
39
|
+
return await request(require_remoteAccess.REMOTE_API_ROUTE, void 0, pickState);
|
|
40
|
+
}
|
|
41
|
+
async function enableRemoteAccess() {
|
|
42
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/enable`, { method: "POST" }, (body) => {
|
|
43
|
+
const picked = pickState(body);
|
|
44
|
+
if (picked === void 0) return void 0;
|
|
45
|
+
return body.handingOver === true ? {
|
|
46
|
+
...picked,
|
|
47
|
+
handingOver: true
|
|
48
|
+
} : picked;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async function disableRemoteAccess() {
|
|
52
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/disable`, { method: "POST" }, pickState);
|
|
53
|
+
}
|
|
54
|
+
/** Mints the code the QR encodes. Each call retires the previous one. */
|
|
55
|
+
async function mintPairingCode() {
|
|
56
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/codes`, { method: "POST" }, (body) => typeof body.pairUrl === "string" && typeof body.code === "string" && typeof body.manualCode === "string" && typeof body.expiresAt === "string" && typeof body.publicKey === "string" && typeof body.fingerprint === "string" && typeof body.revision === "number" ? {
|
|
57
|
+
code: body.code,
|
|
58
|
+
manualCode: body.manualCode,
|
|
59
|
+
pairUrl: body.pairUrl,
|
|
60
|
+
expiresAt: body.expiresAt,
|
|
61
|
+
publicKey: body.publicKey,
|
|
62
|
+
fingerprint: body.fingerprint,
|
|
63
|
+
revision: body.revision
|
|
64
|
+
} : void 0);
|
|
65
|
+
}
|
|
66
|
+
async function approvePairing(requestId) {
|
|
67
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/approve`, { method: "POST" }, pickState);
|
|
68
|
+
}
|
|
69
|
+
async function denyPairing(requestId) {
|
|
70
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/deny`, { method: "POST" }, pickState);
|
|
71
|
+
}
|
|
72
|
+
async function revokeDevice(id) {
|
|
73
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/devices/${encodeURIComponent(id)}`, { method: "DELETE" }, pickState);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Removes a trusted native device and every live session it holds. A remote caller answers a step-up
|
|
77
|
+
* first; a quick-tunnel browser cannot, so the hub refuses it with a message this returns as `error`.
|
|
78
|
+
*/
|
|
79
|
+
async function revokeTrustedDevice(id) {
|
|
80
|
+
return await request(`${require_remoteAccess.TRUSTED_DEVICES_ROUTE}/${encodeURIComponent(id)}`, { method: "DELETE" }, pickState, (target, options) => require_stepUp.fetchWithStepUp(target, options));
|
|
81
|
+
}
|
|
82
|
+
async function saveRemoteSettings(patch) {
|
|
83
|
+
return await request(`${require_remoteAccess.REMOTE_API_ROUTE}/settings`, {
|
|
84
|
+
method: "PUT",
|
|
85
|
+
headers: JSON_HEADERS,
|
|
86
|
+
body: JSON.stringify(patch)
|
|
87
|
+
}, (body) => isRecord(body.settings) ? { settings: body.settings } : void 0);
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
exports.approvePairing = approvePairing;
|
|
91
|
+
exports.denyPairing = denyPairing;
|
|
92
|
+
exports.disableRemoteAccess = disableRemoteAccess;
|
|
93
|
+
exports.enableRemoteAccess = enableRemoteAccess;
|
|
94
|
+
exports.fetchRemoteState = fetchRemoteState;
|
|
95
|
+
exports.mintPairingCode = mintPairingCode;
|
|
96
|
+
exports.revokeDevice = revokeDevice;
|
|
97
|
+
exports.revokeTrustedDevice = revokeTrustedDevice;
|
|
98
|
+
exports.saveRemoteSettings = saveRemoteSettings;
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=remoteApi.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteApi.cjs","names":["sealedHttpSession","REMOTE_API_ROUTE","TRUSTED_DEVICES_ROUTE","fetchWithStepUp"],"sources":["../../../src/web/lib/remoteApi.ts"],"sourcesContent":["import {\n REMOTE_API_ROUTE,\n TRUSTED_DEVICES_ROUTE,\n type RemoteAccessSettings,\n type RemoteAccessStateView,\n} from '../../types/remoteAccess';\nimport { sealedHttpSession } from './sealedSession';\nimport { fetchWithStepUp } from './stepUp';\n\nexport type StateResult = { state: RemoteAccessStateView } | { error: string };\n/** Enabling a contained cockpit moves the hub, so the answer says the address is about to change. */\nexport type EnableResult = { state: RemoteAccessStateView; handingOver?: boolean } | { error: string };\nexport type PairingResult =\n | {\n code: string;\n manualCode: string;\n pairUrl: string;\n expiresAt: string;\n publicKey: string;\n fingerprint: string;\n revision: number;\n }\n | { error: string };\n\nconst UNREACHABLE = 'The cockpit hub is unreachable.';\nconst JSON_HEADERS = { 'Content-Type': 'application/json' };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * One shape for every remote-access call, mirroring `authApi.ts`: a network\n * failure, a non-2xx answer, and a 2xx body missing what was asked for all come\n * back as `{ error }`, so the dialog has one branch to render.\n */\nasync function request<T>(\n input: string,\n init: RequestInit | undefined,\n pick: (body: Record<string, unknown>) => T | undefined,\n send: (input: string, init?: RequestInit) => Promise<Response> = (target, options) =>\n sealedHttpSession.fetch(target, options),\n): Promise<T | { error: string }> {\n let response: Response;\n try {\n response = await send(input, init);\n } catch {\n return { error: UNREACHABLE };\n }\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = undefined;\n }\n if (response.ok && isRecord(body)) {\n const picked = pick(body);\n if (picked !== undefined) return picked;\n }\n if (isRecord(body) && typeof body.error === 'string') return { error: body.error };\n return { error: `The hub answered ${String(response.status)}.` };\n}\n\nfunction pickState(body: Record<string, unknown>): { state: RemoteAccessStateView } | undefined {\n return isRecord(body.state) ? { state: body.state as unknown as RemoteAccessStateView } : undefined;\n}\n\nexport async function fetchRemoteState(): Promise<StateResult> {\n return await request(REMOTE_API_ROUTE, undefined, pickState);\n}\n\nexport async function enableRemoteAccess(): Promise<EnableResult> {\n return await request(`${REMOTE_API_ROUTE}/enable`, { method: 'POST' }, (body) => {\n const picked = pickState(body);\n if (picked === undefined) return undefined;\n return body.handingOver === true ? { ...picked, handingOver: true } : picked;\n });\n}\n\nexport async function disableRemoteAccess(): Promise<StateResult> {\n return await request(`${REMOTE_API_ROUTE}/disable`, { method: 'POST' }, pickState);\n}\n\n/** Mints the code the QR encodes. Each call retires the previous one. */\nexport async function mintPairingCode(): Promise<PairingResult> {\n return await request(`${REMOTE_API_ROUTE}/codes`, { method: 'POST' }, (body) =>\n typeof body.pairUrl === 'string' &&\n typeof body.code === 'string' &&\n typeof body.manualCode === 'string' &&\n typeof body.expiresAt === 'string' &&\n typeof body.publicKey === 'string' &&\n typeof body.fingerprint === 'string' &&\n typeof body.revision === 'number'\n ? {\n code: body.code,\n manualCode: body.manualCode,\n pairUrl: body.pairUrl,\n expiresAt: body.expiresAt,\n publicKey: body.publicKey,\n fingerprint: body.fingerprint,\n revision: body.revision,\n }\n : undefined,\n );\n}\n\nexport async function approvePairing(requestId: string): Promise<StateResult> {\n return await request(\n `${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/approve`,\n { method: 'POST' },\n pickState,\n );\n}\n\nexport async function denyPairing(requestId: string): Promise<StateResult> {\n return await request(\n `${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/deny`,\n { method: 'POST' },\n pickState,\n );\n}\n\nexport async function revokeDevice(id: string): Promise<StateResult> {\n return await request(`${REMOTE_API_ROUTE}/devices/${encodeURIComponent(id)}`, { method: 'DELETE' }, pickState);\n}\n\n/**\n * Removes a trusted native device and every live session it holds. A remote caller answers a step-up\n * first; a quick-tunnel browser cannot, so the hub refuses it with a message this returns as `error`.\n */\nexport async function revokeTrustedDevice(id: string): Promise<StateResult> {\n return await request(\n `${TRUSTED_DEVICES_ROUTE}/${encodeURIComponent(id)}`,\n { method: 'DELETE' },\n pickState,\n (target, options) => fetchWithStepUp(target, options),\n );\n}\n\nexport async function saveRemoteSettings(\n patch: Partial<RemoteAccessSettings>,\n): Promise<{ settings: RemoteAccessSettings } | { error: string }> {\n return await request(\n `${REMOTE_API_ROUTE}/settings`,\n { method: 'PUT', headers: JSON_HEADERS, body: JSON.stringify(patch) },\n (body) => (isRecord(body.settings) ? { settings: body.settings as unknown as RemoteAccessSettings } : undefined),\n );\n}\n"],"mappings":";;;;AAwBA,MAAM,cAAc;AACpB,MAAM,eAAe,EAAE,gBAAgB,mBAAmB;AAE1D,SAAS,SAAS,OAAkD;CAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;;;;AAOA,eAAe,QACb,OACA,MACA,MACA,QAAkE,QAAQ,YACxEA,sBAAAA,kBAAkB,MAAM,QAAQ,OAAO,GACT;CAChC,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,KAAK,OAAO,IAAI;CACnC,QAAQ;EACN,OAAO,EAAE,OAAO,YAAY;CAC9B;CACA,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,SAAS,KAAK;CAC7B,QAAQ;EACN,OAAO,KAAA;CACT;CACA,IAAI,SAAS,MAAM,SAAS,IAAI,GAAG;EACjC,MAAM,SAAS,KAAK,IAAI;EACxB,IAAI,WAAW,KAAA,GAAW,OAAO;CACnC;CACA,IAAI,SAAS,IAAI,KAAK,OAAO,KAAK,UAAU,UAAU,OAAO,EAAE,OAAO,KAAK,MAAM;CACjF,OAAO,EAAE,OAAO,oBAAoB,OAAO,SAAS,MAAM,EAAE,GAAG;AACjE;AAEA,SAAS,UAAU,MAA6E;CAC9F,OAAO,SAAS,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK,MAA0C,IAAI,KAAA;AAC5F;AAEA,eAAsB,mBAAyC;CAC7D,OAAO,MAAM,QAAQC,qBAAAA,kBAAkB,KAAA,GAAW,SAAS;AAC7D;AAEA,eAAsB,qBAA4C;CAChE,OAAO,MAAM,QAAQ,GAAGA,qBAAAA,iBAAiB,UAAU,EAAE,QAAQ,OAAO,IAAI,SAAS;EAC/E,MAAM,SAAS,UAAU,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,OAAO,KAAK,gBAAgB,OAAO;GAAE,GAAG;GAAQ,aAAa;EAAK,IAAI;CACxE,CAAC;AACH;AAEA,eAAsB,sBAA4C;CAChE,OAAO,MAAM,QAAQ,GAAGA,qBAAAA,iBAAiB,WAAW,EAAE,QAAQ,OAAO,GAAG,SAAS;AACnF;;AAGA,eAAsB,kBAA0C;CAC9D,OAAO,MAAM,QAAQ,GAAGA,qBAAAA,iBAAiB,SAAS,EAAE,QAAQ,OAAO,IAAI,SACrE,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,SAAS,YACrB,OAAO,KAAK,eAAe,YAC3B,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,gBAAgB,YAC5B,OAAO,KAAK,aAAa,WACrB;EACE,MAAM,KAAK;EACX,YAAY,KAAK;EACjB,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,WAAW,KAAK;EAChB,aAAa,KAAK;EAClB,UAAU,KAAK;CACjB,IACA,KAAA,CACN;AACF;AAEA,eAAsB,eAAe,WAAyC;CAC5E,OAAO,MAAM,QACX,GAAGA,qBAAAA,iBAAiB,WAAW,mBAAmB,SAAS,EAAE,WAC7D,EAAE,QAAQ,OAAO,GACjB,SACF;AACF;AAEA,eAAsB,YAAY,WAAyC;CACzE,OAAO,MAAM,QACX,GAAGA,qBAAAA,iBAAiB,WAAW,mBAAmB,SAAS,EAAE,QAC7D,EAAE,QAAQ,OAAO,GACjB,SACF;AACF;AAEA,eAAsB,aAAa,IAAkC;CACnE,OAAO,MAAM,QAAQ,GAAGA,qBAAAA,iBAAiB,WAAW,mBAAmB,EAAE,KAAK,EAAE,QAAQ,SAAS,GAAG,SAAS;AAC/G;;;;;AAMA,eAAsB,oBAAoB,IAAkC;CAC1E,OAAO,MAAM,QACX,GAAGC,qBAAAA,sBAAsB,GAAG,mBAAmB,EAAE,KACjD,EAAE,QAAQ,SAAS,GACnB,YACC,QAAQ,YAAYC,eAAAA,gBAAgB,QAAQ,OAAO,CACtD;AACF;AAEA,eAAsB,mBACpB,OACiE;CACjE,OAAO,MAAM,QACX,GAAGF,qBAAAA,iBAAiB,YACpB;EAAE,QAAQ;EAAO,SAAS;EAAc,MAAM,KAAK,UAAU,KAAK;CAAE,IACnE,SAAU,SAAS,KAAK,QAAQ,IAAI,EAAE,UAAU,KAAK,SAA4C,IAAI,KAAA,CACxG;AACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { RemoteAccessSettings, RemoteAccessStateView } from "../../types/remoteAccess.mjs";
|
|
2
|
+
//#region src/web/lib/remoteApi.d.ts
|
|
3
|
+
export type StateResult = {
|
|
4
|
+
state: RemoteAccessStateView;
|
|
5
|
+
} | {
|
|
6
|
+
error: string;
|
|
7
|
+
};
|
|
8
|
+
/** Enabling a contained cockpit moves the hub, so the answer says the address is about to change. */
|
|
9
|
+
export type EnableResult = {
|
|
10
|
+
state: RemoteAccessStateView;
|
|
11
|
+
handingOver?: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
error: string;
|
|
14
|
+
};
|
|
15
|
+
export type PairingResult = {
|
|
16
|
+
code: string;
|
|
17
|
+
manualCode: string;
|
|
18
|
+
pairUrl: string;
|
|
19
|
+
expiresAt: string;
|
|
20
|
+
publicKey: string;
|
|
21
|
+
fingerprint: string;
|
|
22
|
+
revision: number;
|
|
23
|
+
} | {
|
|
24
|
+
error: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function fetchRemoteState(): Promise<StateResult>;
|
|
27
|
+
export declare function enableRemoteAccess(): Promise<EnableResult>;
|
|
28
|
+
export declare function disableRemoteAccess(): Promise<StateResult>;
|
|
29
|
+
/** Mints the code the QR encodes. Each call retires the previous one. */
|
|
30
|
+
export declare function mintPairingCode(): Promise<PairingResult>;
|
|
31
|
+
export declare function approvePairing(requestId: string): Promise<StateResult>;
|
|
32
|
+
export declare function denyPairing(requestId: string): Promise<StateResult>;
|
|
33
|
+
export declare function revokeDevice(id: string): Promise<StateResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Removes a trusted native device and every live session it holds. A remote caller answers a step-up
|
|
36
|
+
* first; a quick-tunnel browser cannot, so the hub refuses it with a message this returns as `error`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function revokeTrustedDevice(id: string): Promise<StateResult>;
|
|
39
|
+
export declare function saveRemoteSettings(patch: Partial<RemoteAccessSettings>): Promise<{
|
|
40
|
+
settings: RemoteAccessSettings;
|
|
41
|
+
} | {
|
|
42
|
+
error: string;
|
|
43
|
+
}>;
|
|
44
|
+
//#endregion
|
|
45
|
+
//# sourceMappingURL=remoteApi.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteApi.d.mts","names":[],"sources":["../../../src/web/lib/remoteApi.ts"],"mappings":";;YASY;EAAgB,OAAO;;EAA4B;;;YAEnD;EAAiB,OAAO;EAAuB;;EAA4B;;YAC3E;EAEN;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;wBA6CgB,oBAAoB,QAAQ;wBAI5B,sBAAsB,QAAQ;wBAQ9B,uBAAuB,QAAQ;;wBAK/B,mBAAmB,QAAQ;wBAsB3B,eAAe,oBAAoB,QAAQ;wBAQ3C,YAAY,oBAAoB,QAAQ;wBAQxC,aAAa,aAAa,QAAQ;;;;;wBAQlC,oBAAoB,aAAa,QAAQ;wBASzC,mBACpB,OAAO,QAAQ,wBACd;EAAU,UAAU;;EAA2B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { REMOTE_API_ROUTE, TRUSTED_DEVICES_ROUTE } from "../../types/remoteAccess.mjs";
|
|
2
|
+
import { sealedHttpSession } from "./sealedSession.mjs";
|
|
3
|
+
import { fetchWithStepUp } from "./stepUp.mjs";
|
|
4
|
+
//#region src/web/lib/remoteApi.ts
|
|
5
|
+
const UNREACHABLE = "The cockpit hub is unreachable.";
|
|
6
|
+
const JSON_HEADERS = { "Content-Type": "application/json" };
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* One shape for every remote-access call, mirroring `authApi.ts`: a network
|
|
12
|
+
* failure, a non-2xx answer, and a 2xx body missing what was asked for all come
|
|
13
|
+
* back as `{ error }`, so the dialog has one branch to render.
|
|
14
|
+
*/
|
|
15
|
+
async function request(input, init, pick, send = (target, options) => sealedHttpSession.fetch(target, options)) {
|
|
16
|
+
let response;
|
|
17
|
+
try {
|
|
18
|
+
response = await send(input, init);
|
|
19
|
+
} catch {
|
|
20
|
+
return { error: UNREACHABLE };
|
|
21
|
+
}
|
|
22
|
+
let body;
|
|
23
|
+
try {
|
|
24
|
+
body = await response.json();
|
|
25
|
+
} catch {
|
|
26
|
+
body = void 0;
|
|
27
|
+
}
|
|
28
|
+
if (response.ok && isRecord(body)) {
|
|
29
|
+
const picked = pick(body);
|
|
30
|
+
if (picked !== void 0) return picked;
|
|
31
|
+
}
|
|
32
|
+
if (isRecord(body) && typeof body.error === "string") return { error: body.error };
|
|
33
|
+
return { error: `The hub answered ${String(response.status)}.` };
|
|
34
|
+
}
|
|
35
|
+
function pickState(body) {
|
|
36
|
+
return isRecord(body.state) ? { state: body.state } : void 0;
|
|
37
|
+
}
|
|
38
|
+
async function fetchRemoteState() {
|
|
39
|
+
return await request(REMOTE_API_ROUTE, void 0, pickState);
|
|
40
|
+
}
|
|
41
|
+
async function enableRemoteAccess() {
|
|
42
|
+
return await request(`${REMOTE_API_ROUTE}/enable`, { method: "POST" }, (body) => {
|
|
43
|
+
const picked = pickState(body);
|
|
44
|
+
if (picked === void 0) return void 0;
|
|
45
|
+
return body.handingOver === true ? {
|
|
46
|
+
...picked,
|
|
47
|
+
handingOver: true
|
|
48
|
+
} : picked;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async function disableRemoteAccess() {
|
|
52
|
+
return await request(`${REMOTE_API_ROUTE}/disable`, { method: "POST" }, pickState);
|
|
53
|
+
}
|
|
54
|
+
/** Mints the code the QR encodes. Each call retires the previous one. */
|
|
55
|
+
async function mintPairingCode() {
|
|
56
|
+
return await request(`${REMOTE_API_ROUTE}/codes`, { method: "POST" }, (body) => typeof body.pairUrl === "string" && typeof body.code === "string" && typeof body.manualCode === "string" && typeof body.expiresAt === "string" && typeof body.publicKey === "string" && typeof body.fingerprint === "string" && typeof body.revision === "number" ? {
|
|
57
|
+
code: body.code,
|
|
58
|
+
manualCode: body.manualCode,
|
|
59
|
+
pairUrl: body.pairUrl,
|
|
60
|
+
expiresAt: body.expiresAt,
|
|
61
|
+
publicKey: body.publicKey,
|
|
62
|
+
fingerprint: body.fingerprint,
|
|
63
|
+
revision: body.revision
|
|
64
|
+
} : void 0);
|
|
65
|
+
}
|
|
66
|
+
async function approvePairing(requestId) {
|
|
67
|
+
return await request(`${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/approve`, { method: "POST" }, pickState);
|
|
68
|
+
}
|
|
69
|
+
async function denyPairing(requestId) {
|
|
70
|
+
return await request(`${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/deny`, { method: "POST" }, pickState);
|
|
71
|
+
}
|
|
72
|
+
async function revokeDevice(id) {
|
|
73
|
+
return await request(`${REMOTE_API_ROUTE}/devices/${encodeURIComponent(id)}`, { method: "DELETE" }, pickState);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Removes a trusted native device and every live session it holds. A remote caller answers a step-up
|
|
77
|
+
* first; a quick-tunnel browser cannot, so the hub refuses it with a message this returns as `error`.
|
|
78
|
+
*/
|
|
79
|
+
async function revokeTrustedDevice(id) {
|
|
80
|
+
return await request(`${TRUSTED_DEVICES_ROUTE}/${encodeURIComponent(id)}`, { method: "DELETE" }, pickState, (target, options) => fetchWithStepUp(target, options));
|
|
81
|
+
}
|
|
82
|
+
async function saveRemoteSettings(patch) {
|
|
83
|
+
return await request(`${REMOTE_API_ROUTE}/settings`, {
|
|
84
|
+
method: "PUT",
|
|
85
|
+
headers: JSON_HEADERS,
|
|
86
|
+
body: JSON.stringify(patch)
|
|
87
|
+
}, (body) => isRecord(body.settings) ? { settings: body.settings } : void 0);
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { approvePairing, denyPairing, disableRemoteAccess, enableRemoteAccess, fetchRemoteState, mintPairingCode, revokeDevice, revokeTrustedDevice, saveRemoteSettings };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=remoteApi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteApi.mjs","names":[],"sources":["../../../src/web/lib/remoteApi.ts"],"sourcesContent":["import {\n REMOTE_API_ROUTE,\n TRUSTED_DEVICES_ROUTE,\n type RemoteAccessSettings,\n type RemoteAccessStateView,\n} from '../../types/remoteAccess';\nimport { sealedHttpSession } from './sealedSession';\nimport { fetchWithStepUp } from './stepUp';\n\nexport type StateResult = { state: RemoteAccessStateView } | { error: string };\n/** Enabling a contained cockpit moves the hub, so the answer says the address is about to change. */\nexport type EnableResult = { state: RemoteAccessStateView; handingOver?: boolean } | { error: string };\nexport type PairingResult =\n | {\n code: string;\n manualCode: string;\n pairUrl: string;\n expiresAt: string;\n publicKey: string;\n fingerprint: string;\n revision: number;\n }\n | { error: string };\n\nconst UNREACHABLE = 'The cockpit hub is unreachable.';\nconst JSON_HEADERS = { 'Content-Type': 'application/json' };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * One shape for every remote-access call, mirroring `authApi.ts`: a network\n * failure, a non-2xx answer, and a 2xx body missing what was asked for all come\n * back as `{ error }`, so the dialog has one branch to render.\n */\nasync function request<T>(\n input: string,\n init: RequestInit | undefined,\n pick: (body: Record<string, unknown>) => T | undefined,\n send: (input: string, init?: RequestInit) => Promise<Response> = (target, options) =>\n sealedHttpSession.fetch(target, options),\n): Promise<T | { error: string }> {\n let response: Response;\n try {\n response = await send(input, init);\n } catch {\n return { error: UNREACHABLE };\n }\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = undefined;\n }\n if (response.ok && isRecord(body)) {\n const picked = pick(body);\n if (picked !== undefined) return picked;\n }\n if (isRecord(body) && typeof body.error === 'string') return { error: body.error };\n return { error: `The hub answered ${String(response.status)}.` };\n}\n\nfunction pickState(body: Record<string, unknown>): { state: RemoteAccessStateView } | undefined {\n return isRecord(body.state) ? { state: body.state as unknown as RemoteAccessStateView } : undefined;\n}\n\nexport async function fetchRemoteState(): Promise<StateResult> {\n return await request(REMOTE_API_ROUTE, undefined, pickState);\n}\n\nexport async function enableRemoteAccess(): Promise<EnableResult> {\n return await request(`${REMOTE_API_ROUTE}/enable`, { method: 'POST' }, (body) => {\n const picked = pickState(body);\n if (picked === undefined) return undefined;\n return body.handingOver === true ? { ...picked, handingOver: true } : picked;\n });\n}\n\nexport async function disableRemoteAccess(): Promise<StateResult> {\n return await request(`${REMOTE_API_ROUTE}/disable`, { method: 'POST' }, pickState);\n}\n\n/** Mints the code the QR encodes. Each call retires the previous one. */\nexport async function mintPairingCode(): Promise<PairingResult> {\n return await request(`${REMOTE_API_ROUTE}/codes`, { method: 'POST' }, (body) =>\n typeof body.pairUrl === 'string' &&\n typeof body.code === 'string' &&\n typeof body.manualCode === 'string' &&\n typeof body.expiresAt === 'string' &&\n typeof body.publicKey === 'string' &&\n typeof body.fingerprint === 'string' &&\n typeof body.revision === 'number'\n ? {\n code: body.code,\n manualCode: body.manualCode,\n pairUrl: body.pairUrl,\n expiresAt: body.expiresAt,\n publicKey: body.publicKey,\n fingerprint: body.fingerprint,\n revision: body.revision,\n }\n : undefined,\n );\n}\n\nexport async function approvePairing(requestId: string): Promise<StateResult> {\n return await request(\n `${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/approve`,\n { method: 'POST' },\n pickState,\n );\n}\n\nexport async function denyPairing(requestId: string): Promise<StateResult> {\n return await request(\n `${REMOTE_API_ROUTE}/pairing/${encodeURIComponent(requestId)}/deny`,\n { method: 'POST' },\n pickState,\n );\n}\n\nexport async function revokeDevice(id: string): Promise<StateResult> {\n return await request(`${REMOTE_API_ROUTE}/devices/${encodeURIComponent(id)}`, { method: 'DELETE' }, pickState);\n}\n\n/**\n * Removes a trusted native device and every live session it holds. A remote caller answers a step-up\n * first; a quick-tunnel browser cannot, so the hub refuses it with a message this returns as `error`.\n */\nexport async function revokeTrustedDevice(id: string): Promise<StateResult> {\n return await request(\n `${TRUSTED_DEVICES_ROUTE}/${encodeURIComponent(id)}`,\n { method: 'DELETE' },\n pickState,\n (target, options) => fetchWithStepUp(target, options),\n );\n}\n\nexport async function saveRemoteSettings(\n patch: Partial<RemoteAccessSettings>,\n): Promise<{ settings: RemoteAccessSettings } | { error: string }> {\n return await request(\n `${REMOTE_API_ROUTE}/settings`,\n { method: 'PUT', headers: JSON_HEADERS, body: JSON.stringify(patch) },\n (body) => (isRecord(body.settings) ? { settings: body.settings as unknown as RemoteAccessSettings } : undefined),\n );\n}\n"],"mappings":";;;;AAwBA,MAAM,cAAc;AACpB,MAAM,eAAe,EAAE,gBAAgB,mBAAmB;AAE1D,SAAS,SAAS,OAAkD;CAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;;;;AAOA,eAAe,QACb,OACA,MACA,MACA,QAAkE,QAAQ,YACxE,kBAAkB,MAAM,QAAQ,OAAO,GACT;CAChC,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,KAAK,OAAO,IAAI;CACnC,QAAQ;EACN,OAAO,EAAE,OAAO,YAAY;CAC9B;CACA,IAAI;CACJ,IAAI;EACF,OAAO,MAAM,SAAS,KAAK;CAC7B,QAAQ;EACN,OAAO,KAAA;CACT;CACA,IAAI,SAAS,MAAM,SAAS,IAAI,GAAG;EACjC,MAAM,SAAS,KAAK,IAAI;EACxB,IAAI,WAAW,KAAA,GAAW,OAAO;CACnC;CACA,IAAI,SAAS,IAAI,KAAK,OAAO,KAAK,UAAU,UAAU,OAAO,EAAE,OAAO,KAAK,MAAM;CACjF,OAAO,EAAE,OAAO,oBAAoB,OAAO,SAAS,MAAM,EAAE,GAAG;AACjE;AAEA,SAAS,UAAU,MAA6E;CAC9F,OAAO,SAAS,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK,MAA0C,IAAI,KAAA;AAC5F;AAEA,eAAsB,mBAAyC;CAC7D,OAAO,MAAM,QAAQ,kBAAkB,KAAA,GAAW,SAAS;AAC7D;AAEA,eAAsB,qBAA4C;CAChE,OAAO,MAAM,QAAQ,GAAG,iBAAiB,UAAU,EAAE,QAAQ,OAAO,IAAI,SAAS;EAC/E,MAAM,SAAS,UAAU,IAAI;EAC7B,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,OAAO,KAAK,gBAAgB,OAAO;GAAE,GAAG;GAAQ,aAAa;EAAK,IAAI;CACxE,CAAC;AACH;AAEA,eAAsB,sBAA4C;CAChE,OAAO,MAAM,QAAQ,GAAG,iBAAiB,WAAW,EAAE,QAAQ,OAAO,GAAG,SAAS;AACnF;;AAGA,eAAsB,kBAA0C;CAC9D,OAAO,MAAM,QAAQ,GAAG,iBAAiB,SAAS,EAAE,QAAQ,OAAO,IAAI,SACrE,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,SAAS,YACrB,OAAO,KAAK,eAAe,YAC3B,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,cAAc,YAC1B,OAAO,KAAK,gBAAgB,YAC5B,OAAO,KAAK,aAAa,WACrB;EACE,MAAM,KAAK;EACX,YAAY,KAAK;EACjB,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,WAAW,KAAK;EAChB,aAAa,KAAK;EAClB,UAAU,KAAK;CACjB,IACA,KAAA,CACN;AACF;AAEA,eAAsB,eAAe,WAAyC;CAC5E,OAAO,MAAM,QACX,GAAG,iBAAiB,WAAW,mBAAmB,SAAS,EAAE,WAC7D,EAAE,QAAQ,OAAO,GACjB,SACF;AACF;AAEA,eAAsB,YAAY,WAAyC;CACzE,OAAO,MAAM,QACX,GAAG,iBAAiB,WAAW,mBAAmB,SAAS,EAAE,QAC7D,EAAE,QAAQ,OAAO,GACjB,SACF;AACF;AAEA,eAAsB,aAAa,IAAkC;CACnE,OAAO,MAAM,QAAQ,GAAG,iBAAiB,WAAW,mBAAmB,EAAE,KAAK,EAAE,QAAQ,SAAS,GAAG,SAAS;AAC/G;;;;;AAMA,eAAsB,oBAAoB,IAAkC;CAC1E,OAAO,MAAM,QACX,GAAG,sBAAsB,GAAG,mBAAmB,EAAE,KACjD,EAAE,QAAQ,SAAS,GACnB,YACC,QAAQ,YAAY,gBAAgB,QAAQ,OAAO,CACtD;AACF;AAEA,eAAsB,mBACpB,OACiE;CACjE,OAAO,MAAM,QACX,GAAG,iBAAiB,YACpB;EAAE,QAAQ;EAAO,SAAS;EAAc,MAAM,KAAK,UAAU,KAAK;CAAE,IACnE,SAAU,SAAS,KAAK,QAAQ,IAAI,EAAE,UAAU,KAAK,SAA4C,IAAI,KAAA,CACxG;AACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
const require_remoteAccess = require("../../types/remoteAccess.cjs");
|
|
2
|
+
let _agimon_ai_po_web_security_browser = require("@agimon-ai/po-web-security/browser");
|
|
3
|
+
//#region src/web/lib/sealedSession.ts
|
|
4
|
+
/** Each concurrent transport owns independent nonce counters and a purpose-bound server channel. */
|
|
5
|
+
const sealedSession = (0, _agimon_ai_po_web_security_browser.createSealedTransport)();
|
|
6
|
+
const sealedProtocolSession = (0, _agimon_ai_po_web_security_browser.createSealedTransport)();
|
|
7
|
+
/** Plugins import this singleton directly, so it remains the HTTP channel. */
|
|
8
|
+
const sealedHttpSession = _agimon_ai_po_web_security_browser.sealedTransport;
|
|
9
|
+
sealedHttpSession.relayRequestsThrough(require_remoteAccess.REMOTE_HTTP_ROUTE);
|
|
10
|
+
const SCOPED_TRANSPORTS = [
|
|
11
|
+
["session", sealedSession],
|
|
12
|
+
["protocol", sealedProtocolSession],
|
|
13
|
+
["http", sealedHttpSession]
|
|
14
|
+
];
|
|
15
|
+
/** Stored after QR pairing or passkey sign-in so this tab can re-establish the ephemeral channel. */
|
|
16
|
+
const HOST_KEY_STORAGE = "po.channelKey";
|
|
17
|
+
let restoration;
|
|
18
|
+
function rememberHostChannelKey(hostPublicKey) {
|
|
19
|
+
restoration = void 0;
|
|
20
|
+
try {
|
|
21
|
+
window.sessionStorage.setItem(HOST_KEY_STORAGE, hostPublicKey);
|
|
22
|
+
} catch {}
|
|
23
|
+
}
|
|
24
|
+
function rememberedHostChannelKey() {
|
|
25
|
+
try {
|
|
26
|
+
return window.sessionStorage.getItem(HOST_KEY_STORAGE) ?? void 0;
|
|
27
|
+
} catch {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Re-establishes the channel on load, if this device has a host key to use.
|
|
33
|
+
*
|
|
34
|
+
* Session storage rather than local: the channel is ephemeral by design, and a
|
|
35
|
+
* key that outlived the tab would suggest a channel that no longer exists.
|
|
36
|
+
*/
|
|
37
|
+
async function establishSealedSession() {
|
|
38
|
+
const hostKey = rememberedHostChannelKey();
|
|
39
|
+
if (hostKey === void 0) return false;
|
|
40
|
+
for (const [scope, transport] of SCOPED_TRANSPORTS) {
|
|
41
|
+
const clientPublicKey = await transport.connect(hostKey);
|
|
42
|
+
if (clientPublicKey === void 0 || !await registerChannel(scope, clientPublicKey)) {
|
|
43
|
+
resetSealedSessions();
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
function restoreSealedSession() {
|
|
50
|
+
restoration ??= establishSealedSession();
|
|
51
|
+
return restoration;
|
|
52
|
+
}
|
|
53
|
+
function resetSealedSessions() {
|
|
54
|
+
for (const [, transport] of SCOPED_TRANSPORTS) transport.reset();
|
|
55
|
+
restoration = void 0;
|
|
56
|
+
}
|
|
57
|
+
async function registerChannel(scope, clientPublicKey) {
|
|
58
|
+
try {
|
|
59
|
+
return (await fetch(require_remoteAccess.REMOTE_CHANNEL_ROUTE, {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: { "Content-Type": "application/json" },
|
|
62
|
+
credentials: "same-origin",
|
|
63
|
+
body: JSON.stringify({
|
|
64
|
+
scope,
|
|
65
|
+
clientPublicKey
|
|
66
|
+
})
|
|
67
|
+
})).ok;
|
|
68
|
+
} catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
exports.rememberHostChannelKey = rememberHostChannelKey;
|
|
74
|
+
exports.rememberedHostChannelKey = rememberedHostChannelKey;
|
|
75
|
+
exports.resetSealedSessions = resetSealedSessions;
|
|
76
|
+
exports.restoreSealedSession = restoreSealedSession;
|
|
77
|
+
exports.sealedHttpSession = sealedHttpSession;
|
|
78
|
+
exports.sealedProtocolSession = sealedProtocolSession;
|
|
79
|
+
exports.sealedSession = sealedSession;
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=sealedSession.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealedSession.cjs","names":["createSealedTransport","sealedTransport","REMOTE_HTTP_ROUTE","REMOTE_CHANNEL_ROUTE"],"sources":["../../../src/web/lib/sealedSession.ts"],"sourcesContent":["import { createSealedTransport, sealedTransport } from '@agimon-ai/po-web-security/browser';\n\nimport { REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, type RemoteChannelScope } from '../../types/remoteAccess';\n\n/** Each concurrent transport owns independent nonce counters and a purpose-bound server channel. */\nexport const sealedSession = createSealedTransport();\nexport const sealedProtocolSession = createSealedTransport();\n/** Plugins import this singleton directly, so it remains the HTTP channel. */\nexport const sealedHttpSession = sealedTransport;\nsealedHttpSession.relayRequestsThrough(REMOTE_HTTP_ROUTE);\n\nconst SCOPED_TRANSPORTS = [\n ['session', sealedSession],\n ['protocol', sealedProtocolSession],\n ['http', sealedHttpSession],\n] as const;\n\n/** Stored after QR pairing or passkey sign-in so this tab can re-establish the ephemeral channel. */\nconst HOST_KEY_STORAGE = 'po.channelKey';\n\nlet restoration: Promise<boolean> | undefined;\nexport function rememberHostChannelKey(hostPublicKey: string): void {\n restoration = undefined;\n try {\n window.sessionStorage.setItem(HOST_KEY_STORAGE, hostPublicKey);\n } catch {\n // Storage denied; the channel lasts this page load only.\n }\n}\n\nexport function rememberedHostChannelKey(): string | undefined {\n try {\n return window.sessionStorage.getItem(HOST_KEY_STORAGE) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Re-establishes the channel on load, if this device has a host key to use.\n *\n * Session storage rather than local: the channel is ephemeral by design, and a\n * key that outlived the tab would suggest a channel that no longer exists.\n */\nasync function establishSealedSession(): Promise<boolean> {\n const hostKey = rememberedHostChannelKey();\n if (hostKey === undefined) return false;\n\n for (const [scope, transport] of SCOPED_TRANSPORTS) {\n const clientPublicKey = await transport.connect(hostKey);\n if (clientPublicKey === undefined || !(await registerChannel(scope, clientPublicKey))) {\n resetSealedSessions();\n return false;\n }\n }\n return true;\n}\n\nexport function restoreSealedSession(): Promise<boolean> {\n restoration ??= establishSealedSession();\n return restoration;\n}\n\nexport function resetSealedSessions(): void {\n for (const [, transport] of SCOPED_TRANSPORTS) transport.reset();\n restoration = undefined;\n}\n\nasync function registerChannel(scope: RemoteChannelScope, clientPublicKey: string): Promise<boolean> {\n try {\n const response = await fetch(REMOTE_CHANNEL_ROUTE, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'same-origin',\n body: JSON.stringify({ scope, clientPublicKey }),\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;AAKA,MAAa,iBAAA,GAAgBA,mCAAAA,sBAAAA,CAAsB;AACnD,MAAa,yBAAA,GAAwBA,mCAAAA,sBAAAA,CAAsB;;AAE3D,MAAa,oBAAoBC,mCAAAA;AACjC,kBAAkB,qBAAqBC,qBAAAA,iBAAiB;AAExD,MAAM,oBAAoB;CACxB,CAAC,WAAW,aAAa;CACzB,CAAC,YAAY,qBAAqB;CAClC,CAAC,QAAQ,iBAAiB;AAC5B;;AAGA,MAAM,mBAAmB;AAEzB,IAAI;AACJ,SAAgB,uBAAuB,eAA6B;CAClE,cAAc,KAAA;CACd,IAAI;EACF,OAAO,eAAe,QAAQ,kBAAkB,aAAa;CAC/D,QAAQ,CAER;AACF;AAEA,SAAgB,2BAA+C;CAC7D,IAAI;EACF,OAAO,OAAO,eAAe,QAAQ,gBAAgB,KAAK,KAAA;CAC5D,QAAQ;EACN;CACF;AACF;;;;;;;AAQA,eAAe,yBAA2C;CACxD,MAAM,UAAU,yBAAyB;CACzC,IAAI,YAAY,KAAA,GAAW,OAAO;CAElC,KAAK,MAAM,CAAC,OAAO,cAAc,mBAAmB;EAClD,MAAM,kBAAkB,MAAM,UAAU,QAAQ,OAAO;EACvD,IAAI,oBAAoB,KAAA,KAAa,CAAE,MAAM,gBAAgB,OAAO,eAAe,GAAI;GACrF,oBAAoB;GACpB,OAAO;EACT;CACF;CACA,OAAO;AACT;AAEA,SAAgB,uBAAyC;CACvD,gBAAgB,uBAAuB;CACvC,OAAO;AACT;AAEA,SAAgB,sBAA4B;CAC1C,KAAK,MAAM,GAAG,cAAc,mBAAmB,UAAU,MAAM;CAC/D,cAAc,KAAA;AAChB;AAEA,eAAe,gBAAgB,OAA2B,iBAA2C;CACnG,IAAI;EAOF,QAAO,MANgB,MAAMC,qBAAAA,sBAAsB;GACjD,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,aAAa;GACb,MAAM,KAAK,UAAU;IAAE;IAAO;GAAgB,CAAC;EACjD,CAAC,EAAA,CACe;CAClB,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/web/lib/sealedSession.d.ts
|
|
2
|
+
/** Each concurrent transport owns independent nonce counters and a purpose-bound server channel. */
|
|
3
|
+
export declare const sealedSession: import("@agimon-ai/po-web-security/browser").SealedTransport & {
|
|
4
|
+
connect: (hostPublicKey: string) => Promise<string | undefined>;
|
|
5
|
+
reset: () => void;
|
|
6
|
+
relayRequestsThrough: (path: string) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const sealedProtocolSession: import("@agimon-ai/po-web-security/browser").SealedTransport & {
|
|
9
|
+
connect: (hostPublicKey: string) => Promise<string | undefined>;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
relayRequestsThrough: (path: string) => void;
|
|
12
|
+
};
|
|
13
|
+
/** Plugins import this singleton directly, so it remains the HTTP channel. */
|
|
14
|
+
export declare const sealedHttpSession: import("@agimon-ai/po-web-security/browser").SealedTransport & {
|
|
15
|
+
connect: (hostPublicKey: string) => Promise<string | undefined>;
|
|
16
|
+
reset: () => void;
|
|
17
|
+
relayRequestsThrough: (path: string) => void;
|
|
18
|
+
};
|
|
19
|
+
export declare function rememberHostChannelKey(hostPublicKey: string): void;
|
|
20
|
+
export declare function rememberedHostChannelKey(): string | undefined;
|
|
21
|
+
export declare function restoreSealedSession(): Promise<boolean>;
|
|
22
|
+
export declare function resetSealedSessions(): void;
|
|
23
|
+
//#endregion
|
|
24
|
+
//# sourceMappingURL=sealedSession.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealedSession.d.mts","names":[],"sources":["../../../src/web/lib/sealedSession.ts"],"mappings":";;qBAKa,4DAAa;sCAAb;;;;qBACA,oEAAqB;sCAArB;;;;;qBAEA,gEAAiB;sCAAjB;;;;wBAaG,uBAAuB;wBASvB;wBA4BA,wBAAwB;wBAKxB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE } from "../../types/remoteAccess.mjs";
|
|
2
|
+
import { createSealedTransport, sealedTransport } from "@agimon-ai/po-web-security/browser";
|
|
3
|
+
//#region src/web/lib/sealedSession.ts
|
|
4
|
+
/** Each concurrent transport owns independent nonce counters and a purpose-bound server channel. */
|
|
5
|
+
const sealedSession = createSealedTransport();
|
|
6
|
+
const sealedProtocolSession = createSealedTransport();
|
|
7
|
+
/** Plugins import this singleton directly, so it remains the HTTP channel. */
|
|
8
|
+
const sealedHttpSession = sealedTransport;
|
|
9
|
+
sealedHttpSession.relayRequestsThrough(REMOTE_HTTP_ROUTE);
|
|
10
|
+
const SCOPED_TRANSPORTS = [
|
|
11
|
+
["session", sealedSession],
|
|
12
|
+
["protocol", sealedProtocolSession],
|
|
13
|
+
["http", sealedHttpSession]
|
|
14
|
+
];
|
|
15
|
+
/** Stored after QR pairing or passkey sign-in so this tab can re-establish the ephemeral channel. */
|
|
16
|
+
const HOST_KEY_STORAGE = "po.channelKey";
|
|
17
|
+
let restoration;
|
|
18
|
+
function rememberHostChannelKey(hostPublicKey) {
|
|
19
|
+
restoration = void 0;
|
|
20
|
+
try {
|
|
21
|
+
window.sessionStorage.setItem(HOST_KEY_STORAGE, hostPublicKey);
|
|
22
|
+
} catch {}
|
|
23
|
+
}
|
|
24
|
+
function rememberedHostChannelKey() {
|
|
25
|
+
try {
|
|
26
|
+
return window.sessionStorage.getItem(HOST_KEY_STORAGE) ?? void 0;
|
|
27
|
+
} catch {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Re-establishes the channel on load, if this device has a host key to use.
|
|
33
|
+
*
|
|
34
|
+
* Session storage rather than local: the channel is ephemeral by design, and a
|
|
35
|
+
* key that outlived the tab would suggest a channel that no longer exists.
|
|
36
|
+
*/
|
|
37
|
+
async function establishSealedSession() {
|
|
38
|
+
const hostKey = rememberedHostChannelKey();
|
|
39
|
+
if (hostKey === void 0) return false;
|
|
40
|
+
for (const [scope, transport] of SCOPED_TRANSPORTS) {
|
|
41
|
+
const clientPublicKey = await transport.connect(hostKey);
|
|
42
|
+
if (clientPublicKey === void 0 || !await registerChannel(scope, clientPublicKey)) {
|
|
43
|
+
resetSealedSessions();
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
function restoreSealedSession() {
|
|
50
|
+
restoration ??= establishSealedSession();
|
|
51
|
+
return restoration;
|
|
52
|
+
}
|
|
53
|
+
function resetSealedSessions() {
|
|
54
|
+
for (const [, transport] of SCOPED_TRANSPORTS) transport.reset();
|
|
55
|
+
restoration = void 0;
|
|
56
|
+
}
|
|
57
|
+
async function registerChannel(scope, clientPublicKey) {
|
|
58
|
+
try {
|
|
59
|
+
return (await fetch(REMOTE_CHANNEL_ROUTE, {
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: { "Content-Type": "application/json" },
|
|
62
|
+
credentials: "same-origin",
|
|
63
|
+
body: JSON.stringify({
|
|
64
|
+
scope,
|
|
65
|
+
clientPublicKey
|
|
66
|
+
})
|
|
67
|
+
})).ok;
|
|
68
|
+
} catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { rememberHostChannelKey, rememberedHostChannelKey, resetSealedSessions, restoreSealedSession, sealedHttpSession, sealedProtocolSession, sealedSession };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=sealedSession.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealedSession.mjs","names":[],"sources":["../../../src/web/lib/sealedSession.ts"],"sourcesContent":["import { createSealedTransport, sealedTransport } from '@agimon-ai/po-web-security/browser';\n\nimport { REMOTE_CHANNEL_ROUTE, REMOTE_HTTP_ROUTE, type RemoteChannelScope } from '../../types/remoteAccess';\n\n/** Each concurrent transport owns independent nonce counters and a purpose-bound server channel. */\nexport const sealedSession = createSealedTransport();\nexport const sealedProtocolSession = createSealedTransport();\n/** Plugins import this singleton directly, so it remains the HTTP channel. */\nexport const sealedHttpSession = sealedTransport;\nsealedHttpSession.relayRequestsThrough(REMOTE_HTTP_ROUTE);\n\nconst SCOPED_TRANSPORTS = [\n ['session', sealedSession],\n ['protocol', sealedProtocolSession],\n ['http', sealedHttpSession],\n] as const;\n\n/** Stored after QR pairing or passkey sign-in so this tab can re-establish the ephemeral channel. */\nconst HOST_KEY_STORAGE = 'po.channelKey';\n\nlet restoration: Promise<boolean> | undefined;\nexport function rememberHostChannelKey(hostPublicKey: string): void {\n restoration = undefined;\n try {\n window.sessionStorage.setItem(HOST_KEY_STORAGE, hostPublicKey);\n } catch {\n // Storage denied; the channel lasts this page load only.\n }\n}\n\nexport function rememberedHostChannelKey(): string | undefined {\n try {\n return window.sessionStorage.getItem(HOST_KEY_STORAGE) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Re-establishes the channel on load, if this device has a host key to use.\n *\n * Session storage rather than local: the channel is ephemeral by design, and a\n * key that outlived the tab would suggest a channel that no longer exists.\n */\nasync function establishSealedSession(): Promise<boolean> {\n const hostKey = rememberedHostChannelKey();\n if (hostKey === undefined) return false;\n\n for (const [scope, transport] of SCOPED_TRANSPORTS) {\n const clientPublicKey = await transport.connect(hostKey);\n if (clientPublicKey === undefined || !(await registerChannel(scope, clientPublicKey))) {\n resetSealedSessions();\n return false;\n }\n }\n return true;\n}\n\nexport function restoreSealedSession(): Promise<boolean> {\n restoration ??= establishSealedSession();\n return restoration;\n}\n\nexport function resetSealedSessions(): void {\n for (const [, transport] of SCOPED_TRANSPORTS) transport.reset();\n restoration = undefined;\n}\n\nasync function registerChannel(scope: RemoteChannelScope, clientPublicKey: string): Promise<boolean> {\n try {\n const response = await fetch(REMOTE_CHANNEL_ROUTE, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'same-origin',\n body: JSON.stringify({ scope, clientPublicKey }),\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;AAKA,MAAa,gBAAgB,sBAAsB;AACnD,MAAa,wBAAwB,sBAAsB;;AAE3D,MAAa,oBAAoB;AACjC,kBAAkB,qBAAqB,iBAAiB;AAExD,MAAM,oBAAoB;CACxB,CAAC,WAAW,aAAa;CACzB,CAAC,YAAY,qBAAqB;CAClC,CAAC,QAAQ,iBAAiB;AAC5B;;AAGA,MAAM,mBAAmB;AAEzB,IAAI;AACJ,SAAgB,uBAAuB,eAA6B;CAClE,cAAc,KAAA;CACd,IAAI;EACF,OAAO,eAAe,QAAQ,kBAAkB,aAAa;CAC/D,QAAQ,CAER;AACF;AAEA,SAAgB,2BAA+C;CAC7D,IAAI;EACF,OAAO,OAAO,eAAe,QAAQ,gBAAgB,KAAK,KAAA;CAC5D,QAAQ;EACN;CACF;AACF;;;;;;;AAQA,eAAe,yBAA2C;CACxD,MAAM,UAAU,yBAAyB;CACzC,IAAI,YAAY,KAAA,GAAW,OAAO;CAElC,KAAK,MAAM,CAAC,OAAO,cAAc,mBAAmB;EAClD,MAAM,kBAAkB,MAAM,UAAU,QAAQ,OAAO;EACvD,IAAI,oBAAoB,KAAA,KAAa,CAAE,MAAM,gBAAgB,OAAO,eAAe,GAAI;GACrF,oBAAoB;GACpB,OAAO;EACT;CACF;CACA,OAAO;AACT;AAEA,SAAgB,uBAAyC;CACvD,gBAAgB,uBAAuB;CACvC,OAAO;AACT;AAEA,SAAgB,sBAA4B;CAC1C,KAAK,MAAM,GAAG,cAAc,mBAAmB,UAAU,MAAM;CAC/D,cAAc,KAAA;AAChB;AAEA,eAAe,gBAAgB,OAA2B,iBAA2C;CACnG,IAAI;EAOF,QAAO,MANgB,MAAM,sBAAsB;GACjD,QAAQ;GACR,SAAS,EAAE,gBAAgB,mBAAmB;GAC9C,aAAa;GACb,MAAM,KAAK,UAAU;IAAE;IAAO;GAAgB,CAAC;EACjD,CAAC,EAAA,CACe;CAClB,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/web/lib/sessionActivityRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/** Binds the host's live session activity view without exposing host stores to plugins. */
|
|
4
|
+
function bindSessionActivityRenderer(renderer) {
|
|
5
|
+
render = renderer;
|
|
6
|
+
}
|
|
7
|
+
function releaseSessionActivityRenderer() {
|
|
8
|
+
render = void 0;
|
|
9
|
+
}
|
|
10
|
+
/** The bound session activity view, or nothing before the app mounts and in unit tests. */
|
|
11
|
+
function renderSessionActivity(sessionId, onOpenConversation) {
|
|
12
|
+
return render?.(sessionId, onOpenConversation) ?? null;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.bindSessionActivityRenderer = bindSessionActivityRenderer;
|
|
16
|
+
exports.releaseSessionActivityRenderer = releaseSessionActivityRenderer;
|
|
17
|
+
exports.renderSessionActivity = renderSessionActivity;
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=sessionActivityRenderer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionActivityRenderer.cjs","names":[],"sources":["../../../src/web/lib/sessionActivityRenderer.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\ntype SessionActivityRenderer = (sessionId: string, onOpenConversation: () => void) => ReactNode;\n\nlet render: SessionActivityRenderer | undefined;\n\n/** Binds the host's live session activity view without exposing host stores to plugins. */\nexport function bindSessionActivityRenderer(renderer: SessionActivityRenderer): void {\n render = renderer;\n}\n\nexport function releaseSessionActivityRenderer(): void {\n render = undefined;\n}\n\n/** The bound session activity view, or nothing before the app mounts and in unit tests. */\nexport function renderSessionActivity(sessionId: string, onOpenConversation: () => void): ReactNode {\n return render?.(sessionId, onOpenConversation) ?? null;\n}\n"],"mappings":";AAIA,IAAI;;AAGJ,SAAgB,4BAA4B,UAAyC;CACnF,SAAS;AACX;AAEA,SAAgB,iCAAuC;CACrD,SAAS,KAAA;AACX;;AAGA,SAAgB,sBAAsB,WAAmB,oBAA2C;CAClG,OAAO,SAAS,WAAW,kBAAkB,KAAK;AACpD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
//#region src/web/lib/sessionActivityRenderer.d.ts
|
|
3
|
+
type SessionActivityRenderer = (sessionId: string, onOpenConversation: () => void) => ReactNode;
|
|
4
|
+
/** Binds the host's live session activity view without exposing host stores to plugins. */
|
|
5
|
+
export declare function bindSessionActivityRenderer(renderer: SessionActivityRenderer): void;
|
|
6
|
+
export declare function releaseSessionActivityRenderer(): void;
|
|
7
|
+
/** The bound session activity view, or nothing before the app mounts and in unit tests. */
|
|
8
|
+
export declare function renderSessionActivity(sessionId: string, onOpenConversation: () => void): ReactNode;
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=sessionActivityRenderer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionActivityRenderer.d.mts","names":[],"sources":["../../../src/web/lib/sessionActivityRenderer.ts"],"mappings":";;KAEK,2BAA2B,mBAAmB,mCAAmC;;wBAKtE,4BAA4B,UAAU;wBAItC;;wBAKA,sBAAsB,mBAAmB,iCAAiC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/web/lib/sessionActivityRenderer.ts
|
|
2
|
+
let render;
|
|
3
|
+
/** Binds the host's live session activity view without exposing host stores to plugins. */
|
|
4
|
+
function bindSessionActivityRenderer(renderer) {
|
|
5
|
+
render = renderer;
|
|
6
|
+
}
|
|
7
|
+
function releaseSessionActivityRenderer() {
|
|
8
|
+
render = void 0;
|
|
9
|
+
}
|
|
10
|
+
/** The bound session activity view, or nothing before the app mounts and in unit tests. */
|
|
11
|
+
function renderSessionActivity(sessionId, onOpenConversation) {
|
|
12
|
+
return render?.(sessionId, onOpenConversation) ?? null;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { bindSessionActivityRenderer, releaseSessionActivityRenderer, renderSessionActivity };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=sessionActivityRenderer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionActivityRenderer.mjs","names":[],"sources":["../../../src/web/lib/sessionActivityRenderer.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\ntype SessionActivityRenderer = (sessionId: string, onOpenConversation: () => void) => ReactNode;\n\nlet render: SessionActivityRenderer | undefined;\n\n/** Binds the host's live session activity view without exposing host stores to plugins. */\nexport function bindSessionActivityRenderer(renderer: SessionActivityRenderer): void {\n render = renderer;\n}\n\nexport function releaseSessionActivityRenderer(): void {\n render = undefined;\n}\n\n/** The bound session activity view, or nothing before the app mounts and in unit tests. */\nexport function renderSessionActivity(sessionId: string, onOpenConversation: () => void): ReactNode {\n return render?.(sessionId, onOpenConversation) ?? null;\n}\n"],"mappings":";AAIA,IAAI;;AAGJ,SAAgB,4BAA4B,UAAyC;CACnF,SAAS;AACX;AAEA,SAAgB,iCAAuC;CACrD,SAAS,KAAA;AACX;;AAGA,SAAgB,sBAAsB,WAAmB,oBAA2C;CAClG,OAAO,SAAS,WAAW,kBAAkB,KAAK;AACpD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const require_sealedSession = require("./sealedSession.cjs");
|
|
2
|
+
const require_media = require("../../types/media.cjs");
|
|
3
|
+
let _agimon_ai_po_core_web = require("@agimon-ai/po-core/web");
|
|
4
|
+
//#region src/web/lib/sessionAsset.ts
|
|
5
|
+
/** Fetches one cwd-scoped file through the sealed HTTP channel and owns its short-lived browser URL. */
|
|
6
|
+
async function loadSessionAsset(sessionId, relativePath) {
|
|
7
|
+
const response = await require_sealedSession.sealedHttpSession.fetch(require_media.sessionFileUrl(sessionId, relativePath), {
|
|
8
|
+
cache: "no-store",
|
|
9
|
+
credentials: "same-origin"
|
|
10
|
+
});
|
|
11
|
+
if (!response.ok) throw new Error(`The session file could not be loaded (${String(response.status)}).`);
|
|
12
|
+
const blob = await response.blob();
|
|
13
|
+
const url = URL.createObjectURL(blob);
|
|
14
|
+
let disposed = false;
|
|
15
|
+
return {
|
|
16
|
+
url,
|
|
17
|
+
contentType: (response.headers.get("content-type") ?? blob.type).split(";", 1)[0]?.toLowerCase() ?? "",
|
|
18
|
+
dispose() {
|
|
19
|
+
if (disposed) return;
|
|
20
|
+
disposed = true;
|
|
21
|
+
URL.revokeObjectURL(url);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** Stores one composer file on the host through the sealed HTTP channel, so a tool can be handed its path. */
|
|
26
|
+
async function uploadSessionAttachment(sessionId, file) {
|
|
27
|
+
const response = await require_sealedSession.sealedHttpSession.fetch(`${(0, _agimon_ai_po_core_web.sessionApiPath)(sessionId)}/attachments?name=${encodeURIComponent(file.name)}`, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
body: file,
|
|
30
|
+
credentials: "same-origin",
|
|
31
|
+
headers: { "content-type": file.type || "application/octet-stream" }
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok) throw new Error(`The attachment could not be uploaded (${String(response.status)}).`);
|
|
34
|
+
const { path, mimeType, size } = await response.json();
|
|
35
|
+
return {
|
|
36
|
+
path,
|
|
37
|
+
mimeType,
|
|
38
|
+
size
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
exports.loadSessionAsset = loadSessionAsset;
|
|
43
|
+
exports.uploadSessionAttachment = uploadSessionAttachment;
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=sessionAsset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionAsset.cjs","names":["sealedHttpSession","sessionFileUrl","sessionApiPath"],"sources":["../../../src/web/lib/sessionAsset.ts"],"sourcesContent":["import { sessionApiPath } from '@agimon-ai/po-core/web';\n\nimport { sessionFileUrl } from '../../types/media';\nimport { sealedHttpSession } from './sealedSession';\n\nexport interface SessionAsset {\n url: string;\n contentType: string;\n dispose(): void;\n}\n\n/** Fetches one cwd-scoped file through the sealed HTTP channel and owns its short-lived browser URL. */\nexport async function loadSessionAsset(sessionId: string, relativePath: string): Promise<SessionAsset> {\n const response = await sealedHttpSession.fetch(sessionFileUrl(sessionId, relativePath), {\n cache: 'no-store',\n credentials: 'same-origin',\n });\n if (!response.ok) throw new Error(`The session file could not be loaded (${String(response.status)}).`);\n\n const blob = await response.blob();\n const url = URL.createObjectURL(blob);\n let disposed = false;\n return {\n url,\n contentType: (response.headers.get('content-type') ?? blob.type).split(';', 1)[0]?.toLowerCase() ?? '',\n dispose() {\n if (disposed) return;\n disposed = true;\n URL.revokeObjectURL(url);\n },\n };\n}\n\nexport interface StoredSessionAttachment {\n path: string;\n mimeType: string;\n size: number;\n}\n\n/** Stores one composer file on the host through the sealed HTTP channel, so a tool can be handed its path. */\nexport async function uploadSessionAttachment(sessionId: string, file: File): Promise<StoredSessionAttachment> {\n const response = await sealedHttpSession.fetch(\n `${sessionApiPath(sessionId)}/attachments?name=${encodeURIComponent(file.name)}`,\n {\n method: 'POST',\n body: file,\n credentials: 'same-origin',\n headers: { 'content-type': file.type || 'application/octet-stream' },\n },\n );\n if (!response.ok) throw new Error(`The attachment could not be uploaded (${String(response.status)}).`);\n const { path, mimeType, size } = (await response.json()) as StoredSessionAttachment;\n return { path, mimeType, size };\n}\n"],"mappings":";;;;;AAYA,eAAsB,iBAAiB,WAAmB,cAA6C;CACrG,MAAM,WAAW,MAAMA,sBAAAA,kBAAkB,MAAMC,cAAAA,eAAe,WAAW,YAAY,GAAG;EACtF,OAAO;EACP,aAAa;CACf,CAAC;CACD,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,MAAM,yCAAyC,OAAO,SAAS,MAAM,EAAE,GAAG;CAEtG,MAAM,OAAO,MAAM,SAAS,KAAK;CACjC,MAAM,MAAM,IAAI,gBAAgB,IAAI;CACpC,IAAI,WAAW;CACf,OAAO;EACL;EACA,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK,KAAK,KAAA,CAAM,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,KAAK;EACpG,UAAU;GACR,IAAI,UAAU;GACd,WAAW;GACX,IAAI,gBAAgB,GAAG;EACzB;CACF;AACF;;AASA,eAAsB,wBAAwB,WAAmB,MAA8C;CAC7G,MAAM,WAAW,MAAMD,sBAAAA,kBAAkB,MACvC,IAAA,GAAGE,uBAAAA,eAAAA,CAAe,SAAS,EAAE,oBAAoB,mBAAmB,KAAK,IAAI,KAC7E;EACE,QAAQ;EACR,MAAM;EACN,aAAa;EACb,SAAS,EAAE,gBAAgB,KAAK,QAAQ,2BAA2B;CACrE,CACF;CACA,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,MAAM,yCAAyC,OAAO,SAAS,MAAM,EAAE,GAAG;CACtG,MAAM,EAAE,MAAM,UAAU,SAAU,MAAM,SAAS,KAAK;CACtD,OAAO;EAAE;EAAM;EAAU;CAAK;AAChC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/web/lib/sessionAsset.d.ts
|
|
2
|
+
export interface SessionAsset {
|
|
3
|
+
url: string;
|
|
4
|
+
contentType: string;
|
|
5
|
+
dispose(): void;
|
|
6
|
+
}
|
|
7
|
+
/** Fetches one cwd-scoped file through the sealed HTTP channel and owns its short-lived browser URL. */
|
|
8
|
+
export declare function loadSessionAsset(sessionId: string, relativePath: string): Promise<SessionAsset>;
|
|
9
|
+
export interface StoredSessionAttachment {
|
|
10
|
+
path: string;
|
|
11
|
+
mimeType: string;
|
|
12
|
+
size: number;
|
|
13
|
+
}
|
|
14
|
+
/** Stores one composer file on the host through the sealed HTTP channel, so a tool can be handed its path. */
|
|
15
|
+
export declare function uploadSessionAttachment(sessionId: string, file: File): Promise<StoredSessionAttachment>;
|
|
16
|
+
//#endregion
|
|
17
|
+
//# sourceMappingURL=sessionAsset.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionAsset.d.mts","names":[],"sources":["../../../src/web/lib/sessionAsset.ts"],"mappings":";iBAKiB;EACf;EACA;EACA;;;wBAIoB,iBAAiB,mBAAmB,uBAAuB,QAAQ;iBAqBxE;EACf;EACA;EACA;;;wBAIoB,wBAAwB,mBAAmB,MAAM,OAAO,QAAQ"}
|